Aide pour checkbox

ju -  
 wissem -
Bonjour!!

J'ai fabriquer une fonction en php pour creer des cases a cocher dans un formulaire afin de remplir une base de donnée.

Mon problème est que les données ne sont justement pas incluses dans la base.

Si quelqu'un a une idée (je crois qu'il faut faire un test pour savoir si la case est cocher ou pas mais je n'ai pas d'idée pour le coder en php).

Voici ma fonction qui creer les boite a cocher:

function case_cocher($requete, $nom_case, $defaut){
global $host_bd, $login_bd, $pass_bd, $nom_bd;
$connection = ouvrir_db($host_bd, $login_bd, $pass_bd, $nom_bd);
$result = mysql_query($requete);

if ($result == 0){
$resultat = 'Impossible d\'effectuer cette requete '.$requete;
}else{
if (mysql_num_rows($result)==0){
$resultat = 'Aucune donnée ne correspond à votre requête';
}else{
while($ligne=mysql_fetch_row($result)){
while (list($cle,$valeur) = each($ligne)){
$resultat .= '<input type="checkbox" name="$cle" VALUE="'.$valeur.'">'.$valeur.'<br>';
}
}}}

la fonction qui integre les valeurs dans la base de donnée est:
if ($status == "ok"){
$debut_requete = "INSERT INTO $objet (";
$fin_requete = ") VALUES(";
while(list($cle,$valeur)=each($champs)){
$debut_requete .= "$cle, ";
$fin_requete .= "'$valeur', ";
}
$requete = substr($debut_requete, 0,strlen($debut_requete)-2).substr($fin_requete, 0, strlen($fin_requete)-2).")";
action_simple($requete);
$action = "visualiser";
fermer_db($connection);
return $resultat;
}

28 réponses

ju
 
action_simple est une fonction qui n'a pas trop avoir avec les checkbox.

Pour l'autre requete cela me donne:

INSERT INTO resultats_analyses (Nom_Analyse, Type, Nom_Org_Commun, Nom_Primer, Date_Analyse, Image, Res_Attendu, Res_Obtenu, Commentaire) VALUES('', '3\' race', 'Dorade', '', '2005-4-19 14:50:45', '', '', '', '')

Et je n'obtient rien dans le champs Nom_primer alors que j'ai cocher une case
1
Nashouille
 
Tu as plus de valeurs que de clés c'est probablement pour ça qu'il n'exécute pas la requete. Si tu as PHPMyadmin tu peux essayer d'executer la requete dessus pour voir si elle fonctionne.
1
ju
 
Ben non justement j'ai le meme nombre de valeur que de clé

Moi je pense que le probleme viens du fait que je ne fasse pas de test pour savoir si les cases sont cochers ou pas mais ca justment je sais pas le faire.

Sinon avec phpmyAdmin tu fais comment pour tester la requete
1
Nashouille
 
T'as essayé de mettre une valeur par défaut à tes checkbox. Et quand on la coche celle valeur changerait non?
Autrement si tu t'y connais en javascript tu dois pouvoir réussit à récupérer les checkbox cochées ou non, mais j'avoue que mes souvenirs de Javascript sont loin derrière moi
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fras34 Messages postés 92 Statut Membre 36
 
Si les cases ne sont pas chchées, elle ne sont pas envoyées.
fais phpinfo() pour le verifier

La methode que je t'ai decrite plus haut est la plus simple et la plus sur. je l'emplois sur tous mes formulaires depuis des années.

Si tu as tout une liste de champs cachés qui n'on rien à voir avec l'insert dans ta table il te suffit de definir une hiddenList :

$hiddenList =array('nom_table','detail_util_ pour_toi');

tu y mets tous les champs qui n'on rein a voir avec ta table.

puis tu modifie le code :
unset($_POST[Submit]);
foreach($_POST as $champ => $valeur){
   $VLAS .=(!in_array($champ, $hiddenList))?", $champ ='$valeur' ":'';
}
 $VLAS=substr( $VLAS, 1);

$requete="INSERT INTO $table set ".$VALS;
1
ju
 
Je vais essayer ce que tu me dis mais mon probleme c que ma fonction d'insertion des valeurs dans les tables erst la meme pour tous mes champs (que ce soit des cases a cochers ou autres....) donc si je le remplace par ton code le reste ne marchera plus.

Et si tu peux s'il te plait m'expliquer un peut plus en detail ce que fait le hidden list parcke je ne l'ai jamais utiliser avant.

Merci d'avance
0
fras34 Messages postés 92 Statut Membre 36
 
hiddenList est un terme perso.
c'est une array dans laquelle tu mets les nom des champs que tu ne veux pas utiliser dans ta boucle.
Elle n'est utile UNIQUEMENT si ton formulaire contient des champs qui n'ont rien à voir avec ta table.

Le script que je t'ai donné marche dans tous les cas simple. c'est a dire tant qu'il n'y a pas de concatenation des champs. ce qui n'est pas ton cas.

En gros tu n'as qu'à remplacer ta boucle while par ma boucle foreach
if ($status == "ok"){
$hiddenList=array('');
$requete = "INSERT INTO $objet  set ";
unset($_POST[Submit]);
foreach($_POST as $champ => $valeur){
   $VLAS .=(!in_array($champ, $hiddenList))?", $champ ='$valeur' ":'';
}
 $VLAS=substr( $VLAS, 1);

$requete .=$VALS;
action_simple($requete);

1
ju
 
Peut etre mais quand je met

$requete = "INSERT INTO $objet set ";

ca me dis de verifier ma requete...

Et ce code il permet de selectionner plusieurs cases ou une seule??

(il faut garder son calme avec moi.....lol)
1
fras34 Messages postés 92 Statut Membre 36
 
Salut,

que donne un echo de ta requete ?

echo $requete = substr($debut_requete, 0,strlen($debut_requete)-2).substr($fin_requete, 0, strlen($fin_requete)-2).")"; 
0
ju
 
le resultat de echo sur ma requete dans la fonction case cocher est:
select Nom_Primer from primers ORDER BY Nom_Primer
0
Nashouille
 
Et pour la deuxième requete, l'insert?
action_simple c'est un mysql_query et des verifications?
0
ju
 
action_simple est une fonction qui n'a pas trop avoir avec les checkbox.

Pour l'autre requete cela me donne:

INSERT INTO resultats_analyses (Nom_Analyse, Type, Nom_Org_Commun, Nom_Primer, Date_Analyse, Image, Res_Attendu, Res_Obtenu, Commentaire) VALUES('', '3\' race', 'Dorade', '', '2005-4-19 14:50:45', '', '', '', '')

Et je n'obtient rien dans le champs Nom_primer alors que j'ai cocher une case
0
fras34 Messages postés 92 Statut Membre 36
 
Non,non et non ...

list($cle_primaire, $valeur_primaire) = each($primaire);
$form = $objet;
$mode = "formulaire";

if ($action == 'ajouter' || ($action == 'visualiser' && $num_enr == '')){

if ($status == "ok"){
$hiddenList=array('');
$requete = "INSERT INTO $objet set ";
unset($_POST[Submit]);
foreach($_POST as $cle => $valeur){
$VLAS .=(!in_array($cle, $hiddenList))?", $cle ='$valeur' ":'';
}
$VLAS=substr( $VLAS, 1);

$requete .=$VALS;
action_simple($requete);

0
fras34 Messages postés 92 Statut Membre 36
 
ok, sorry

que dit un echo de requete ?
if ($status == "ok"){
$hiddenList=array('');
$requete = "INSERT INTO $objet set ";
unset($_POST[Submit]);
foreach($_POST as $cle => $valeur){
$VLAS .=(!in_array($cle, $hiddenList))?", $cle ='$valeur' ":'';
}
$VLAS=substr( $VLAS, 1);

echo 'Requete :<br>', $requete .=$VALS;
0
ju
 
ben le echo plus le message d'erreur ca donne ca:

Requete :
INSERT INTO resultats_analyses set Impossible d'effectuer cette requete: INSERT INTO resultats_analyses set
Veuillez vérifier vos entrées
0
ju
 
ben le echo plus le message d'erreur ca donne ca:

Requete :
INSERT INTO resultats_analyses set Impossible d'effectuer cette requete: INSERT INTO resultats_analyses set
Veuillez vérifier vos entrées
0
fras34 Messages postés 92 Statut Membre 36
 
Sorry, j'ai des deconnection intempestive agrrrh !!

Non, un echo de $requete avant le traitement action_simple($requete) sans le message d'erreur,

comme dans le code que je t'ai passé
0
ju
 
Voui ben c cke jé fait et ca donne ca:

Requete :
INSERT INTO resultats_analyses set
0
fras34 Messages postés 92 Statut Membre 36
 
donc $VALS est null.
-> la hiddenList est bien vide ?
-> la methode de ton formulaire est bien "post" et non "get" ?

fais un print_r($_POST)
0
ju
 
resultat du print_r:
Array ( [mode] => formulaire [objet] => resultats_analyses [action] => ajouter [num_enr] => [list_primers] => none [Submit] => OK )

et tu entend koi par hiddenList est bien vide??
0
fras34 Messages postés 92 Statut Membre 36
 
Ok.

-> il n'y a aucune données dans $_POST !?
->> tu as cochés une case ou pas ?

-> Vu le post, la valeur de hiddelList est:
->> $hiddenList =array('mode','objet', 'action','num_enr','list_primers', 'Submit' );

Si aucune case n'est cochée, le formulaire n'envoi aucune donnée.
Ce qui semble être le cas.

Il faut rajouter une verification :
<CODE>
list($cle_primaire, $valeur_primaire) = each($primaire);
$form = $objet;
$mode = "formulaire";

if ($action == 'ajouter' || ($action == 'visualiser' && $num_enr == '')){

if ($status == "ok"){
$hiddenList =array('mode','objet', 'action','num_enr','list_primers', 'Submit' );
$requete = "INSERT INTO $objet set ";
unset($_POST[Submit]);
foreach($_POST as $cle => $valeur){
$VLAS .=(!in_array($cle, $hiddenList))?", $cle ='$valeur' ":'';
}
$VLAS=substr( $VLAS, 1);

$requete .=$VALS;
if($VALS!='') { action_simple($requete);}
else { ... }
</CODE>
0