Enregistrement de plusieurs checkbox dans une base de données

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Enregistrement de plusieurs checkbox dans une base de données

par Clicky » 05 sept. 2007, 14:22

Bonjour,

Mon problème est résolu, on m'a conseillé ceci :
foreach ($_POST['critere_nom'] as $key=>$critere){
    $values = '( NULL , "' .
    mysql_real_escape_string(htmlentities($_POST['votant_id'])) . '", "' .
    mysql_real_escape_string(htmlentities($_POST['inscrit_id'])) . '", "' .
    mysql_real_escape_string(htmlentities($critere)) .'")';
    $req = "INSERT INTO concours_insc_crit_vot
	(icv_id, icv_votant_id, icv_inscrit_id, icv_valeur)
	VALUES ".$values.';';
    
	$result = mysql_query($req)
	or die ("erreur sql : Impossible de sauvegarder les données. ".mysql_error());
}
Ça marche comme je voulais.

Merci pour vos aides, à bientôt.

par Clicky » 01 sept. 2007, 23:04

le voici :
$nb_critere = array(1 => 1, 2, 3, 4);
$values = array();
		for($i=0; $i<sizeof($nb_critere); $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());
			}
		}

par Sékiltoyai » 01 sept. 2007, 22:54

Tu peux mettre le code complet ?

par Clicky » 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é :)

par Sékiltoyai » 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…

par Clicky » 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 ;)

par DocType » 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.

par Sékiltoyai » 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, …

par Clicky » 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:

par DocType » 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

par Clicky » 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 ;)

par dunbar » 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

par Invité » 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:

par DocType » 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:

par Sékiltoyai » 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");