|
Bonjour,
Me revoila avec mon problème de "delete" d'un champ dans une Bd Mysql depuis un formulaire Php.
Voilà, je rapatrie dans un formulaire plusieurs champs d'un agenda. Pour ca j'ai un tableau avec une "région répété" qui fait que tous les champs concernés s'affichent les un en dessous des autres de la date la plus ancienne à la plus recente, ca marche très bien. Dans cette région répété en bout de ligne j'ai un bouton Delete qui lorsque l'on clique dessus doit effacer la ligne concernée. Sauf que au lieu d'effacer la ligne concernée, ca efface toujours la derniere ligne du tableau (la date la plus recente au lieu de la 1er ligne la date la plus ancienne).
Je ne comprends pas ce qui se passe. Je joint une partie de mon code :
Avant le Head
<?php require_once('Connections/connexionmy57595.php'); ?> <?php function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") { $theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;
switch ($theType) { case "text": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "long": case "int": $theValue = ($theValue != "") ? intval($theValue) : "NULL"; break; case "double": $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL"; break; case "date": $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL"; break; case "defined": $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue; break; } return $theValue; }
if ((isset($_POST['id'])) && ($_POST['id'] != "") && (isset($_POST['form2']))) { $deleteSQL = sprintf("DELETE FROM agenda WHERE id=%s", GetSQLValueString($_POST['id'], "int"));
mysql_select_db($database_connexionmy57595, $connexionmy57595); $Result1 = mysql_query($deleteSQL, $connexionmy57595) or die(mysql_error());
$deleteGoTo = "Copie de supression_moselle.php"; if (isset($_SERVER['QUERY_STRING'])) { $deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?"; $deleteGoTo .= $_SERVER['QUERY_STRING']; } header(sprintf("Location: %s", $deleteGoTo)); }
$colname_agendasup = "1"; if (isset($_GET['ville'])) { $colname_agendasup = (get_magic_quotes_gpc()) ? $_GET['ville'] : addslashes($_GET['ville']); } mysql_select_db($database_connexionmy57595, $connexionmy57595); $query_agendasup = sprintf("SELECT id, ville, nom, date_fin FROM agenda WHERE ville = '%s' ORDER BY date_fin ASC", $colname_agendasup); $agendasup = mysql_query($query_agendasup, $connexionmy57595) or die(mysql_error()); $row_agendasup = mysql_fetch_assoc($agendasup); $totalRows_agendasup = mysql_num_rows($agendasup); ?>
Après le Head (le formulaire)
<form name="form2" method="post" action=""> <table width="350" border="1" id="form2"> <tr> <th scope="col">Date</th> <th scope="col">Ville</th> <th scope="col">Evénement</th> <th scope="col"> </th> <th scope="col">Action</th> </tr> <?php do { ?> <tr> <th scope="row"><?php echo $row_agendasup['date_fin']; ?></th> <td><?php echo $row_agendasup['ville']; ?></td> <td><?php echo $row_agendasup['nom']; ?></td> <td><?php echo $row_agendasup['id']; ?></td> <td> <input name="id" type="hidden" id="id" value="<?php echo $row_agendasup['id']; ?>"> <input name="form2" type="submit" id="form2" value="Supprimer"> </td> </tr> <?php } while ($row_agendasup = mysql_fetch_assoc($agendasup)); ?> </table> </form>
Merci pour votre aide.
Salutations. |

|
Hello,
2 choses, en vrac : pourquoi faire un do while, au lieu d'un while tout court ? Tu ferais l'économie d'un mysql_fetch_assoc ().
Enfin bref...
A part ça, ce qui se passe est normal. Tu as un bouton de type hidden, répété autant de fois que tu as d'entrées dans ta base. Mais son nom reste le même. Donc, quand tu effaces, tu effaces avec le $_POST['id'], qui a pris la valeur du dernier input hidden affiché. Logique. Ce que tu fais reviens à ceci :
for ($i = 0; $i < 10; $i++) { $maVar = $i; } A la sortie de ta boucle, $maVar vaudra 9. Je sais, ça a l'air con ce que je te dis, mais c'est très exactement ce que tu fais... ;-)
Il y a plusieurs manières de procéder. L'une d'elle serait de transformer ton input hidden ET ton submit en tableaux : name="id[<?php echo $row_agendasup['id']; ?>]" et name="form2[<?php echo $row_agendasup['id']; ?>]"
Puis à la soumission, tester si ton tableau $_POST['form2'] existe et n'est pas vide. S'il ne l'est pas, tester quelle clef a pour valeur "Supprimer", et récupérer la valeur de $_POST['id'][$clef_suppr], qui est l'id à supprimer de ta base.
Mais ce serait plus simple avec 1 bouton de suppression seulement, et un input radio, ou des checkboxes, pour chaque entrée. Tu pourrais ainsi supprimer plusieurs entrées de ta base d'un coup. |