Insertion de valeurs de chekbox

Fermé
debutantephp Messages postés 13 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 25 juin 2011 - 23 juin 2011 à 20:39
debutantephp Messages postés 13 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 25 juin 2011 - 25 juin 2011 à 00:41
Bonjour,

j'ai 2 tables:table questions tables reponse ou les posiblités de réponse de chaque question c'est a dire les valeurs de chekbox et la table etablissement_universitaire ou je vais enregistrer les réponses
<?php
session_start();
include('conection.php');
mysql_query("SET NAMES UTF8"); 
$sql = "SELECT id_question,type FROM question WHERE id_categorie='3' AND langue='Français' ORDER BY id_question ";
$req = mysql_query($sql) or die (mysql_error()); 
while( $data = mysql_fetch_row($req))
{
if ($data[1]=="choix unique") 
{
if(isset($_SESSION['question' . $data[0]]) )

$reponse_utilisateur[] = addslashes($_SESSION['question' . $data[0]]);

else 
$reponse_utilisateur[] ="Pas de reponse";
}
elseif ($data[1]=="Multichoix")
{
$sqlcheckbox="SELECT * FROM reponse WHERE id_question=".$data[0];
$check = mysql_query($sqlcheckbox)or die (mysql_error());

 

if (isset($_SESSION['question' . $data[0]])) 
{ 
 if(isset($_SESSION['question' . $data[0]])) { //sera vrai si au moins un moins un checkbox a été coché
 
	foreach($_SESSION['question' . $data[0]] as $chkbx) {
 
		
				  $reponse="/".$chkbx;
				  
								
								$reponse_utilisateur[1] =$reponse.",".$reponse;
				  			}}

							
}

				  
			
			

}
elseif ($data[1]=="champs texte")
{

if(isset($_SESSION['question' . $data[0]]) )

$reponse_utilisateur[] = addslashes($_SESSION['question' . $data[0]]);

 else 
$reponse_utilisateur[] ="Pas de reponse";
}

}
print_r($reponse_utilisateur);
include 'essai4.php';
// Définition du nom de la base de données et du nom de la table.
$nom_de_la_base_de_donnees = "navigateursweb";
$nom_de_la_table_a_interroger = "etablissement_universitaire";
// Connexion à la base de données.
$champ="";
$champs="";
include 'conection.php';
// APPEL DES FONCTIONS
// renvoi le nombre de champs
$nombredechamps = recup_nbchamps($nom_de_la_base_de_donnees,$nom_de_la_table_a_interroger);
// renvoi le nom des champs
$nomsdeschamps = recup_noms_champs($nom_de_la_base_de_donnees,$nom_de_la_table_a_interroger);


  $nombredechamps2=$nombredechamps-2;
$sql1 = "INSERT INTO etablissement_universitaire

VALUES 
(";
for($i=0;$i<=$nombredechamps-1;$i++)
{
$sql1.= "'$reponse_utilisateur[$i]',";
}
$sql1.= "'$reponse_utilisateur[$nombredechamps2]')";

mysql_query($sql1) or die(mysql_error());?>
mais les valeurs sont stockés chaque une dans une colonne dont elle n'appartienne pas
je veux que toutes les valeurs cocher s'enregistrent dans une même colonnes
j'ai des erreurs de type Notice: Undefined offset:
et l'enregistrement dans la base et trés bouelversé
A voir également:

4 réponses

:/
Pas évident de s'y retrouver là-dedans.
Quelques petites choses en vrac :
- "$reponse_utilisateur[1]" <= il doit y avoir une erreur sur "[1]"
- Pour insérer plusieurs lignes d'un coup avec un INSERT INTO .. VALUES, il faut faire ainsi :
VALUES ('a','c'), ('b','d')
et non
VALUES ('a','c','b','d')
- L'opération "$nombredechamps2=$nombredechamps-2;" me parait hautement hasardeuse, pourquoi - 2 ?
- Il y a des doublons de test : tester "if (isset($_SESSION['question' . $data[0]])) " dans "if (isset($_SESSION['question' . $data[0]]))" ne sert pas
- "$check" est défini mais n'est pas utilisé

Etait-il nécessaire que les données du formulaire soient présentes en $_SESSION ?

Bref, un peu confus :)
Si on revenait au besoin de base : qu'est-ce que c'est censé faire ? Quelles sont les données en entrée (formulaire ? résultat de requêtes SQL ?) ? Que souhaite-t-on en faire ?
0
debutantephp Messages postés 13 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 25 juin 2011
23 juin 2011 à 22:37
bsr
bon ma base contient 3 tables :
-questions: des questions soit de type champs de texte/chois unique/choix multiple si le cas et de question de choix unique ou multiple les posiblités de reponse sont enregistré dans:
- la table reponse qui contient le id de question la posiblité de reponse et le id de chaque posiblité de reponse
-table etablissement_universitaire:ou on va trouver les reponse sur notre formulaire
le formulaire donc est dynamique tout dépend de ce qui est dans (question/reponse)
le variable $nombredechamps est calculer par une fonction et si je ne fais pas -2 l'enregistrement ne se fait pas car il faut enlever le id de table etablissemnt_universitaire j'utilise les sessions parce que c 'est dynamique et je travaille avec pagination at passe de valeurs de chaque formulaire de page en page ben voila
merci parce que vous avez lu la totalité de mon code
0
Je comprends mieux l'usage de $_SESSION (conservation des réponses faites de page en page), et devine un peu mieux comment ça y est structuré :)
Un truc du genre
array(
'question1' => 3,
'question8' => array(
4, 9
),
....
)

Par contre, je ne suis pas sûr d'avoir bien compris comment étaient les données dans "etablissement_universitaire". Y a-t-il une ligne par formulaire complété ou une ligne par réponse dans le formulaire complété ?

Quelques autres petites choses :
- "$reponse="/".$chkbx;" => $reponse est écrasé à chaque itération du foreach.
- "$reponse_utilisateur[1] =$reponse.",".$reponse;" => concatène 2 fois la même valeur, pas sûr que ce soit le but recherché
- Si une table a ce type de structure ( ID auto-incrémenté, champ1, champ2 ), il est possible de faire, pour MySQL :
INSERT INTO table1 (champ1, champ2) VALUES ( 'valeur1','valeur2' );
ou
INSERT INTO table1 VALUES ( NULL, 'valeur1','valeur2' );
0
debutantephp Messages postés 13 Date d'inscription mardi 10 mai 2011 Statut Membre Dernière intervention 25 juin 2011
25 juin 2011 à 00:41
bsr
ben j'ai changer l'ideé et por les questions de chek box
elseif ($data[1]=="Multichoix")
{ 
 $sqlcheckbox="SELECT * FROM reponse WHERE id_question=".$data[0];
				  $check = mysql_query($sqlcheckbox)or die (mysql_error());
				 while( $check_resultat = mysql_fetch_row($check) ) 
				  {
							if (isset($_SESSION['question' . $data[0]])) 
							
								
								if (in_array($check_resultat[1], $_SESSION['question' . $data[0]])) { 
								
								$reponse_utilisateur[] ="Oui";
				  			}
							else
				 			
						$reponse_utilisateur[] ="Non";


				  }
			  }

mais reste le probleme de variable vide l'enregistrement dans la base est n'est pas corecte
ben dans la tabel etablissement_universitaire chaque ligne est une réponse d'une question dans le formulaire
0