UPDATE multiple avec checkbox

Petit nouveau ! | 3 Messages

27 nov. 2021, 13:11

Bonjour,

J'ai une table "matable" avec différents utilisateurs.

Lors d'une requête Mysql, j'affiche dans un tableau le contenu de "matable" (user_id, nom, prenom).

Je voudrais simplement pouvoir mettre à jour en une seule requête la table "matable" en récupérant le user_id des utilisateurs dont un checkbox est coché via un formulaire.

J'ai déjà passé pas mal de temps pour trouver une solution (en particulier avec IMPLODE), mais je n'y arrive pas.

ESt-ce qu'une âme charitable pourrait éventuellement me donner quelques explications avec une exemple simple ? :o

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

27 nov. 2021, 17:28

Est-ce que tu récupères bien la liste de tous les utilisateurs que tu as cochés ?
Typiquement un var_dump($_POST); ou var_dump($_GET); devrait te l'indiquer.

Ensuite, il faut transformer la variable que tu obtiens pour qu'elle soit utilisable dans une requête SQL.
Donc probablement avec un implode pour avoir une liste d'id séparés par des virgules.
Là aussi, une fois que tu as fait ton implode, fais un var_dump($liste_id) pour vérifier ce que tu obtiens.

Et, enfin tu fais ta requête SQL avec l'opérateur WHERE... IN
https://sql.sh/cours/where/in

Un point important, si tu utilises une requête préparée PDO, il te faut binder chaque valeur si tu veux faire les choses proprement. Or comme le nombre d'utilisateurs sélectionnés peut être variable (1, ou 2, ou 3, ou+...), il faut rendre alors cette requête dynamique en fonction du nombre de valeurs.
Il y a une bonne explication (en anglais) avec des exemples de code ici :
https://phpdelusions.net/pdo#in

Avant de coder ta requête, comme toujours teste là dans phpmyadmin pour vérifier qu'elle fonctionne comme souhaitée.
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 3 Messages

28 nov. 2021, 00:38

Un grand merci pour tes explications. Je vais tester tout ça dès que j'ai un peu de temps.

Petit nouveau ! | 3 Messages

01 déc. 2021, 15:20

Dans le cas où je voudrais mettre à jour toutes les données du formulaire ci-dessous (en ayant coché les différentes Checkboxes).

Est-ce que quelque chose comme ceci pourrait fonctionner ?

Code : Tout sélectionner

//formulaire avec données à récupérer. echo'<form method="post" action="update.php">'; echo'<input type="checkbox" name='id_var1[]' value="id_var1"><input type="text" value="valeur1" name="test" id="test" size="5"/>'; echo'<input type="checkbox" name='id_var2[]' value="id_var2"><input type="text" value="valeu2r" name="test" id="test" size="5"/>'; echo'<input type="checkbox" name='id_var3[]' value="id_var3"><input type="text" value="valeur3" name="test" id="test" size="5"/>'; echo'<input type="checkbox" name='id_var4[]' value="id_var4"><input type="text" value="valeur4" name="test" id="test" size="5"/>'; <button type="submit"> echo'</form>'; //fichier update.php $id_var = implode(",",$_POST['id_var']); $test = $_POST['test']; $sql = "UPDATE table SET test='$test' WHERE id_var IN ({$id_var})"; $conn->query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysqli_error());
Merci pour vos retours....

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

01 déc. 2021, 18:07

Bah teste et tu verras bien si ça marche :-D

Et comme ça ne marchera probablement pas, fais bien des var_dump($_POST); et var_dump($sql); pour debuguer
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Mammouth du PHP | 1564 Messages

03 déc. 2021, 01:01

J'ai posté un petit script permettant de le faire : édition multiple en PHP