Sondage
Bonsoir,
Je souhaiterai mettre en place un sondage sur mon site. Malheureusement, je rencontre un problème : dans la page traitement.php de ma zone admin, je n'arrive pas à enregistrer dans ma table choix plusieurs entrées à la fois tout en sachant que ce nombre d'entrées est variable et dépend de la valeur que contiens $nombre_de_reponses.
J'espère avoir été assez clair...
Merci d'avance :)
Ben pas vraiment :/
Pourquoi tu n'y arrives pas ?
As tu un message d'erreur ?
Les insert ne ne sont pas ? Tu fais une boucle pour tes insert ?
Peux tu nous montrer ton code ?
Bon ok alors je vais réexpliquer :)
J'ai un dossier sécurisé avec des sessions, nommé "admin".
Pour créer un sondage, je vais sur la page creer1 et j'y insère la question ainsi que le nombre de réponses. Le formulaire pointe alors sur creer2 et affiche avec une boucle for le nombre d'input correspondant. Une fois ce second formulaire validé, on tombe sur traitement qui enregistre les données dans la table après avoir vérifié que tous les champs étaient remplis. Voici son code :
<?php
$nb_rep = $_POST['nb_rep'];
if (isset($_POST['question']))
{
if(!empty($_POST['question']))
{
$ok = true;
for($nombre_de_verifs = 0; $nombre_de_verifs <= $nb_rep; $nombre_de_verifs++)
{
if(isset($_POST['choix'.$nombre_de_verifs]))
{
if(!empty($_POST['choix'.$nombre_de_verifs.'']))
{
$message = '<strong><a href="afficher_sondage.php">ici</a></strong>';
}
else
{
$ok = false;
break;
}
}
}
}
elseif(empty($_POST['question']))
{
echo '<strong>No</strong>';
}
}
if(isset($ok))
{
if($ok == true)
{
echo $message;
// Je me connecte à la base de données
include("../includes/identifiants.php");
mysql_connect($adresse, $nom, $motdepasse);
mysql_select_db($database);
// Je balance le tout dans la table sondages
$auteur = $_SESSION['pseudo'];
$question = $_SESSION['question'];
mysql_query("INSERT INTO sondages VALUES('','".$auteur."','','','1')") or die(mysql_error());
//Je récupère l'id de ma table sondages
$id_sondages = mysql_insert_id();
// J'insère maintenant mes données dans sondage_question
mysql_query("INSERT INTO sondage_question VALUES('','".$id_sondages."','".$question."')") or die(mysql_error());
// Je recupère maintenant l'id de ma table sondage_question
$id_sondage_question = mysql_insert_id();
// Insertion
mysql_query
("
INSERT INTO sondage_choix (sondage_choix_id, sondage_id, sondage_question_id, sondage_choix, sondage_nb_vote)
VALUES(),()
") or die(mysql_error());
}
}
?>
pas de réponses ? pourtant je suis sûr que c'est facile à réaliser :(
Ben au moment ou tu fais ton dernier INSERT, il te faut faire une boucle pour y insérer tes réponses.
En plus, cette boucle, tu la fais déjà dans la première partie de ton code, la ou tu vérifies si les réponses sont bien définies. Donc reprend cette boucle, et colles y ton INSERT.
Et faut mettre des valeurs dans le VALUES de ta requete SQL.
Oui, mais une requête dans une boucle n'est-ce pas déconseillé niveau ressources ?
Pour faire X insert, tu n'as pas trop le choix.
Et si je faisais un array avec une boucle foreach... ça reviendrait au même au niveau ressources ?
Oui, ca reste une boule.
Ce que je veux dire, c'est que tu n'as le choix :)
Les insert se font un par un, il n'y a pas de truc "magique" pour en faire plusieurs d'un coup.
Oki alors je vais faire ainsi :
<?php if(!empty($_POST['choix'.$nombre_de_verifs.'']))
{
$message = '<strong><a href="afficher_sondage.php">ici</a></strong>';
mysql_query("INSERT INTO sondage_choix VALUES ('', ?, ?, '".$_POST['choixmachin']."'");
} ?>
Les ? correspondent respectivement aux id du sondage et de la question. Comment les récupérer autrement que par un mysql_insert_id() étant donné que les insertions dans les tables sondage et question ne se font qu'en dessous, au sein de la condition if($ok == true){} ?
Merci