Traietement de case à cocher dans un formulaire

Eléphant du PHP | 331 Messages

27 janv. 2011, 20:38

Bonjour,

J'ai un script maison pour une galerie de photo.

Dans mon admin les photos sont listé par catégorie.

En cas où l'administrateur aurait besoin de changer les photos de catégorie (Ex.: les photos de catégorie chien les envoyer dans la catégorie chat)

En haut du formulaire j'ai une liste déroulante contenant les catégories.

Chaque photo a une case qui peut être cochée pour la changer de catégorie.

Et en fin du formulaire un bouton submit pour envoyer les données vers la page de traitement.

Mon problème est que je n'arrive pas à traiter mes cases a cocher.

Voici mon code:

Formulaire:
echo "<form name='form' method='post' action='photos/update_photos.php' enctype='multipart/form-data'>";
echo "<table width='500' align='center' class='border'>";
echo "<tr>";
echo "<td colspan='8'align='center' class='border'><b>Administration des photos</b>";

echo "<table>";
echo "<tr>";
echo "<td><B>Cat&eacute;gorie:</B></td>";
echo "</tr>";
echo "<tr>";
echo "<td>";


mysql_connect($host,$login,$password) or die("Impossible de connecter la bd");
$base=mysql_select_db($db) or die("erreur de DB");
$sql=mysql_query('select * from photos_categories order by nom_FR') or die("Impossible d'ouvrir la table");
echo "<select name='categorie_id'>";
echo "<option value='".$row["categorie_id"]."' selected>Choisir une cat&eacute;gorie</option>";
while ($category=mysql_fetch_array($sql))
{
echo "<option value=".$category["id"].">".$category["nom_FR"]."</option>";
}
echo "</select>";
echo "</td>";
echo "</tr>";
echo "</table>";


echo "</td>\n";
echo "</tr>";
echo "<tr valign='top'>\n";
echo "<td>".$row["id"]."</td>\n";
echo "<td><input type=\"checkbox\" name=\"change_cat[]\" value=\"".$row["id"]."\"></td>\n";
//echo "<td>".$row["categorie_id"]."</td>\n";
$newwidth=resize_images(200, 150, "$url_racine/photos/img_prod/".$row["image"]."");
echo "<td><div  class=\"img-dec\"><a href=\"photos/img_prod/".$row["image"]."\"  rel=\"lightbox[roadtrip]\" title=\"my caption\"><img src='photos/img_prod/".$row["image"]."' border='0' width='".$newwidth[0]."' height='".$newwidth[1]."' class=\"border\"></a></div></td>\n";
echo "<td><input type=\"file\" name=\"images\" ><BR><input type=\"submit\" name=\"submit\" value=\"Envoyer\"></td>\n";
echo "<td><a href=\"photos/supprime_photos_conf.php?id=".$row["id"]."\">Supprimer</a></td>\n";
echo "</tr>\n";
echo "<tr>";
echo "<td colspan='8'align='center'><input type=\"submit\" name=\"change_cat_bt\" value=\"Changer de cat&eacute;gorie\"></td>";
echo "</tr>\n";
La page de traitement:
if(isset($_POST['change_cat_bt']))
{
	if(isset($_POST["change_cat"]))
	{
	foreach($_POST["change_cat"] as $i)
	{
		$sqlquery="update photos set categorie_id=\"".$_POST["categorie_id"]."\" where id=\"".$_POST["id"]."\"" or die("Mise à jour image impossible");
	$queryresult=mysql_query($sqlquery) or die("Could not execute mysql query44!");
	}
	}
}

Pouvez-vous m'aider svp?

Merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 janv. 2011, 23:13

salut,

$_POST['id'] ? ça existe pas c'est plutot $i

je te propose la solution suivante, évitant plein de requête inutile ;)
f(isset($_POST['change_cat_bt'])){
        if(isset($_POST["change_cat"]) && is_array($_POST['change_cat'])){
        $sqlquery='update photos set categorie_id=\'.$_POST['categorie_id'].'\' where id in ('.implode(',',$_POST['change_cat']);
        mysql_queru($sqlquery);
      }
}
@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 331 Messages

28 janv. 2011, 17:10

Merci,

j'ai essayé la méthode que tu me suggère mais sa fonctionne pas. (page blanche bien que j'ai changé ton code un peu car il y avait un ptit problème de syntaxe en rapport u ' et ")
  if(isset($_POST['change_cat_bt'])){
        if(isset($_POST["change_cat"]) && is_array($_POST['change_cat'])){
        $sqlquery="update photos set categorie_id=".$_POST['categorie_id']." where id in (".implode(',',$_POST['change_cat']);
        mysql_queru($sqlquery);
      }
}
Cependant, j'ai changé $_POST["id"] pour $_POST[$i] ... là j'obtiens au moins un message d'erreur me disant

Notice: Undefined index: 204 in /home/village/public_html/v2/photos/update_photos.php on line 14

Notice: Undefined index: 205 in /home/village/public_html/v2/photos/update_photos.php on line 14

Peux-tu m'aider encore svp?

Merci!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

29 janv. 2011, 00:59

Hum, effectivement il manque une ' avant le 1 er post dans la requete, c'est simple a trouver.

Si la clef est numerique vire les \'

Il manque la parenthese fermante du in.

Select truc from table where id in( 1,2,3,4 ,5,6,7,8,9,...);

@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 331 Messages

29 janv. 2011, 20:09

Je suis un peu gêné de le dire mais je n'arrive pas a trouver la bonne syntaxe
if(isset($_POST['change_cat_bt'])){
        if(isset($_POST["change_cat"]) && is_array($_POST['change_cat'])){
        $sqlquery='update photos set categorie_id='.$_POST['categorie_id'].' where id in ('.implode(',',$_POST['change_cat']));
        mysql_query($sqlquery);
      }
}
Parse error: syntax error, unexpected ')' in /home/village/public_html/v2/photos/update_photos.php on line 10

Eléphant du PHP | 331 Messages

29 janv. 2011, 21:38

Fausse alerte, j'ai trouvé

merci infiniment!

Bonne Journée!
if(isset($_POST['change_cat_bt'])){
        if(isset($_POST["change_cat"]) && is_array($_POST['change_cat'])){
        $sqlquery=("update photos set categorie_id=".$_POST['categorie_id']." where id in (".implode(",",$_POST['change_cat']).")");
        mysql_query($sqlquery);
      }
}