Mysqli

Fermé
lgslgs - Modifié le 30 mars 2019 à 16:48
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 - 31 mars 2019 à 15:34
Bonjour,
J'ai écrit un programme pour envoyer des données dans une base de données mais je cette erreur:

Warning: mysqli_stmt_bind_result(): Number of bind variables doesn't match number of fields in prepared statement in C:\wampp64\www\OCR_tests\formulaire.php on line 92

J'ai pourtant compter le nombre le nombre de variable

Voici mon code
<!DOCTYPE html>
<html>
    <head>
        <title>Formulaire</title>
        <meta charset="utf-8">
    </head>
    <body>
    <form method="post" action="">
        <h1>Remplissez ce formulaire</h1><br>
        <label for="nom">Nom</label>
        <input type="text" name="nom" id="nom" value="<?php if(isset($_POST['nom'])) { echo $_POST['nom']; } ?>" required><br>

        <label for="prenom">Prénom</label>
        <input type="text" name="prenom" id="prenom" value="<?php if(isset($_POST['prenom'])) { echo $_POST['prenom']; } ?>" required><br><br>

        <label for="commentaire">Commentaire</label><br>
        <textarea name="commentaire" id="commentaire" rows="8" lows="25" value="<?php if(isset($_POST['commentaire'])) { echo $_POST['commentaire']; } ?>" required></textarea><br><br>

        <label for="pays">Pays</label>
        <select name="pays" id="pays">
            <option value="Congo">Congo</option>
            <option value="France">France</option>
            <option value="Allemagne" selected="selected">Allemagne</option>
        </select><br><br>
        <!-- Les cases cochées auront pour valeur "on" -->

        <p>Fast food préféré(s)</p>
        <label for="macdonald">MacDonald</label>
        <input type="checkbox" name="fastfood[]" value="MacDonald" id="macdonald"><br>
        
        <label for="burgerking">Burgerking</label>
        <input type="checkbox" name="fastfood[]" value="Burgerking" id="burgerking" checked="checked"><br>
        
        <label for="kfc">KFC</label>
        <input type="checkbox" name="fastfood[]" value="KFC" id="kfc"><br><br>

        <p>Etes-vous étudiant ?</p>
        <input type="radio" name="choix" value="Oui" id="oui" checked="checked">
        <label for="oui">Oui</label>

        <input type="radio" name="choix" value="Non" id="non">
        <label for="non">Non</label><br><br>
        
        <input type="submit" name="submit" value="Soumettre">
    </form>   
    </body>
</html>

<?php 
$nom= isset($_POST['nom']) ? trim($_POST['nom']):NULL ;
$prenom= isset($_POST['prenom']) ? trim($_POST['prenom']):NULL;
$commentaire=isset($_POST['commentaire']) ? trim($_POST['commentaire']):NULL;

if(isset($_POST['submit']))
{
    if(!empty($nom) && !empty($prenom) && !empty($commentaire))
    {
        if(isset($_POST['fastfood']))
        {
            echo '<br>Nom: '.htmlspecialchars($nom).'<br> Prénom: '.htmlspecialchars($prenom).'<br> Commentaire: '.$commentaire.'<br>'; 
            echo 'Pays: '.$_POST['pays'].'<br><br>';
            echo "Fast food préféré<br>";
            
            foreach($_POST['fastfood'] as $ff)
            {
                echo "$ff<br>";
            }

            if($_POST['choix']=="Oui")
            {
                echo "<br>Vous êtes étudiant";
            }
            else
            {
                echo "<br>Vous n'êtes pas étudiant";
            }

            //BDD
            $bdd=mysqli_connect('127.0.0.1','root','','mysqli');
            if($bdd)
            {
                echo "<br>Conexion réussie";
            }
            else
            {
                echo "<br>Erreur connexion";
            }

            $req=mysqli_prepare($bdd,'INSERT INTO mysqli_membres (nom, prenom, commentaire, pays, fastfood, etudiant) VALUES (?,?,?,?,?,?)');
            mysqli_stmt_bind_param($req, "ssssss", $nom, $prenom, $commentaire, $pays, $fastfood, $choix);
            mysqli_stmt_execute($req);
            mysqli_stmt_bind_result($req, $donnee['nom'], $donnee['prenom'], $donnee['commentaire'], $donnee['pays'], $donnee['fastfood'],$donnee['etudiant']);
            while(mysqli_stmt_fetch($req))
            {
                echo '<br>'.$donnee['nom'];
            }
            echo "<br>Envoyé";

        }
        else
        {
            echo "Vous devez choisir votre fast food préféré";
        }
    }
    else{
        echo "Vous devez saisir tous les champs";
    }

}
?>


Aidez moi svp merci
Merci

2 réponses

jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
30 mars 2019 à 17:51
Bonjour,

Tu fais un bind_result sur une requête INSERT .... normal que ça ne marche pas.


0
Alors c'est juste pour les SELECT ?
Et aussi quand j'ai testé sans le bind result c a d en s'arrêtant à mysqli_stmt_execute, les données n'ont pas été insérées dans la base de données. Du coup j'aimerai savoir d'où viens le problème
0
yg_be Messages postés 23230 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 septembre 2024 1 538 > lgslgs
Modifié le 31 mars 2019 à 14:26
bonjour, ne devrais-tu pas tester le résultat de mysqli_stmt_execute?
par ailleurs, que contient $choix?
0
jordane45 Messages postés 38241 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 septembre 2024 4 689
31 mars 2019 à 15:34
Bonjour,

je t'invite vivement à mettre en place une gestion des erreurs
https://www.php.net/manual/fr/mysqli-stmt.error.php

0