Bonjour,
Je suis actuellement sur la création d'un sondage de satisfaction avec une base de donnée Mysql.
Pour le moment la question s'affiche avec les réponses correspondant. L'utilisateur peut choisir sa réponse et celle-ci va aller implémenter un élement de la base.
<?php
// on se connecte à notre base de données
/*$base = mysql_connect ('localhost','root','');
mysql_select_db ('satisfaction',$base);*/
$base = mysqli_connect('localhost', 'root', '', 'satisfaction');
// on prépare une requête pour sélectionner l'id et la question du dernier sondage (on sélectionne les questions, et on en prend qu'une (le LIMIT 0,1) et ce, dans un ordre décroissent (DESC), soit en fait, la dernière question posée).
$sql = 'SELECT id, question FROM sondage_questions ORDER BY id ';
// on lance la requête
/*$req = mysql_query ($sql) or die ('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());*/
$req = $base->query($sql);
// on récupère le résultat dans un tableau associatif
$data = mysqli_fetch_array ($req);
$nb_sondage = mysqli_num_rows($req);
if ($nb_sondage == 0) {
echo 'Aucun sondage.';
}else {
// on libère l'espace mémoire alloué à cette requête
mysqli_free_result ($req);
?>
<div class="type-question">
<p class="question">
<?php
// on affiche la question
echo stripslashes(htmlentities(trim($data['question']))),'<br />';
?>
</p>
</div>
<?php
// on prepare l'affichage de notre formulaire permettant de voter
echo '<form action = "index.php" method = "post">';
// on prépare une requête permettant de sélectionner les réponses possibles se rapportant à ce même sondage
$sql = 'SELECT id, reponse FROM sondage_reponses WHERE id_sondage="'.$data['id'].'"';
// on lance la requête
/* $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());*/
$req = $base->query($sql);
// on prépare notre boucle pour afficher les différents choix possibles de réponses
while ($donnees = mysqli_fetch_array($req)) {
// on affiche des boutons radio pour les différents choix de réponses possibles
echo '<input type="radio" name="choix" value="' , $donnees['id'] , '"> ' , stripslashes(htmlentities(trim($donnees['reponse']))) , '<br />';
}
?>
<input type = "hidden" name = "sondage_en_cours" value = "<?php echo $data['id']; ?>">
<input type = "submit" name="go" value = "Vote">
</form>
<?php
}
// on libère l'espace mémoire alloué à cette requête
mysqli_free_result ($req);
// on ferme la connection à notre base de données
mysqli_close ($base);
?>
<br /><br />
<a href="sondage_resultats.php">Voir les résultats</a>
<?php
// on affiche les erreurs éventuelles
if (isset($erreur)) echo '<br /><br />',$erreur;
?>
J'aimerais pouvoir une fois que la personne a répondu à la question passer à la question suivante. Cependant je sais pas trop comment faire.
oui c'est ça.
Oui vous rester toujours à 1 ou 2 car à aucun moment on passe l'id dans le formulaire.
On pourrait le passer avec la déclaration du formulaire :
echo "<form action = 'index.php?id=".$next."' method = 'post'>";
Bonsoir,
Si le problème est juste de passer d'une question à une autre, il te suffit de faire un bouton suivant qui pointe vers la prochaine question.
"questions.php?id_quest=2"
Il faudrait que quand je clique sur "vote" cela affiche la question suivante qui est dans la base de donnée du coup me semble qu'il faut faire plus que marqué simplement "questions.php?id_quest=2" non?
Il s'agit juste du lien vers la question suivante. Une fois la page affiché, vous avez l'id de la question suivante donc plus qu'à affiché cette question.
Je ne parle ici de l'enregistrement des réponses. Mais que du passage à l'autre question.
Bonsoir,
Comme dit précedemment
<blockquote>Carouge10
Bonsoir,
Si le problème est juste de passer d'une question à une autre, il te suffit de faire un bouton suivant qui pointe vers la prochaine question.
"questions.php?id_quest=2"
</blockquote>
Sauf qu'à la place d'un lien tu utilise header('Location:ta_page.php?question_token=2');
... Voilà voilà !
mais avec votre solution, la page va avoir l'id 2 mais je vois pas trop comment il pourrait trouver la question avec l'id 2 car pour cela faudrait aussi précisé dans la requette sql non ? de plus si on a plus de 2 question. On devrait plutot mettre header('Location:ta_page.php?question_token=$id'); et incrémenter $id non ?
Oui c'est tout le principe !
Et donc si tu es à la question 1 la redirection ira à la question 2.
Si tu es à la question 2564 la redirection sera pour 2565.
<?php
$sql = $db->prepare('SELECT * FROM question WHERE id = :id');
$sql->execute(array('id' => $_GET['question_token']));
?>
D'accord
Alors sinon j'ai fait un truc comme ceci :
$sql = 'SELECT id, question FROM sondage_questions WHERE id="'.$next.'" ORDER BY id ';
et quand je clique sur vote
$next = $next+1;
header('Location:index.php?id='.$next);
Par contre il me dit que je n'ai pas déclarer la variable $next. Je l'ai donc mis tout au début avec $next =0 mais du coup cette variable reste toujours à 0. Une idée pour ce souci ?
Oui car next finalement c'est id passé en paramètre + 1.
Donc il ne doit être initialiser à 0 ou 1 que s'il n'existe pas.
Svp j'ai utilisé une fonction isLogged avec comme classe User pour ma connexion mais on m'affiche undefined variable bdd in C:....
En faissant ceci ?
if(!isset($next)){
$next = 1;
}
Mais du coup à chaque fois qu'il va faire le header il va revenir à 1..
Remets nous le code complet (fonction et page). Histoire de voir où tu en es et nous aussi car je m'y pers un peu.
<?php
if(!isset($next)){
$next = 1;
}
var_dump($next);
// on teste si formulaire de vote a été validé
if (isset($_POST['go']) && $_POST['go']=='Valider') {
if (!isset($_POST['choix']) || !isset($_POST['sondage_en_cours'])) {
$erreur = 'Aucune réponse n\'a été choisie.';
}
// on teste si le visiteur a bien choisi une réponse avant d'avoir clické sur "Vote". On teste aussi si la variable $_POST['sondage_en_cours'] n'est pas vide
if (empty($_POST['choix']) || empty($_POST['sondage_en_cours'])) {
$erreur = 'Au moins un des champs est vide.';
}
else {
// là le visiteur à choisi une réponse
// on se connecte à notre base
$base = mysqli_connect('localhost', 'root', '', 'satisfaction');
// on prépare notre requête : on ajoute un vote pour la réponse choisie par le votant
$sql ='UPDATE sondage_reponses SET nb_reponses = nb_reponses + 1 WHERE id_sondage="'.$_POST['sondage_en_cours'].'" AND id="'.$_POST['choix'].'"';
// on lance la requête
$req = $base->query($sql);
// on ferme la connexion à la base de donnée
mysqli_close ($base);
$next++;
$erreur = 'Merci d\'avoir voté :)';
header('Location:index.php?id='.$next);
}
}
?>
<html>
<!-- Développé par le Crédit Agricole Des Savoie - 2017 -->
<head>
<title>Enquête de satisfaction</title>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<meta charset="utf-8">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="author" content="Crédit Agricole Des Savoie"/>
<!-- FRAMEWORKS CSS -->
<link href="./fw-mui/css/mui.css" rel="stylesheet" type="text/css" />
<link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
<!-- CUSTOM CSS -->
<link rel="stylesheet" href="css/main.css">
</head>
<body>
<!-- BANNIERE -->
<div class="col-sm-6 col-sm-offset-3 header-ban"></div>
<div class="col-sm-6 col-sm-offset-3 mui-panel">
<!-- FORMULAIRE DU SONDAGE -->
<div class="row">
<?php
// on se connecte à la base de données
$base = mysqli_connect('localhost', 'root', '', 'satisfaction');
// on prépare une requête pour sélectionner l'id ainsi que la question.
var_dump($_GET['id']);
$sql = 'SELECT id, question FROM sondage_questions WHERE id="'.$_GET['id'].'" ORDER BY id ';
// on lance la requête
$req = $base->query($sql);
// on récupère le résultat dans un tableau associatif
$data = mysqli_fetch_array ($req);
// On retourne de ligne d'un résultat
$nb_sondage = mysqli_num_rows($req);
if ($nb_sondage == 0) {
echo 'Aucun sondage.';
}else {
// on libère l'espace mémoire alloué à cette requête
mysqli_free_result ($req);
?>
<div class="type-question">
<p class="question">
<?php
// on affiche la question
// stripslashes — Supprime les antislashs d'une chaîne
// htmlentities — Convertit tous les caractères éligibles en entités HTML
// trim suprime les espaces en début et fin de chaine
echo stripslashes(htmlentities(trim($data['question']))),'<br />';
?>
</p>
</div>
<?php
// on prepare l'affichage de notre formulaire permettant de voter
echo '<form action = "index.php" method = "post">';
// on prépare une requête permettant de sélectionner les réponses possibles se rapportant à ce même sondage
$sql = 'SELECT id, reponse FROM sondage_reponses WHERE id_sondage="'.$data['id'].'"';
// on lance la requête
$req = $base->query($sql);
?>
<br/>
<?php
// on prépare notre boucle pour afficher les différents choix possibles de réponses
while ($donnees = mysqli_fetch_array($req)) {
// on affiche des boutons radio pour les différents choix de réponses possibles
echo '<center><input type="radio" name="choix" value="' , $donnees['id'] , '"> ' , stripslashes(htmlentities(trim($donnees['reponse']))) , '<br /></center>';
}
?>
<br/><input type = "hidden" name = "sondage_en_cours" value = "<?php echo $data['id']; ?>">
<center><input type = "submit" name="go" value = "Valider"></center>
</form>
<?php
}
// on libère l'espace mémoire alloué à cette requête
mysqli_free_result ($req);
// on ferme la connection à notre base de données
mysqli_close ($base);
?>
<br /><br />
<center><a href="sondage_resultats.php">Voir les résultats</a></center>
<?php
// on affiche les erreurs éventuelles
if (isset($erreur)) echo '<br /><br />',$erreur;
?>
<div class="col-sm-12 mui-textfield mui-textfield--float-label">
</div>
</div>
</div>
<div class="col-sm-6 col-sm-offset-3 ft-copy">
<p>© Crédit Agricole des Savoie - 2017</p>
</div>
</body>
<script type="text/javascript" src="js/jquery.min.js"></script>
<!--<script src="./js/main.js"></script>-->
<!-- FRAMEWORKS JS -->
<script src="./fw-mui/js/mui.min.js"></script>
<script src="./fw-mui/webcomponents/mui-webcomponents.min.js"></script>
<script type="text/javascript" src="bootstrap/js/bootstrap.min.js"></script>
</html><br><br>
Alors, $next corresponds à l'id de la question en cours (venant de la page précédente)
Donc celui-ci viens de l'url.
if(.....$_GET['id_next']){ // S'il existe
$next = $_GET['id_next'];
} else { // N'existe pas donc on prends la question une par défaut
$next = 1;
}
les .... corresponde à quoi?
Sinon j'ai tester ceci :
if(isset($_GET['id'])){ // S'il existe
$next = $_GET['id'];
} else { // N'existe pas donc on prends la question une par défaut
$next = 1;
}
et il affiche juste la question 1 et 2 car me semble qu'il passe à chaque fois dans le else .