Enregistrement de plusieurs checkbox dans une base de données

Eléphanteau du PHP | 43 Messages

30 août 2007, 23:14

Je ne sais pas si c'est la meilleur méthode mais voici un exemple qui fonctionne.
$critere_valeur = array($_POST['critere_valeur'][1],
                                        $_POST['critere_valeur'][2],
                                        $_POST['critere_valeur'][3],
                                        $_POST['critere_valeur'][4]);


               foreach($critere_valeur as $inc_critere_valeur)  {

                  $req = "INSERT INTO
                                concours_insc_crit_vot
                                      							icv_crit_id 	  = '',
							icv_votant_id 	  = '".mysql_real_escape_string($_POST['votant_id'])."',
							icv_inscrit_id 	  = '".mysql_real_escape_string($_POST['inscrit_id'])."',
							icv_valeur 		  = '".mysql_real_escape_string($inc_critere_valeur)."'
							";
		        $result = mysql_query($req) or die("Erreur MySQL : Impossible de sauvegarder les données");

               }
J'ai essayé, ça m'affiche :

Notice: Undefined offset: 2 in f:\site\concours_essais\vote_gars_traitement.php on line 242

Notice: Undefined offset: 3 in f:\site\concours_essais\vote_gars_traitement.php on line 243

Notice: Undefined offset: 4 in f:\site\concours_essais\vote_gars_traitement.php on line 243
Erreur MySQL : Impossible de sauvegarder les données

Visiblement, les trois dernières valeurs ne sont pas reconnues, je ne comprends pas pourquoi.
j'ai même essayé en ajoutant
1 =>
juste après
array
au tout début de la parenthèse, en ayant coché trois critères au lieu de deux, et là pareil :

Notice: Undefined offset: 3 in f:\site\concours_essais\vote_gars_traitement.php on line 243

Notice: Undefined offset: 4 in f:\site\concours_essais\vote_gars_traitement.php on line 243
Erreur MySQL : Impossible de sauvegarder les données

Ça marche chez toi dunbar ? Je mets peut-être des éléments en trop avant, comme un :
if (isset($_POST['critere_valeur']))
Clicky

ViPHP
ViPHP | 5924 Messages

30 août 2007, 23:26

IL me semble que maintenant un peu mettre SET avec un INSERT (du moins avec MySQL)
Au temps pour moi :-/
Et je t'assure : on met des requêtes dans des boucles... :roll:
Oui mais comme le Ricard, avec modération. Si on peut très simplement les sortir, je ne vois pas pourquoi faire exploser le traffic SQL…

ViPHP
ViPHP | 5924 Messages

30 août 2007, 23:36

Voilà ce que je suggérais dunbar :
$values = array();
for($i=0; $i<$nb_chkbox; $i++)
{
	if( isset($_POST['critere_valeur'][$i]) )
	{
		$values[] = '( NULL , "' .
			mysql_real_escape_string($_POST['votant_id']) . '", "'
			mysql_real_escape_string($_POST['inscrit_id']) . '", "'
			mysql_real_escape_string($_POST['critere_valeur'][$i]) .
		'")';
	}
}
$req = "INSERT INTO concours_insc_crit_vot (icv_crit_id, icv_votant_id, icv_inscrit_id, icv_valeur) VALUES " . implode( ',' , $values ) . ';';
$result = mysql_query($req) or die("Erreur MySQL : Impossible de sauvegarder les données"); 

Mammouth du PHP | 1776 Messages

31 août 2007, 07:27

Sinon, évitez juste de lui donner le script tout fait...
Le but c'est qu'il trouve par lui même :roll:

Invité
Invité n'ayant pas de compte PHPfrance

31 août 2007, 09:50

Voilà ce que je suggérais dunbar :
$values = array();
for($i=0; $i<$nb_chkbox; $i++)
{
	if( isset($_POST['critere_valeur'][$i]) )
	{
		$values[] = '( NULL , "' .
			mysql_real_escape_string($_POST['votant_id']) . '", "'
			mysql_real_escape_string($_POST['inscrit_id']) . '", "'
			mysql_real_escape_string($_POST['critere_valeur'][$i]) .
		'")';
	}
}
$req = "INSERT INTO concours_insc_crit_vot (icv_crit_id, icv_votant_id, icv_inscrit_id, icv_valeur) VALUES " . implode( ',' , $values ) . ';';
$result = mysql_query($req) or die("Erreur MySQL : Impossible de sauvegarder les données"); 
Merci pour Clicky :wink:

ViPHP
ViPHP | 2291 Messages

31 août 2007, 10:08

