2010-11-30 19 views
0

Je travaille sur un petit sondage php/mysql. J'ai toutes mes questions/réponses/cateogries stockées dans un mysql db. J'ai aussi mes catégories stockées dans un tableau dans mon script PHP. categories array = ("Personne", "Une Maman", "Un Etudiant", "Quelqu'un", etc) chaque catégorie a 4 questions et 4 réponses. Il y a 8 catégories. un utilisateur répond à l'enquête en passant de la catégorie 1 à la catégorie suivante etc ...sondage php mysql counter

voici une requête SQL que j'ai codée en dur la catégorie 2, de sorte que je peux afficher les 4 questions qui est associée à la catégorie 2: sélectionnez un. , b. de la catégorie a, questions b où a.id = b.id et a.id = '2'

ma question est, je vais faire le nombre "2" dynamique. dynamique signifie ici, lorsque l'utilisateur clique sur le bouton "SUIVANT", je voudrais que la nouvelle requête SQL soit comme ceci:

sélectionner un. , b. à partir de la catégorie a, questions b où a.id = b.id et a.id = '3'

en cliquant sur le bouton suivant va à nouveau: sélectionner un. , b. de la catégorie a, b des questions où a.id = b.id et a.id = '4' etc ...

ci-dessous est un extrait de code:

<?php 
    $categories = array ("Person","A Mom","A Student","Somebody"); 

    $sql="select a.*, b.* from category a, questions b where a.id = b.id and a.id='2'"; 
    $result=mysql_query($sql,$db_connection); 
    if (!$result) 
    { 
    die('Error: ' . mysql_error()); 
    }  
?> 
    <tr> 
    <td height="32" colspan="5" bgcolor="#ECA4DD"><b><?php echo $result['name'];?></b></td></tr> 
    <tr> 
    <tr> 
    <td colspan="5" class="content_2"><?php echo $result['description'];?></td> 
    </tr> 
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 

    <?php 
    while ($row = mysql_fetch_assoc($result)) 
    { 

?> 

    <tr> 
    <td class="content_2"><?php echo "Question1"; ?></td> 
    <td align="center" valign="middle"><input type="radio" name="q1" id="s1" value="<?php echo $row['q1']; ?>"/> Rare </td> 
    <td align="center" valign="middle"><input type="radio" name="q1" id="s1" value="<?php echo $row['q1']; ?>"/> Sometimes</td> 
    <td align="center" valign="middle"><input type="radio" name="q1" id="s1" value="<?php echo $row['q1']; ?>"/> True</td> 
    <td align="center" valign="middle"><input type="radio" name="q1" id="s1" value="<?php echo $row['q1']; ?>"/> Always</td> 
    </tr> 
    <tr> 
     <td height="108"></td> 
     <td align="center" valign="middle">&nbsp;</td> 
     <td align="center" valign="middle">&nbsp;</td> 
     <td colspan="2" align="right" valign="middle"><input type="submit" name="save" value="NextButton"/> 
     </td> 
     </tr> 

    <?php 
    mysql_free_result($result); 
    } 
    ?>  

</form> 

Répondre

0

Dans votre formulaire, vous devez indiquer soit quelle étape vous êtes actuellement sur ou que la prochaine étape est. De cette façon, vous pouvez l'incrémenter pour vous déplacer dans le formulaire.

Ainsi, dans votre forme, mettre dans une variable cachée comme ceci:

<input type='hidden' name='thisCategoryID' value='2'> 

Ensuite, dans votre code PHP, vous pouvez le faire:

// If there was a category ID posted, set some variables and increment it to load the next section 
if(isset($_POST['thisCategoryID]) && is_numeric($_POST['thisCategoryID']) { 
    $currentCategoryID = $_POST['thisCategoryID']; 
    $nextCategoryID = $currentCategoryID + 1; 
} else { 
    // There's something wrong with your input, show an appropriate error 
} 

// Now run your query with the updated Category ID 
$sql="select a.*, b.* from category a, questions b where a.id = b.id and a.id='{$nextCategoryID}'"; 
$result=mysql_query($sql,$db_connection); 
if (!$result) { 
    die('Error: '.mysql_error()); 
} 

je aurais pu faire un peu plus pour éviter l'injection SQL dans la requête ci-dessus, dans cet exemple, je vérifie juste que vous avez une valeur numérique.

+0

Je ne voudrais pas utiliser une valeur cachée, bien que ce soit un bon moyen mais préférable d'utiliser une variable SESSION. C'est plus sûr. Ou utilisez 2 variables ensemble (un md5 de l'autre) et vérifiez-les. Sur la fonctionnalité d'enquête. J'utiliserais Examinare, il est vraiment facile à utiliser avec l'API et prend tout ce tracas. Mais pour un projet à but non lucratif, il suffit de changer la variable en SESSION au lieu de ma première estimation. – user2420647

0

Vous pouvez passer le courant numéro de question via $_GET variables ou quelque chose de cette nature. Ainsi, au début de la page saisir la question actuelle:

$current_question = isset($_GET['current_question']) ? $_GET['current_question'] : '1'; 

Et puis dans votre requête, vous pouvez lancer quelque chose comme:

$sql = "SELECT `a`.*, `b`.* FROM `category` AS `a`, `questions` AS `b` WHERE `a`.`id` = `b`.`id` AND `a`.`id` = '{$current_question}'";