3 votes

PHP MySQL mise à jour ne mettant à jour qu'une seule ligne

J'ai mis en place une requête de mise à jour qui mettra à jour les valeurs saisies dans les champs de texte sur une boucle tant que. Cela fonctionne bien jusqu'à ce que plusieurs données soient bouclées à partir de la base de données. Alors, pour une raison quelconque, seule la dernière donnée de la boucle sera mise à jour et le reste restera inchangé.

    ";
   echo"";
   echo"";
 }
?>

0voto

derabbink Points 1620

Je pense que vous interprétez mal le fonctionnement de la boucle. En effet, vous affichez plusieurs lignes de votre table sous forme de groupes de champs d'entrée, mais vous ne mettez à jour qu'une seule ligne après la soumission. Si vous vouliez mettre à jour plusieurs lignes, vous auriez besoin de plusieurs identifiants (un pour chaque ligne que vous voudriez mettre à jour)

Votre navigateur choisit apparemment de soumettre en http-post les dernières instances de vos champs d'entrée id, fname et lname qui se trouvent dans le formulaire html, et ce sont ces derniers que vos champs $_POST contiendront lors de la réception de cette demande de publication http.

Il est généralement déconseillé d'avoir plusieurs champs avec le même nom dans un formulaire, ce qui se produit ici si plus d'une ligne du tableau est sélectionnée.

Vous pourriez envisager:

  • Avoir un formulaire (incluant un bouton de soumission) par ligne. De cette façon, votre navigateur sait, pour chaque formulaire, quelles valeurs de champ d'entrée identifiables de manière unique il doit soumettre.

  • Si vous souhaitez un formulaire d'édition multi-lignes, il existe de nombreuses astuces pour y parvenir. La plus simple serait probablement une convention de nommage comme fname_42 pour le 42ème champ d'entrée fname, et un champ caché dans le formulaire contenant le nombre de lignes que votre formulaire affiche. Lors du traitement de la demande de soumission, vous pourrez reconstruire les noms des entrées en comptant jusqu'au nombre total de lignes.

exemple:

   for ($i=0;$i<$_POST["row_count"];$i++) {
     $fname = $_POST["fname_$i"];
     //utilisez $fname ici dans une requête de mise à jour
   }

PS: ne me blâmez pas si cet exemple n'est pas entièrement correct sur le plan syntaxique ;) Je n'ai pas d'interprète PHP avec moi en ce moment.

0voto

Guns Points 21

Désolé d'avoir remonté le vieux post, mais j'ai eu le même problème et j'ai trouvé la solution. Le problème se produit parce que les propriétés du formulaire et les propriétés de soumission ne sont pas incluses en tant que code php mais conservées en html en dehors de la boucle. Lorsque la soumission est à l'intérieur de la boucle while, chaque ligne aura sa propre soumission et le changement n'affectera que cette ligne. Le code fonctionnel est ci-dessous;

    if(isset($_POST['update'])){    
    $sql = "UPDATE Persons SET fname = '$_POST[fname]', lname = '$_POST[lname]' WHERE id = '$_POST[id]'";
mysql_query($sql);
};

    $query= "SELECT * FROM Persons ORDER BY id ASC" ;
    $result= mysql_query($query);
    while($record = mysql_fetch_assoc($result))
    {
echo"";
    echo"";
    echo"";
    echo"";
    echo"";
    echo"";
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X