Sondage

Répondre
lolero
le 09/09/2009 à 20:13
lolero
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 :)
LA GLOBULE
le 09/09/2009 à 20:39
LA GLOBULE
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 ?
lolero
le 10/09/2009 à 16:29
lolero
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());

}
}

?>
lolero
le 11/09/2009 à 20:35
lolero
pas de réponses ? pourtant je suis sûr que c'est facile à réaliser :(
LA GLOBULE
le 12/09/2009 à 00:31
LA GLOBULE
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.
lolero
le 12/09/2009 à 10:04
lolero
Oui, mais une requête dans une boucle n'est-ce pas déconseillé niveau ressources ?
lolero
le 12/09/2009 à 14:04
lolero
Et si je faisais un array avec une boucle foreach... ça reviendrait au même au niveau ressources ?
LA GLOBULE
le 12/09/2009 à 16:37
LA GLOBULE
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.
lolero
le 13/09/2009 à 01:01
lolero
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
Répondre
LoadingChargement en cours