2010-01-19 7 views
1

Je souhaite effectuer un sondage multi-questions par étapes. Je souhaite que les questions soient affichées les unes après les autres dans l'ordre et que les questions soient extraites de la base de données.requête de boucle d'interrogation php

Je récupère avec succès une question de la base de données. mais la façon dont je veux que cela fonctionne est lorsque l'utilisateur clique sur Soumettre pour une question, il devrait amener l'utilisateur à la question suivante.

$query = "SELECT qid, qtitle FROM questions where qid = $qid"; 
$result = mysql_query($query) or die("ERROR: $query.".mysql_error()); 
// if records are present 
if (mysql_num_rows($result) > 0) { 
$row = mysql_fetch_object($result); 

// get question ID and title 
$qid = $row->qid; 
    echo '<div id=ques>'; 
echo '<h2>'.$row->qtitle .'</h2>'; 
    echo '</div>'; 

quelqu'un peut m'aider s'il vous plaît avec la boucle et construit pour ce type de requête?

Je ne veux pas faire des pages séparées pour les questions.

Répondre

1

Vous pouvez stocker le numéro de la question dans un champ masqué sur le forum.

if (isset($_POST["qnum"])) { 
    $questionNum = (integer) $_POST["qnum"]; 
} else { 
    $questionNum = 0; 
} 

$query = "SELECT qid, qtitle FROM questions where qid = $qid"; 
$result = mysql_query($query) or die("ERROR: $query.".mysql_error()); 
// if records are present 
if (mysql_num_rows($result) > $questionNum) { 
    for ($_i = 0; $_i < $questionNum; $_i += 1) 
     $row = mysql_fetch_object($result); 

    // get question ID and title 
    $qid = $row->qid; 
    echo '<input type="hidden" value="$qnum" />'; 
    echo '<div id=ques>'; 
    echo '<h2>'.$row->qtitle .'</h2>'; 
    echo '</div>'; 
} 

Cela suppose que vous êtes sous une forme HTML. Sinon, vous pouvez les stocker dans la variable $ _SESSION.

0

La façon dont j'aborderais cela est de poster l'identifiant de la question suivante comme un champ caché sur votre formulaire (je suppose que vous avez un formulaire pour l'utilisateur d'entrer leur réponse?).

La première fois que vous chargez la page, vous n'obtiendrez pas d'identifiant de question, alors vous devez simplement saisir le premier. Ensuite, dans cette même page, vous écririez une requête pour obtenir l'identifiant de la question suivante. Vous mettriez cela dans votre champ caché:

<input type="hidden" name="questionID" value="<?php echo $nextID ?>"> 

Lorsque la page est présentée de nouveau vous avez un $ _POST [ « QuestionID »]; variable que vous pouvez utiliser pour générer la question suivante avec.

0

Probablement le moyen le plus facile de le faire, puisque vous avez mentionné que vous ne voulez pas utiliser plusieurs pages, serait de lister toutes les questions sur votre page, mais masquer tout sauf le premier. Ensuite, lorsque l'utilisateur clique sur "suivant", il cache le premier et affiche le second, et ainsi de suite.

$query = "SELECT qid, qtitle FROM questions ORDER BY qid ASC"; 
$result = mysql_query($query) or die("Error: $query.".mysql_error()); 

while ($row = mysql_fetch_object($result)) { 
    echo "<div class='question' id='$row->qid'><h2>$row->qtitle</h2></div>"; 
} 

echo "<button type='button' id='button'>Next</button>"; 

Et vous pouvez utiliser jQuery pour écrire un code comme ceci:

$(function() { 
    $current_question = 1; 
    $(".question").each (function() {$(this).hide();}) 
    $("#"+current_question).show(); 

    $("#button").click(function() { 
     $("#"+current_question).hide(); 
     current_question++; 
     $("#"+current_question).show(): 
    }) 
)}