Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1191 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Récupérer l'ID d'une case décochée

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Récupérer l'ID d'une case décochée

n°2369466
La classe ​@ dallas
eZploZZé
Posté le 26-11-2020 à 17:35:24  profilanswer
 

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  
 
 
 


---------------
They see me postin', they hatin', alertin' and tryna catch me trollin' dirty
mood
Publicité
Posté le 26-11-2020 à 17:35:24  profilanswer
 

n°2369473
mechkurt
Posté le 26-11-2020 à 17:54:01  profilanswer
 

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 :
  1. isset ($_POST['monradio'])

ou

Code :
  1. array_key_exists('monradio', $_POST)

.


---------------
D3
n°2369477
MaybeEijOr​Not
but someone at least
Posté le 26-11-2020 à 18:04:20  profilanswer
 

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.


Message édité par MaybeEijOrNot le 26-11-2020 à 18:05:20

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2369486
La classe ​@ dallas
eZploZZé
Posté le 26-11-2020 à 20:25:13  profilanswer
 

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.


---------------
They see me postin', they hatin', alertin' and tryna catch me trollin' dirty
n°2369487
MaybeEijOr​Not
but someone at least
Posté le 26-11-2020 à 20:48:00  profilanswer
 

Ce n'est absolument pas clair chez moi mais je propose quand même. :D

 
Code :
  1. //<input type="checkbox" name="myId" value="'.$row['id'].'" checked></td>
  2. <input type="checkbox" name="bc['.$row['id'].']" value="1"></td>
  3. <input type="checkbox" name="qsp['.$row['id'].']" value="1"></td>
  4. <input type="checkbox" name="a2p['.$row['id'].']" value="1"></td>
  5. <input type="checkbox" name="tda['.$row['id'].']" value="1"></td>


Message édité par MaybeEijOrNot le 27-11-2020 à 08:12:13

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2369488
La classe ​@ dallas
eZploZZé
Posté le 26-11-2020 à 20:49:47  profilanswer
 

Merci maybe. Je vais tester demain.


---------------
They see me postin', they hatin', alertin' and tryna catch me trollin' dirty
n°2369489
MaybeEijOr​Not
but someone at least
Posté le 26-11-2020 à 20:51:09  profilanswer
 

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.

Message cité 1 fois
Message édité par MaybeEijOrNot le 26-11-2020 à 20:51:33

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2369491
La classe ​@ dallas
eZploZZé
Posté le 26-11-2020 à 21:51:11  profilanswer
 

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.


Message édité par La classe @ dallas le 26-11-2020 à 21:53:19

---------------
They see me postin', they hatin', alertin' and tryna catch me trollin' dirty
n°2369494
La classe ​@ dallas
eZploZZé
Posté le 26-11-2020 à 23:48:39  profilanswer
 


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.


---------------
They see me postin', they hatin', alertin' and tryna catch me trollin' dirty
n°2369504
La classe ​@ dallas
eZploZZé
Posté le 27-11-2020 à 09:23:23  profilanswer
 

Merci d'avoir pris le temps de répondre.

 

Voila comment ca se présente :

 

Coté HTML, je charge mon formulaire :

 

https://i.ibb.co/Nxq5VwX/Capture.jpg

 

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  :

 

https://i.ibb.co/M1ZHKYW/Capture2.jpg

 

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".


Message édité par La classe @ dallas le 27-11-2020 à 09:24:14

---------------
They see me postin', they hatin', alertin' and tryna catch me trollin' dirty
mood
Publicité
Posté le 27-11-2020 à 09:23:23  profilanswer
 

n°2369506
mechkurt
Posté le 27-11-2020 à 09:37:51  profilanswer
 

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 :
  1. <input type="checkbox" name="users[]" value="'.$row['id'].'">
  2. <input type="checkbox" name="bc['.$row['id'].']" value="1">
  3. <input type="checkbox" name="qsp['.$row['id'].']" value="1">
  4. <input type="checkbox" name="a2p['.$row['id'].']" value="1">
  5. <input type="checkbox" name="tda['.$row['id'].']" value="1">


Et au traitement tu fait:

Code :
  1. foreach($_POST['users'] as $index => $id_user) {
  2.   if (array_key_exists('bc', $_POST) && array_key_exists($id_user, $_POST['bc']))
  3.     //la cse bc pour l'utilisateur courant est coché
  4.   } else {
  5.     //elle ne l'est pas
  6.   }
  7. }