Voilà ce que je suggérais dunbar :
$values = array();
for($i=0; $i<$nb_chkbox; $i++)
{
	if( isset($_POST['critere_valeur'][$i]) )
	{
		$values[] = '( NULL , "' .
			mysql_real_escape_string($_POST['votant_id']) . '", "'
			mysql_real_escape_string($_POST['inscrit_id']) . '", "'
			mysql_real_escape_string($_POST['critere_valeur'][$i]) .
		'")';
	}
}
$req = "INSERT INTO concours_insc_crit_vot (icv_crit_id, icv_votant_id, icv_inscrit_id, icv_valeur) VALUES " . implode( ',' , $values ) . ';';
$result = mysql_query($req) or die("Erreur MySQL : Impossible de sauvegarder les données"); 
Merci Sékiltoyai je vais étudié les insertions mutiple :wink: je ne connaissais pas
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Eléphanteau du PHP | 43 Messages

31 août 2007, 10:39

Sinon, évitez juste de lui donner le script tout fait...
Le but c'est qu'il trouve par lui même :roll:
Si tu parles de moi, tu peux remplacer "il" par "elle" :) et puis je cherche effectivement à apprendre et surtout à comprendre, les codes tout faits c'est bien, mais des explications claires, c'est encore mieux ;)
car..
Merci pour Clicky
Certes, mais ça ne marche toujours pas, j'ai une Notice: Undefined variable: nb_chkbox, je doit lui trouver sa valeur.

Merci à tous pour votre aide en tout cas, je vais essayer de me dépatouiller ;)
Clicky

Mammouth du PHP | 1776 Messages

31 août 2007, 10:45

Sinon, évitez juste de lui donner le script tout fait...
Le but c'est qu'il trouve par lui même :roll:
Si tu parles de moi, tu peux remplacer "il" par "elle" :) et puis je cherche effectivement à apprendre et surtout à comprendre, les codes tout faits c'est bien, mais des explications claires, c'est encore mieux ;)
car..
Merci pour Clicky
Certes, mais ça ne marche toujours pas, j'ai une Notice: Undefined variable: nb_chkbox, je doit lui trouver sa valeur.

Merci à tous pour votre aide en tout cas, je vais essayer de me dépatouiller ;)
Dsl mademoiselle :oops:
Ton pseudo ne me permet pas d'identifier avec précision les chromosomes qui font de toi un garçon ou une fille :wink: :P
N'hésite pas à t'inscrire sur nos forums :wink:
[EDIT] C'est déjà fait! Bienvenue à toi

Eléphanteau du PHP | 43 Messages

31 août 2007, 11:33

Dsl mademoiselle :oops:
Ton pseudo ne me permet pas d'identifier avec précision les chromosomes qui font de toi un garçon ou une fille :wink: :P
Certes, et il ne permet pas non plus de deviner que je ne suis plus une demoiselle depuis plus de dix ans :langue: (et là, l'enthousiasme de LHDN92 retomba..) :D
N'hésite pas à t'inscrire sur nos forums
[EDIT] C'est déjà fait! Bienvenue à toi
Merci beaucoup ;)

Sinon, à part mon problème pour rentrer mes choix de critères dans la dernière table, je pense que je vais faire mon formulaire en deux fois pour pouvoir enregistrer ensuite, l'id du votant `votant_id` dans la dernière table, vu qu'il le sera déjà dans `concours_votant` à ce moment là.

Je pense faire le formulaire sur la fiche de l'inscrit, qui demande juste l'e-mail du votant (et la saisie anti-spam), d'en faire ensuite le traitement en récupérant son id, sur la page de traitement (logique), de mettre sur cette dernière page le formulaire qui propose le choix des critères avec son traitement sur une deuxième page de traitement, où je n'aurais plus qu'à trouver comment enregistrer tout ça dans la dernière table de liaison (l'id du votant récupéré et enregistré de la même manière que celui de l'inscrit).

Et enfin, je pourrai m'occuper des pages de résultats pour chaque inscrit, je ne sais pas encore si je vais compter les entrées qui m'intéressent ou les afficher en pourcentage.. Je verrai :)

À bientôt :ordi:
Clicky

ViPHP
ViPHP | 5924 Messages

31 août 2007, 12:16

Sinon, évitez juste de lui donner le script tout fait...
Le but c'est qu'il trouve par lui même :roll:
Ouais mais en l'occurrence lorsque cela patine et que l'on est si loin du résultat, …

Mammouth du PHP | 1776 Messages

31 août 2007, 14:21

Sinon, évitez juste de lui donner le script tout fait...
Le but c'est qu'il trouve par lui même :roll:
Ouais mais en l'occurrence lorsque cela patine et que l'on est si loin du résultat, …
Et bien en l'occurence non...
Ce n'est pas aider quelqu'un que de lui redonner la solution toute faite. La personne doit essayer par elle même avec les indices qu'on lui donn. C'est en essayant que l'on comprend. Fournir un script c'est simplement lui apprendre à faire ctrl+c, puis ctrl+v... :roll:
Si maintenant c'est trop dur à expliquer, il faut essayer de lui faire en pseudo code, lui décrire comment son script doit se comporter, et essayer de placer avec elle des fonctions sur le pseudo code.

