Récupérer l'ID d'une case décochée - PHP - Programmation
Marsh Posté le 26-11-2020 à 17:54:01
Voit plutôt du coté des input radio si tu veux récupérer les autres états.
Ou sinon gardes au niveau de ton code la trace de l'existence de ton bouton radio et teste son existence avec
Code :
|
ou
Code :
|
.
Marsh Posté le 26-11-2020 à 18:04:20
Ben soit tu retrouves la valeur dans $_POST et la case est cochée, soit tu ne la retrouves pas et la case est décochée, les deux cas sont gérés.
EDIT : grillé, mechkurt a édité son message (ou j'ai mal lu) pour aller dans le même sens.
Marsh Posté le 26-11-2020 à 20:25:13
Voici un bout de mon code pour les checkbox concernées :
Après avoir fait un mysqli_fetch_row pour sélectionner les données de la base sql, chaque checkbox se voit rattacher un ID d'un utilisateur qui est concerné par les 4 checkbox.
<input type="checkbox" name="bc[]" value="'.$row['id'].'"'</td>
<input type="checkbox" name="qsp[]" value="'.$row['id'].'"'</td>
<input type="checkbox" name="a2p[]" value="'.$row['id'].'"></td>
<input type="checkbox" name="tda[]" value="'.$row['id'].'"></td>
Quand je valide le formulaire, je traite les infos avec un script qui comporte foreach ($_POST['bc'] as $_POST['valeur']), puis un autre foreach pour le qsp, tda et a2p etc.
Ce qui me permet de chopper l'ID de l'utilisateur qui est concerné par les cases et j'arrive a récupérer les infos de ce qui est coché (par ex bc).
Par contre, je n'arrive pas a modéliser au niveau du script comment avoir une variable si la case (qsp) n'est pas cochée pour ensuite faire la comparaison avec ce que l'utilisateur avait comme choix avant le submit.
Je sais pas si je suis clair.
Marsh Posté le 26-11-2020 à 20:48:00
Ce n'est absolument pas clair chez moi mais je propose quand même.
Code :
|
Marsh Posté le 26-11-2020 à 20:49:47
Merci maybe. Je vais tester demain.
Marsh Posté le 26-11-2020 à 20:51:09
Je viens d'ajouter une ligne optionnelle qui peut aussi aider (comme je ne comprends pas trop ce que tu veux faire), tu peux ensuite cacher ce checkbox via le CSS.
Marsh Posté le 26-11-2020 à 21:51:11
MaybeEijOrNot a écrit : Je viens d'ajouter une ligne optionnelle qui peut aussi aider (comme je ne comprends pas trop ce que tu veux faire), tu peux ensuite cacher ce checkbox via le CSS. |
Je voudrais avoir un retour d état de la checkbox.
Par exemple : si elle est cochée, je récupère un état à 1 ( facile avec un isset ou un post) et si elle ne l est pas, un état à 0 (et je sais pas comment faire)
Par ex : checkbox bc, avec un Id rattaché, si cochée, je récupère l id et son état à 1 et si elle est décochée, je récupère son id et état à 0.
Et j'ai l'impression qu'avec ta solution de mettre l id dans le bc [], je peux jouer avec "value" et donc récupérer les deux paramètres.
Ps : je suis un débutant en php.
Marsh Posté le 26-11-2020 à 23:48:39
Merci pour ta réponse. Je regarderai également demain.
Je suis OK avec ta 1ere phrase.
Pour la partie en gras, je fais comment exactement ?
Ce que j avais modélisé dans ma tête c'est : array de départ avant traitement. 4 cases par x lignes. Je fais les modifications dans les cases. Je soumets et ça me fait un array de fin. Je regarde case par case et je modifie ou non en fonction de l écart.
Mais j ai du mal à retranscrire ça en php.
Merci pour vos retours, je regarderai ça demain.
Marsh Posté le 27-11-2020 à 09:23:23
Merci d'avoir pris le temps de répondre.
Voila comment ca se présente :
Coté HTML, je charge mon formulaire :
J'ai autant de séries de 4 cases que d'utilisateurs (utilisateurs qui vont croitre dans le temps).
Chaque utilisateur a un ID unique, que je rattache à chaque case. A ce stade, les cases de la 1ere ligne (par exemple) :
<input type="checkbox" name="bc[]" value="28"></td>
<input type="checkbox" name="qsp[]" value="28"></td>
<input type="checkbox" name="a2p[]" value="28"></td>
<input type="checkbox" name="tda[]" value="28"></td>
Ici "value" c'est l'ID de l'utilisateur
Du coup, quand je coche les cases, je dois récupérer pour chaque utilisateur les cases qui sont cochées et celles qui ne le sont pas.
Par exemple, si je coche la 1ere ligne je dois récupérer pour cette ligne :
bc et a2p qui sont cochées et qsp et tda qui sont décochées. avec l'ID de l'utilisateur qui est "28".
Marsh Posté le 27-11-2020 à 09:37:51
Pourquoi tu envoie bc sous forme de tableau name="bc[]", tu as plusieurs utilisateur simultané quand tu soumet ton formulaire ?
Si oui tu devrais mettre un champ hidden avec l'id et utiliser l'id de l'utilisateur comme clé pour accéder à ta checkbox (c'est un peu ce que propose MaybeEijOrNot).
Code :
|
Et au traitement tu fait:
Code :
|
Marsh Posté le 27-11-2020 à 09:44:14
mechkurt a écrit : Pourquoi tu envoie bc sous forme de tableau name="bc[]", tu as plusieurs utilisateur simultané quand tu soumet ton formulaire ?
|
Oui, il se peut qu'il y'ait plusieurs BC cochés pour plein d'utilisateurs en simultané.
Par ex :
Je vais tester tout ca.
Merci
Marsh Posté le 27-11-2020 à 12:06:26
Bon j'ai essayé et je n'ai pas réussi de cette façon, ca m'a saoulé
J'ai viré le form, le submit. Les cases à cocher ont été remplacées par des images (en forme de case cochée ou non ) avec une url qui embarque les paramètres voulus (id, questionnaire et le statut).
A chaque clic sur l'image, j'execute le script qui fait un update de table avec les paramètres en $_GET.
C'est moins orthodoxe, mais c'est dans une interface admin, y'aura que ma femme qui aura accès. C'est pas elle qui me fera du hack.
Merci à tous ceux qui m'ont répondu. Je reviendrai peut être plus tard.
Marsh Posté le 27-11-2020 à 12:21:35
Je laisse ca de coté, j'ai encore une tonne de trucs à faire.
J'y reviendrai lors d'une V2 d'amélioration.
Encore merci a vous
Marsh Posté le 27-11-2020 à 14:19:28
Ouais ce doit être en partie ma faute, il a dû copié/collé ce que j'avais proposé, j'avais oublié qu'on n'avait pas besoin de passer par le CSS pour cacher le champ et qu'il en existait justement un type spécial en HTML pour faire ça.
Marsh Posté le 27-11-2020 à 14:22:07
MaybeEijOrNot a écrit : |
Marsh Posté le 27-11-2020 à 14:54:42
MaybeEijOrNot a écrit :
|
Non franchement c'est moi qui ne suis pas suffisamment calé en dev.
J'ai essayé pendant 1h, puis j'ai fait autrement.
J'aurai à traiter le même sujet sur la partie client, je garde vos idées au chaud.
Encore merci
Marsh Posté le 27-11-2020 à 15:04:14
mechkurt a écrit : Partie client t'aura intérêt a faire gaffe à la sécurité : vérifier la valeur de tes inputs, protéger tes requêtes SQL, etc... |
Yes.
Je le fais déjà dans le formulaire d'inscription
Marsh Posté le 27-11-2020 à 15:39:17
Salut,
dans une transaction, tu insères les potentiels nouveaux en ignorant les doublons (IGNORE avec la contrainte unique qui va bien) et tu supprimes les anciens par un DELETE NOT IN ?
Code :
|
Marsh Posté le 27-11-2020 à 19:14:36
Suffisait de faire un diff.
Dans la mesure où tu sais générer toutes tes cases à cocher, tu connais donc les ID en base qui correspondent à ces cases.
Du coup, quand l'utilisateur poste le formulaire après avoir coché/décoché différents cases, tu va te retrouver dans $_POST à avoir uniquement les ID cochés.
Du coup, t'as plus qu'à comparer les 2 tableaux, celui de $_POST ayant forcément au mieux le même nb d'ID (donc tout est coché), sinon, moins d'ID. Tous les ID présents dans le tableau qui contenaient tous les ID qui ne sont pas dans $_POST sont donc des ID décochés.
Ex :
Le tableau qui affiche les cases à cocher contient les ID : [1, 2, 3, 4, 5]
Le tableau que tu reçois en $_POST contient, mettons, les ID [2, 3, 5]
T'en déduis que les ID 1 et 4 sont décochés.
Marsh Posté le 26-11-2020 à 17:35:24
Salut à tous.
Je suis en train de gérer des mises à jour dans ma base de donnée en fonction des états des checkbox.
Etape 1 : je fais chercher l'entrée concernée par la mise à jour dans la base de donnée.
Etape 2 : je regarde si l'état est 1 ou 0.
Etape 3 : je regarde si la case est cochée.
Etape 4 : je fais mes opérations :
- si l'état est à 1 et la case est cochée : je ne fais rien.
- si l'état est à 1 et la case est décochée: je passe l'état à 0.
- si l'état est à 0 et la case est cochée : je passe l'état à 1.
- si l'état est à 0 et la case est décochée : je ne fais rien.
Le tout est opéré via un formulaire, avec un bouton submit qui transmet les infos par un post.
Le truc, c'est que j'arrive bien à récupérer les informations lorsque les cases sont cochées avec un $_POST.
Mais je n'arrive pas a récupérer celles qui sont décochées. Or j'ai besoin de savoir quelle case est décochée pour pouvoir faire ma vérif.
Comment faire ?
Merci
---------------
AYAYAAA Un coup de fil on est laaaaaaaa. Oué oué oué zaharwa. On a les clé de la kma. Si Si. Le bonheur dure 10 heures !! - Nobody rules these streets at night like me