---------------
D3
n°2369508
La classe ​@ dallas
eZploZZé
Posté le 27-11-2020 à 09:44:14  profilanswer
 

mechkurt a écrit :

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 :
  1. <input type="checkbox" name="users[]" value="'.$row['id'].'">
  2. <input type="checkbox" name="bc['.$row['id'].']" value="1">
  3. <input type="checkbox" name="qsp['.$row['id'].']" value="1">
  4. <input type="checkbox" name="a2p['.$row['id'].']" value="1">
  5. <input type="checkbox" name="tda['.$row['id'].']" value="1">


Et au traitement tu fait:

Code :
  1. foreach($_POST['users'] as $index => $id_user) {
  2.   if (array_key_exists('bc', $_POST) && array_key_exists($id_user, $_POST['bc']))
  3.     //la cse bc pour l'utilisateur courant est coché
  4.   } else {
  5.     //elle ne l'est pas
  6.   }
  7. }



 
Oui, il se peut qu'il y'ait plusieurs BC cochés pour plein d'utilisateurs en simultané.
 
Par ex :
 
https://i.ibb.co/N7cnsKD/Capture3.jpg
 
Je vais tester tout ca.
 
Merci


---------------
They see me postin', they hatin', alertin' and tryna catch me trollin' dirty
n°2369532
La classe ​@ dallas
eZploZZé
Posté le 27-11-2020 à 12:06:26  profilanswer
 

Bon j'ai essayé et je n'ai pas réussi de cette façon, ca m'a saoulé :D
 
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.


---------------
They see me postin', they hatin', alertin' and tryna catch me trollin' dirty
n°2369534
La classe ​@ dallas
eZploZZé
Posté le 27-11-2020 à 12:21:35  profilanswer
 

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


Message édité par La classe @ dallas le 27-11-2020 à 12:21:46

---------------
They see me postin', they hatin', alertin' and tryna catch me trollin' dirty
n°2369542
MaybeEijOr​Not
but someone at least
Posté le 27-11-2020 à 14:19:28  profilanswer
 


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.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2369544
mechkurt
Posté le 27-11-2020 à 14:22:07  profilanswer
 

MaybeEijOrNot a écrit :


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.


 [:zedlefou:3]


---------------
D3
n°2369549
La classe ​@ dallas
eZploZZé
Posté le 27-11-2020 à 14:54:42  profilanswer
 

MaybeEijOrNot a écrit :


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.


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


Message édité par La classe @ dallas le 27-11-2020 à 14:54:53

---------------
They see me postin', they hatin', alertin' and tryna catch me trollin' dirty
n°2369550
mechkurt
Posté le 27-11-2020 à 14:57:37  profilanswer
 

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...


---------------
D3
n°2369551
La classe ​@ dallas
eZploZZé
Posté le 27-11-2020 à 15:04:14  profilanswer
 

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 :jap:


---------------
They see me postin', they hatin', alertin' and tryna catch me trollin' dirty
n°2369557
pluj
Posté le 27-11-2020 à 15:39:17  profilanswer
 

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 :
  1. <?php
  2. $bdd = new PDO(/* ... */);
  3.  
  4. $bdd->beginTransaction();
  5. $insert = $bdd->prepare('INSERT IGNORE INTO ...(user_id, ...) VALUES(:user_id, ...)');
  6. $insert->bindParam('user_id', $user_id, PDO::PARAM::INT);
  7. foreach ($_POST['users'] as $user_id) {
  8.    $insert->execute();
  9. }
  10. $bdd->query('DELETE FROM ... WHERE user_id NOT IN(' . implode(', ', array_map('intval', $_POST['users'])) . ')');
  11. $bdd->commit();

n°2369585
rufo
Pas me confondre avec Lycos!
Posté le 27-11-2020 à 19:14:36  profilanswer
 

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.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Récupérer l'ID d'une case décochée

 

Sujets relatifs
Bouton pour cocher une case à cocherRecupérer le dernier character de chaque lignes d'un Tmemo ?
Récupérer et modifier les données[PowerShell]Extraire un ID matériel
[KSH-88] récupérer le code retour d'un sous-shellRécupérer date de déplacement d'un fichier
Récupérer 2 élément à part dans des variable à partir d'un liste.Récupérer résultat d'une réquête dans un tableau en shell (ksh)
Récupérer la valeur texte d'un site.CSS: récupérer la position courante d'une animation pour l'inverser ?
Plus de sujets relatifs à : Récupérer l'ID d'une case décochée


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR