Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/07/2007, 10h38   #1
Membre actif
 
Inscription : septembre 2004
Messages : 555
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 555
Points : 155
Points : 155
Par défaut Cases à cocher et PHP

Bonjour.

Je possède un formulaire qui affiche des checkbox qui sont cochés suivant la valeur qu'il y a dans la BDD.
Jusque la pas de problème.

Code :
<input name='select_exploitation[]' type='checkbox' value='$id' $etat/>
J'aimerai actualiser ma BDD suivant que la case soit coché ou non.
Si la case est cochée j'arrive bien à actualiser ma BDD car je récupère la valeur des id cochées dans ma page de traitement en faisant ceci.

Code :
1
2
3
4
$tableau_select_exploitation = $_POST["select_exploitation"] ;
 
foreach($tableau_select_exploitation as $val_exploitation) {
...
Cependant si je décoche une case qui était cochée dans ma page de traitement je n'ai aucun moyen de le savoir car aucune valeur ne sera renvoyé.

VOus avez des idées?

Existe t'il des boutons qui renvoient une valeur quand le bouton est coché et une autre quand il n'est pas coché?
COmme cela je ferais passer l'id en hidden est le tour serait joué.

Merci d'avance
masseur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2007, 11h32   #2
Membre éprouvé
 
Homme
Inscription : avril 2005
Messages : 611
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : Turquie

Informations forums :
Inscription : avril 2005
Messages : 611
Points : 459
Points : 459
ben si tu affiche les cases tu doit savoir quel sont les cases coché, donc qd le formulaire est soumis sur le serveur tu doit bien voir quels sont les cases cochés fournis et tu compare avec celle que tu as afficher qui était coché
maximenet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2007, 11h43   #3
Membre actif
 
Inscription : septembre 2004
Messages : 555
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 555
Points : 155
Points : 155
Je comprends ton principe mais je vois pas comment m'y prendre.

Moi j'ai ca en gros.
Code :
1
2
3
4
5
6
7
 
<form action='aaaa.php'  method='post'>
 <?php while($val=mysql_fetch_assoc($result))
 $id=$val['id_prospect'];
 if ($val['select_exploitation'] == 0) $etat = ''; else $etat = 'checked';
 <input name='select_exploitation[]' type='checkbox' value='$id' $etat/>
</form>
Et dans mon aaaa.php je fais ceci
Code :
1
2
3
4
$tableau_select_exploitation = $_POST["select_exploitation"] ;
 
foreach($tableau_select_exploitation as $val_exploitation) {
$query = "UPDATE prospects SET select_exploitation='Oui' WHERE id_prospect = '$val_exploitation'" ;
masseur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2007, 13h37   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Avez-vous essayé :
Code :
1
2
3
4
5
# Pour les cases cochées :
mysql_query("UPDATE prospects SET select_exploitation='Oui' WHERE id_prospect IN(" . implode(',', $_POST['select_exploitation']) . ")") or die(mysql_error());
 
# Pour les cases non cochées
mysql_query("UPDATE prospects SET select_exploitation='Non' WHERE id_prospect NOT IN(" . implode(',', $_POST['select_exploitation']) . ")") or die(mysql_error());
Ce n'est que le principe car il faut sans doute gérer les éventuels cas spéciaux (aucune de sélectionnée notamment).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2007, 13h55   #5
Membre actif
 
Inscription : septembre 2004
Messages : 555
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 555
Points : 155
Points : 155
Citation:
Envoyé par julp
Avez-vous essayé :
Code :
1
2
3
4
5
# Pour les cases cochées :
mysql_query("UPDATE prospects SET select_exploitation='Oui' WHERE id_prospect IN(" . implode(',', $_POST['select_exploitation']) . ")") or die(mysql_error());
 
# Pour les cases non cochées
mysql_query("UPDATE prospects SET select_exploitation='Non' WHERE id_prospect NOT IN(" . implode(',', $_POST['select_exploitation']) . ")") or die(mysql_error());
Ce n'est que le principe car il faut sans doute gérer les éventuels cas spéciaux (aucune de sélectionnée notamment).
Le problème avec cela c'est que tout les id_prospect qui ne trouvent pas forcemment dans liste ou il y a les boutons seront affectés.

Il doit y avoir une possibilite en faisant passer au formulaire un hidden de toutes les id auxquelles une chechkbox est affiché.

L'id qui est recupéré en hidden mais qui n'apparait pas dans select_exploitation[] est donc forcemment la checkbox qui est passé de coché à décoché ou qui était décoché et qui le reste?

Ca semble logique ou pas?

merci bien
masseur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2007, 14h30   #6
Membre actif
 
Inscription : septembre 2004
Messages : 555
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 555
Points : 155
Points : 155
J'ai pondu ca et à priori ca marche.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$tableau_select_exploitation = $_POST["select_exploitation"] ;
$tableau_id = $_POST["id"] ;
 
$i=0;
for ($tableau_id[$i];$i<count($tableau_id);$i++)
{
 // si l'id passé en hidden se trouve dans tableau_select_exploitation c'est que la case est cochée.
 if (in_array($tableau_id[$i], $tableau_select_exploitation)) 
 {
  $query = "UPDATE prospects SET select_exploitation='Oui' WHERE id_prospect = '$tableau_id[$i]'" ;
  $result = mysql_query($query);
 }
 
 else 
 {
  $query = "UPDATE prospects SET select_exploitation='Non' WHERE id_prospect = '$tableau_id[$i]'" ;
  $result = mysql_query($query);
 
 }
 
 
}
masseur est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h01.


 
 
 
 
Partenaires

Hébergement Web