Eléphanteau du PHP | 43 Messages

01 sept. 2007, 20:47

Bonsoir,

Pour l'id du votant, je me suis débrouillée autrement finalement, par contre, pour rentrer les derniers éléments dans la dernière table, j'ai un petit soucis.
j'ai essayé :
$values = array();
		for($i=0; $i<$critere_valeur; $i++)
		{
			if (isset($_POST['critere_valeur'][$i]))
			{
			$values[] = '( NULL , "' .
			mysql_real_escape_string($_POST['votant_id']) . '", "' .
            mysql_real_escape_string($_POST['inscrit_id']) . '", "' .
            mysql_real_escape_string($_POST['critere_valeur'][$i]) . 
			'")'; 
			}
			$req = "INSERT INTO concours_insc_crit_vot (icv_id, icv_votant_id, icv_inscrit_id, icv_valeur) VALUES " . implode( ',' , $values ) . ';'; 
		$result = mysql_query($req) or die ("erreur sql : Impossible de sauvegarder les données. ".mysql_error());
		}
déjà, ça met un temps fou à m'afficher ceci :

Fatal error: Maximum execution time of 30 seconds exceeded in f:\site\concours_essais\vote_gars_traitement.php on line 207

ensuite, quand je vais consulter ce qui s'est enregistré dans ma table, je constate qu'elle s'est bien remplie, trop même, beaucoup trop..
Disons que la requête fait ce que je voulais, mais des centaines de fois, d'où le message ci-dessus je suppose.

Une capture de ma table.. :

Image

Heureusement que je connais le TRUNCATE TABLE, sinon, je serais encore en train de vider la table page par page, vu le nombre.. :?
Et autre chose de bizarre, c'est la valeur de la colonne `icv_valeur` de la première ligne qui est la même que la seconde.. Alors que les autres lignes sont bonnes, y a-t-il une explication à ça ?

Sinon, si je fait :
$values = array();
		for($i=0; $i<$critere_valeur; $i++)
		{
			if (isset($_POST['critere_valeur'][$i]))
			{
			$values[] = '( NULL , "' .
			mysql_real_escape_string($_POST['votant_id']) . '", "' .
            mysql_real_escape_string($_POST['inscrit_id']) . '", "' .
            mysql_real_escape_string($_POST['critere_valeur'][$i]) . 
			'")'; 
			}
		}
		$req = "INSERT INTO concours_insc_crit_vot (icv_id, icv_votant_id, icv_inscrit_id, icv_valeur) VALUES " . implode( ',' , $values ) . ';'; 
		$result = mysql_query($req) or die ("erreur sql : Impossible de sauvegarder les données. ".mysql_error());
Il met le même temps infini à m'afficher le même message, mais cette fois, rien ne s'enregistre dans la table ^^'

Bon, je viens d'essayer carrément :
$values = array();
		for($i=0; $i<$critere_valeur; $i++)
		{
			if (isset($_POST['critere_valeur'][$i]))
			{
			$values[] = '( NULL , "' .
			mysql_real_escape_string($_POST['votant_id']) . '", "' .
            mysql_real_escape_string($_POST['inscrit_id']) . '", "' .
            mysql_real_escape_string($_POST['critere_valeur'][$i]) . 
			'")';
			
			$req = "INSERT INTO concours_insc_crit_vot (icv_id, icv_votant_id, icv_inscrit_id, icv_valeur) VALUES " . implode( ',' , $values ) . ';'; 
			$result = mysql_query($req) or die ("erreur sql : Impossible de sauvegarder les données. ".mysql_error());
			}
		}
J'ai toujours le même message qui s'affiche 1 an après (j'exagère ;) ) mais les enregistrements ne se font qu'une fois, mais j'ai toujours la première valeur qui s'affiche deux fois..

Image

Il y a peut-être un problème d'array qui ne commence pas comme il faudrait.. :-k

Je vais essayer de régler ça :)

Encore merci ;)
Clicky

ViPHP
ViPHP | 5924 Messages

01 sept. 2007, 20:57

Il faut renseigner $critere_valeur. J'avais mis $nb_chkbox, je pense que le nom de la variable était assez clair pour que tu saches quoi y mettre dedans…

Eléphanteau du PHP | 43 Messages

01 sept. 2007, 21:31

Ok, donc j'ai mis ça avant la boucle :
$nb_critere = array(1 => 1, 2, 3, 4);
avec :
for($i=0; $i<sizeof($nb_critere); $i++)
mais le même problème se produit, par contre, je n'ai plus le message de warning, c'est déjà ça de gagné :)
Clicky

ViPHP
ViPHP | 5924 Messages

01 sept. 2007, 22:54

Tu peux mettre le code complet ?