[RESOLU] Problème fonction execute PHP-MySQL

Eléphanteau du PHP | 17 Messages

20 févr. 2019, 20:03

Bonsoir,

Je viens à vous car j'ai un soucis, étudiant en BTS développement informatique, je vais me spécialisé dans la base de données, autant vous dires, du coup, que le PhP est là simplement pour m'aider lors de création nécessitant une jointure à ma base de données depuis un site web et que j'y suis totalement novice là dedans !

J'ai la chance d'avoir trouver un contrat étudiant pour géré la base de données d'une entreprise, celle-ci me demande aujourd'hui de créer et relier un formulaire à la base de données.

Problème, ma fonction execute() me pose mainte soucis ! J'ai en effet un message d'erreur apparent lors de l'envoie de mes données vers ma base :

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in D:\Xampp\htdocs\saisie.php on line 72

Voici le code :
<?php
        $bdd = new PDO('mysql:host=localhost;dbname=ma bdd=utf8', 'root', '');

          $requete = $bdd->prepare('INSERT INTO menuisier(FJ,RS,civilité,nom,adresse,adressebis,ville,cp,profession,portable,mail,telfix)
                                    VALUES(\'\',:FJ, :RS, :civilité, :nom, :adresse, :adressebis, :ville, :cp, :profession, :portable, :mail, :telfix)');

          $requete->bindValue(':FJ', $FJ, PDO::PARAM_STR);
          $requete->bindValue(':RS', $RS, PDO::PARAM_STR);
          $requete->bindValue(':civilité', $civilité, PDO::PARAM_STR);
          $requete->bindValue(':nom', $nom, PDO::PARAM_STR);
          $requete->bindValue(':adresse', $adresse, PDO::PARAM_STR);
          $requete->bindValue(':adressebis', $adressebis, PDO::PARAM_STR);
          $requete->bindValue(':ville', $ville, PDO::PARAM_STR);
          $requete->bindValue(':cp', $cp, PDO::PARAM_STR);
          $requete->bindValue(':profession', $profession, PDO::PARAM_STR);
          $requete->bindValue(':portable', $portable, PDO::PARAM_STR);
          $requete->bindValue(':mail', $mail, PDO::PARAM_STR);
          $requete->bindValue(':telfix', $telfix, PDO::PARAM_STR);

          $requete->execute(array(':FJ' => $FJ, ':RS' => $RS, ':civilité' => $civilité, ':nom' => $nom, ':adresse' => $adresse,
                                    ':adressebis' => $adressebis, ':ville' => $ville, ':cp' => $cp, ':profession' => $profession, ':portable' => $portable,':mail' => $mail, ':telfix' => $telfix));
      ?>



Merci de votre aide !
Cordialement.

Avatar du membre
Mammouth du PHP | 1609 Messages

20 févr. 2019, 20:18

Salut,

Je suis pas spécialiste de PDO mais déjà il ne me semble pas logique de faire des bindValue (à priori définir la valeur du paramètre) puis de passer les valeurs dans le execute. Je pense que c'est soit l'un soit l'autre et que l'erreur vient potentiellement de là.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 17 Messages

20 févr. 2019, 20:21

Salut,

Merci de ta réponse, mais en laissant le "execute()", je récupère le même WARNING ...

J'ai beau m'informé sur internet, je m'arrache les cheveux, je n'arrive pas à trouver le problème..

Avatar du membre
Mammouth du PHP | 1609 Messages

20 févr. 2019, 20:27

Ah en fait je crois que tu as 12 colonnes et 13 valeurs dans le INSERT puisque tu ajoutes un '' en première valeur.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 17 Messages

20 févr. 2019, 20:33

Parle-tu de ceci ?
VALUES(\'\',
En l'enlevant, le problème persiste, ça n'a rien à faire là d'ailleurs #-o

Avatar du membre
Mammouth du PHP | 1609 Messages

20 févr. 2019, 20:44

Ben à priori ça devrait fonctionner...
$bdd = new PDO('mysql:host=localhost;dbname=ma bdd=utf8', 'root', '');

$requete = $bdd->prepare('
INSERT INTO menuisier
	( FJ,  RS,  civilite,  nom,  adresse,  adressebis,  ville,  cp,  profession,  portable,  mail,  telfix)
VALUES
	(:FJ, :RS, :civilite, :nom, :adresse, :adressebis, :ville, :cp, :profession, :portable, :mail, :telfix)
');

$requete->bindValue(':FJ', $FJ);
$requete->bindValue(':RS', $RS);
$requete->bindValue(':civilite', $civilite);
$requete->bindValue(':nom', $nom);
$requete->bindValue(':adresse', $adresse);
$requete->bindValue(':adressebis', $adressebis);
$requete->bindValue(':ville', $ville);
$requete->bindValue(':cp', $cp);
$requete->bindValue(':profession', $profession);
$requete->bindValue(':portable', $portable);
$requete->bindValue(':mail', $mail);
$requete->bindValue(':telfix', $telfix);

$requete->execute();

PS : peut être évites les accents dans les noms de variables. Et c'est pas indispensable de passer le troisième paramètre sur les bindValue si tu mets la valeur par défaut.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 17 Messages

21 févr. 2019, 19:02

Bonsoir,
Excusez-moi de ma réponse tardive, je travail sur un pc de l'entreprise et donc n'ai pas accès au code depuis chez moi, je n'ai pas pensé à prendre l'index complet..

J'ai essayé votre méthode, sans accent, et en enlevant le troisième paramètre, sans succès toujours le même message d'erreur..

Cordialement

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 févr. 2019, 19:14

Salutations !

Peux-tu poster ton code actualisé pour savoir ce qui a été modifié ou pas ?

Les variables $FJ, $RS, $civilite, etc. que tu utilises dans les bind sont bien définies en amont dans ton code ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 17 Messages

21 févr. 2019, 20:09

Bonsoir,

Voici mon code complet du formulaire :
<!doctype html>
<html>
    <head>
      <title>Ma page d'accueil</title>
    </head>
    <body>
        <h1>Bienvenue sur le formulaire d'inscription de données </h1>
        <h2>Commencez-donc par vous inscrire :</h2>
        <form name="inscription" method="post" action="saisie.php">
            Entrez votre type d'entreprise : <input type="text" name="FJ"/><br/><br/>
            Entrez votre nom d'entreprise : <input type="text" name="RS"/> <br/><br/>
            Entrez votre civilite : <input type="text" name="civilite"/> <br/><br/>
            Entrez votre nom & prénom : <input type="text" name="nom"/> <br/><br/>
            Entrez votre adresse : <input type="text" name="adresse"/> <br/><br/>
            Entrez votre adresse bis, ou mettre "NULL" si vous n'en avez pas ! : <input type="text" name="adressebis"/> <br/><br/>
            Entrez votre ville : <input type="text" name="ville"/><br/><br/>
            Entrez votre code postal : <input type="text" name="cp"/> <br/><br/>
            Entrez votre profession : <input type="text" name="profession"/> <br/><br/>
            Entrez votre numéro de téléphone portable : <input type="text" name="portable"/> <br/><br/>
            Entrez votre mail : <input type="text" name="mail"/> <br/><br/>
            Entrez votre numéro de téléphone fixe : <input type="text" name="telfix"/> <br/><br/>
            Merci de cliquer sur :
            <input type="submit" name="valider" value="Tester les données"/>
        </form>
        <?php
          if(isset($_POST['valider'])){
            $FJ=$_POST['FJ'];
            $RS=$_POST['RS'];
            $civilite=$_POST['civilite'];
            $nom=$_POST['nom'];
            $adresse=$_POST['adresse'];
            $adressebis=$_POST['adressebis'];
            $ville=$_POST['ville'];
            $cp=$_POST['cp'];
            $profession=$_POST['profession'];
            $portable=$_POST['portable'];
            $mail=$_POST['mail'];
            $telfix=$_POST['telfix'];

              if ($_POST['valider']=="Tester les données") {
              if (($nom=="")||($mail=="")||($portable=="")){
              if($nom=="") print("Veuillez saisir le nom de l'utilisateur<BR>\n");
              if($mail=="") print("Veuillez saisir le mail de l'utilisateur<BR>\n");
              if($portable=="") print("Veuillez saisir le numéro de portable de l'utilisateur<BR>\n");

              }

              else {
              echo "Les informations saisis sont correct," ;
            }
            }
          }
              ?>
              <input type="submit" name="Envoye" value="Envoyer sur la base de données"/>
          <?php


          if ($_POST['Envoye']=="Envoyer sur la base de données"){
          echo '<br/> Voici les données que vous avez enregistré : <br/>
          Le type de votre entreprise est : '. $FJ.'<br/>
          Le nom de votre entreprise est : '. $RS.'<br/>
          Votre civilité est : '. $civilite.' <br/>
          Votre nom et prénom sont : '. $nom.' <br/>
          Votre adresse est : '. $adresse.' <br/>
          Votre adresse bis est : '.$adressebis.' <br/>
          Votre ville est : '. $ville.' <br/>
          Votre code postal est : '. $cp.' <br/>
          Votre profession est : '. $profession.' <br/>
          Votre numéro de téléphone portable est le : '. $portable.' <br/>
          Votre mail est : '. $mail.' <br/>
          Votre numéro de téléphone fixe est le : '. $telfix.' <br/>' ;
          }
            $bdd = new PDO('mysql:host=localhost;dbname=ma bdd;charset=utf8', 'root', '');

              $requete = $bdd->prepare('INSERT INTO menuisier(FJ,RS,civilité,nom,adresse,adressebis,ville,cp,profession,portable,mail,telfix)
                                        VALUES(:FJ, :RS, :civilite, :nom, :adresse, :adressebis, :ville, :cp, :profession, :portable, :mail, :telfix)');

              $requete->bindValue(':FJ', $FJ);
              $requete->bindValue(':RS', $RS);
              $requete->bindValue(':civilité', $civilite);
              $requete->bindValue(':nom', $nom);
              $requete->bindValue(':adresse', $adresse);
              $requete->bindValue(':adressebis', $adressebis);
              $requete->bindValue(':ville', $ville);
              $requete->bindValue(':cp', $cp);
              $requete->bindValue(':profession', $profession);
              $requete->bindValue(':portable', $portable);
              $requete->bindValue(':mail', $mail);
              $requete->bindValue(':telfix', $telfix);

              $requete->execute();
      ?>

    </body>
</html>

J'ai continué à travailler dessus, notamment rajouter quelques fonctionnalités, mais je bloque également sur cette partie :
if ($_POST['valider']=="Tester les données") {
              if (($nom=="")||($mail=="")||($portable=="")){
              if($nom=="") print("Veuillez saisir le nom de l'utilisateur<BR>\n");
              if($mail=="") print("Veuillez saisir le mail de l'utilisateur<BR>\n");
              if($portable=="") print("Veuillez saisir le numéro de portable de l'utilisateur<BR>\n");

              }

              else {
              echo "Les informations saisis sont correct," ;
            }
            }
          }
              ?>
              <input type="submit" name="Envoye" value="Envoyer sur la base de données"/>
Je voudrais que mon input s'afficher uniquement avec le "Else" mais comme je ne peux pas inclure de input dans un php, faut'il que je lui définisse une ID/Fonction et que j'appel celle-ci ?

Eléphant du PHP | 53 Messages

22 févr. 2019, 04:22

Salut

Image

a+
Pourquoi faire simple quand on peut faire compliqué ?

Eléphanteau du PHP | 17 Messages

23 févr. 2019, 09:11

Salut,
Je m'excuse de ma réponse tardive, je ne travail pas le Vendredi..

Du coup, non, "civilité" est le nom de mon champ sur MySQL, si je ne mets pas l'accent cela ne fonctionnera pas...
J'ai quand même testé, mais cela ne règle pas le problème.

En revanche, je viens de trouver l'erreur, un simple "é" effectivement qui me fais lutter depuis le début de semaine, mais il s'agit de celui dans une variable qui est revenu..


Merci encore de votre aide !
Bon week-end ! :)