Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème d' incrémentation dans la bd

    23 janvier 2020 à 16:10:38

    re-bonjour,

    tjrs sur mon sondage et la bonne nouvelle c'est qu'il fonctionne.... ou presque. 

    Je m'explique:

    coté par formulaire: 

    <form action="sondage_admin.php" method="post">
    <table>
    <tr><td>
    Question:
    </br>
    </td><td>
    <input type="text" name="question" value="<?php if (isset($_POST['question'])) echo stripslashes(htmlentities(trim($_POST['question']))); ?>">
    </td></tr>
    <?php
    
    // on teste si la variable $_POST['nb_reponses'] est définie ou pas. Si elle ne l'est pas, on la défini à 1
    if (!isset($_POST['nb_reponses'])) $_POST['nb_reponses'] = 1;
    echo '</br><tr><td>Réponses:</td></tr>';
    // si l'utilisateur a clické sur 'Ajouter une réponse' on incrémente la variable $_POST['nb_reponses'], ce qui va nous permettre de rajouter un champ de type text
    if (isset($_POST['go']) && $_POST['go']=='Ajouter une réponse') $_POST['nb_reponses']++;
    
    for ($i=1; $i<=$_POST['nb_reponses']; $i++){
    	$temp = "reponse_$i";
    	if (isset($_POST[$temp])) $value=$_POST[$temp];
    	echo '<tr><td><td><input type="text" name="reponse_'.$i.'" value="';
    	if (isset($value)) echo stripslashes(htmlentities(trim($value)));
    	echo '"></td></tr>';
    	unset($value);
    }
    
    // on passe à notre formulaire le nombre de réponse au sondage
    echo '<input type="hidden" name="nb_reponses" value="'.$_POST['nb_reponses'].'">';
    echo '<tr><td><input type="submit" name="go" value="Ajouter une réponse"></td></tr>';
    echo '<tr><td>&nbsp;</td></tr>';
    echo '<tr><td><input type="submit" name="go" value="Valider"></td></tr>';
    
    ?>
    </table>
    </form>

    J'ai tout mis au cas où mais l'idée c'est de tester l'entrée: nb_réponses, qui correspond au nombre de vote reçu.

    Si elle est nulle, on la défini à 1 et si on l'incrémente on rajoute un champs supplémentaire.

    Jusque là, ca fonctionnne.

    Par contre côté traitement ca coince:

    $question = $_POST['question'];		
    		
    		// on insère notre question
    		$query=$db->prepare('INSERT INTO forum_sondage_questions (question) VALUES (:question)');
    		$query->bindValue(':question', $question, PDO::PARAM_STR);
    		$query->execute();		
    
    		//on récupère la dernière id
    		$query_id=$db->prepare('SELECT MAX(id) FROM forum_sondage_questions');
    		$query_id->execute();
    		$id_sondage = $query_id->fetch();
    		
    		// on insère les réponses possibles à ce sondage
    		for ($i=1; $i<=$_POST['nb_reponses']; $i++){
    		$temp = "reponse_$i";
    		if (isset($_POST[$temp])) $value=$_POST[$temp];
    		
    		$query=$db->prepare('INSERT INTO forum_sondage_reponses (id_sondage, reponse, nb_reponses) VALUES (:id_sondage, :reponse, nb_reponses)');
    		$query->bindValue(':id_sondage', $id_sondage, PDO::PARAM_INT);
    		$query->bindValue(':reponse', $value, PDO::PARAM_STR);
    		$query->bindValue(':nb_reponses', 0, PDO::PARAM_INT);
    		$query->execute();
    		$query->CloseCursor();


    la question est correctement rajouté dans la bd et je récupère bien son id.

    un var_dump de $value, va me retourner une réponse (donc pas null)

    Mais j'ai malgrè tout :

    Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens

    je pense que le problème vient de l'insertion des réponses mais je vois pas pourquoi...

    • Partager sur Facebook
    • Partager sur Twitter
      23 janvier 2020 à 16:26:00

      Bonjour,

      Relis la requête d'insertion, tu as oublié 2 points....

      • Partager sur Facebook
      • Partager sur Twitter
        23 janvier 2020 à 17:30:25

        rah je cherche toujours compliqué alors que c'est bien souvent des erreurs de ce genre :s

        désolé et merci !

        • Partager sur Facebook
        • Partager sur Twitter

        Problème d' incrémentation dans la bd

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown