Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec BDD SQL

    12 octobre 2021 à 19:42:36

    Salut tout le monde, 

    je suis en train de créer un formulaire pour de la facturation "DIY". J'ai donc une page avec ce fameux formulaire qui doit stocker les informations de celui-ci dans une BDD; problème, quand le formulaire est envoyé aucune erreur, seulement rien n'est visible dans la BDD. J'ai beau tourner le problème dans tous les sens je ne vois pas d'où ça vient.

    Voici le code PHP : 

    <?php
    
    try
            {
                $bdd = new PDO('mysql:host=localhost;dbname=facture;charset=utf8', 'root', '');
            }
            catch(Exception $e)
            {
                    die('Erreur : '.$e->getMessage());
            }
    
    //vérification envoie formulaire
    if(!empty($_POST))
    {
        if (isset($_POST["no_facture"], $_POST["date_facture"], $_POST["nom_client"], $_POST["raison_client"], $_POST["siren"], $_POST["adresse_client"], $_POST["cp_client"], $_POST["ville_client"], $_POST["tel_client"], $_POST["libelle"], $_POST["prixht"]) && !empty($_POST["no_facture"]) && !empty($_POST["date_facture"]) && !empty($_POST["nom_client"]) && !empty($_POST["raison_client"]) && !empty($_POST["siren"]) && !empty($_POST["adresse_client"]) && !empty($_POST["cp_client"]) && !empty($_POST["ville_client"]) && !empty($_POST["tel_client"]) && !empty($_POST["libelle"]) && !empty($_POST["prixht"]))
        {
            //Formulaire complet
            //Récupération des données
            $un = strip_tags($_POST['no_facture']);
            $deux = strip_tags($_POST['date_facture']);
            $trois = strip_tags($_POST['nom_client']);
            $quatre = strip_tags($_POST['raison_client']);
            $cinq = strip_tags($_POST['siren']);
            $six = strip_tags($_POST['adresse_client']);
            $sept = strip_tags($_POST['cp_client']);
            $huit = strip_tags($_POST['ville_client']);
            $neuf = strip_tags($_POST['tel_client']);
            $dix = strip_tags($_POST['libelle']);
            $onze = strip_tags($_POST['prixht']);
    
            //Enregistrement en BDD
    
            $sql = "INSERT INTO 'informations_client'('nofacture','datefacture','nomclient', 'raisonclient', 'siren', 'adresseclient', 'cpclient', 'villeclient', 'telclient', 'libelle', 'prixht') VALUES(:un, :deux, :trois, :quatre, :cinq, :six, :sept, :huit, :neuf, :dix, :onze)";
    
            $query = $bdd->prepare($sql);
    
            $query->bindValue(":un", $un, PDO::PARAM_STR);
            $query->bindValue(":deux", $deux, PDO::PARAM_STR);
            $query->bindValue(":trois", $trois, PDO::PARAM_STR);
            $query->bindValue(":quatre", $quatre, PDO::PARAM_STR);
            $query->bindValue(":cinq", $cinq, PDO::PARAM_STR);
            $query->bindValue(":six", $six, PDO::PARAM_STR);
            $query->bindValue(":sept", $sept, PDO::PARAM_STR);
            $query->bindValue(":huit", $huit, PDO::PARAM_STR);
            $query->bindValue(":neuf", $neuf, PDO::PARAM_STR);
            $query->bindValue(":dix", $dix, PDO::PARAM_STR);
            $query->bindValue(":onze", $onze, PDO::PARAM_STR);
    
            $query->execute();
    
            $sql1 = "SELECT (nofacture) FROM (informations_client)";
    
            $query = $bdd->prepare($sql1);
    
            echo "$sql";
    
        }
        else
        {
            die("Le formulaire n'est pas complet");
        }
    }
    
            
    ?>

    • Partager sur Facebook
    • Partager sur Twitter
      12 octobre 2021 à 19:48:41

      bonsoir,

      en même temps, a moins d'avoir php8, les erreurs de PDO ne s'affichent pas (cf signature)

      a ligne 15, enlève tous les "isset" car cette fonction est comprise dans la fonction "empty"

      sympa pour débuguer tes "un, deux, trois..." il plus judicieux de mettre le même nom pour le marqueur que pour le nom du champs

      a quoi sert la ligne 53 ? d'ailleurs pas besoin de la préparer et si tu garde ce code, il faut l'exécuter

      on peut avoir le formulaire ?

      tu es sur de rentrer dans les lignes 17 et Cie ?

      -
      Edité par Aurélien10! 12 octobre 2021 à 20:26:13

      • Partager sur Facebook
      • Partager sur Twitter
        12 octobre 2021 à 20:04:37

        Ni les noms des tables ni les noms des colonnes ne s'entourent de ' ! Les erreurs PDO ne sont forcément pas actives pour ne pas avoir eu une erreur SQL pour l'indiquer (à moins vraiment qu'un des if soient faux).

        -
        Edité par julp 12 octobre 2021 à 20:05:36

        • Partager sur Facebook
        • Partager sur Twitter
          12 octobre 2021 à 20:05:40

          Voici le formulaire (il est très archaïque visuellement parlant pour le moment) et son code :
          <form method="POST" action="">
              <p class="formulaire">
                  <label>N° Facture</label> : <input type="text" name="no_facture" />
                  <label>Date de facturation</label> : <input type="text" name="date_facture" />
                  <label>Nom du client</label> : <input type="text" name="nom_client" />
                  <label>Raison sociale</label> : <input type="text" name="raison_client" />
                  <label>N° SIREN</label> : <input type="text" name="siren" />
                  <label>Adresse</label> : <input type="text" name="adresse_client" />
                  <label>code postal</label> : <input type="text" name="cp_client" />
                  <label>Ville</label> : <input type="text" name="ville_client" />
                  <label>Téléphone</label> : <input type="text" name="tel_client" />
                  <label>libellé de la prestation</label> : <input type="text" name="libelle" />
                  <label>Prix HT</label> : <input type="text" name="prixht" />
                  <input type="submit" name="Envoyer">
              </p>
          </form>
          Les "un, deux..." j'ai mis ça car c'est juste un test même si je sais que c'est rapidement le bourbier. Je vais tester ce que tu m'as dit. Je suis de nouveau débutant car ayant arrêté de coder il y a pas mal d'années donc je me refais la main et tout n'est pas aussi logique pour moi.
          • Partager sur Facebook
          • Partager sur Twitter
            12 octobre 2021 à 20:25:47

            c'est pas faute de le répéter sur tous les sujets où "les données ne s'insèrent pas"
            • Partager sur Facebook
            • Partager sur Twitter
              12 octobre 2021 à 20:26:50

              J'ai exactement fait ce que tu m'as conseillé et maintenant des erreurs au niveau des virgules après avoir retiré tous les isset toujours sur la même ligne. J'voue que je n'y comprends plus rien..
              • Partager sur Facebook
              • Partager sur Twitter
                12 octobre 2021 à 20:29:05

                sans code, difficile de bien vérifier que tu as appliqué ce que nous t'avons expliqué
                • Partager sur Facebook
                • Partager sur Twitter
                  12 octobre 2021 à 20:33:33

                  Voilà le code :

                  <?php
                  
                  try
                          {
                              $bdd = new PDO('mysql:host=localhost;dbname=facture;charset=utf8', 'root', '');
                          }
                          catch(Exception $e)
                          {
                                  die('Erreur : '.$e->getMessage());
                          }
                  
                  //vérification envoie formulaire
                  if(!empty($_POST))
                  {
                      if (($_POST["no_facture"], $_POST["date_facture"], $_POST["nom_client"], $_POST["raison_client"], $_POST["siren"], $_POST["adresse_client"], $_POST["cp_client"], $_POST["ville_client"], $_POST["tel_client"], $_POST["libelle"], $_POST["prixht"]) && !empty($_POST["no_facture"]) && !empty($_POST["date_facture"]) && !empty($_POST["nom_client"]) && !empty($_POST["raison_client"]) && !empty($_POST["siren"]) && !empty($_POST["adresse_client"]) && !empty($_POST["cp_client"]) && !empty($_POST["ville_client"]) && !empty($_POST["tel_client"]) && !empty($_POST["libelle"]) && !empty($_POST["prixht"]))
                      {
                          //Formulaire complet
                          //Récupération des données
                          $un = strip_tags($_POST['no_facture']);
                          $deux = strip_tags($_POST['date_facture']);
                          $trois = strip_tags($_POST['nom_client']);
                          $quatre = strip_tags($_POST['raison_client']);
                          $cinq = strip_tags($_POST['siren']);
                          $six = strip_tags($_POST['adresse_client']);
                          $sept = strip_tags($_POST['cp_client']);
                          $huit = strip_tags($_POST['ville_client']);
                          $neuf = strip_tags($_POST['tel_client']);
                          $dix = strip_tags($_POST['libelle']);
                          $onze = strip_tags($_POST['prixht']);
                  
                          //Enregistrement en BDD
                  
                          $sql = "INSERT INTO 'informations_client'('nofacture','datefacture','nomclient', 'raisonclient', 'siren', 'adresseclient', 'cpclient', 'villeclient', 'telclient', 'libelle', 'prixht') VALUES(:un, :deux, :trois, :quatre, :cinq, :six, :sept, :huit, :neuf, :dix, :onze)";
                  
                          $query = $bdd->prepare($sql);
                  
                          $query->bindValue(":un", $un, PDO::PARAM_STR);
                          $query->bindValue(":deux", $deux, PDO::PARAM_STR);
                          $query->bindValue(":trois", $trois, PDO::PARAM_STR);
                          $query->bindValue(":quatre", $quatre, PDO::PARAM_STR);
                          $query->bindValue(":cinq", $cinq, PDO::PARAM_STR);
                          $query->bindValue(":six", $six, PDO::PARAM_STR);
                          $query->bindValue(":sept", $sept, PDO::PARAM_STR);
                          $query->bindValue(":huit", $huit, PDO::PARAM_STR);
                          $query->bindValue(":neuf", $neuf, PDO::PARAM_STR);
                          $query->bindValue(":dix", $dix, PDO::PARAM_STR);
                          $query->bindValue(":onze", $onze, PDO::PARAM_STR);
                  
                          $sql = "SELECT (nofacture) FROM (informations_client)";
                  
                          $query->execute();
                  
                  
                  
                      }
                      else
                      {
                          die("Le formulaire n'est pas complet");
                      }
                  }
                  
                          
                  ?>

                  J'essaie de comprendre mes erreurs, tout n'est pas clair pour moi, même avec tous les tutos et cours en ligne. J'essaie juste de faire bien et de demander de l'aide à des personnes qui peuvent m'en apporter ; la condescendance sans pédagogie ne m'est pas plus utile ;)

                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 octobre 2021 à 20:49:09

                    quand je parlais de "supprimer" isset, cela veut dire, tout ce qui concerne isset et non juste le mot "isset" de ton code

                    julp a écrit:

                    Ni les noms des tables ni les noms des colonnes ne s'entourent de ' ! Les erreurs PDO ne sont forcément pas actives pour ne pas avoir eu une erreur SQL pour l'indiquer (à moins vraiment qu'un des if soient faux).

                    -
                    Edité par julp il y a 40 minutes


                    tu n'as pas tenu compte de ceci non plus

                    sans compter que les erreurs PDO ne sont toujours pas activés.

                    Donc relis TOUT nos messages pour bien les appliquer.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 octobre 2021 à 21:03:36

                      Donc je dois supprimer tout ce qui est dans les parenthèses du "if"  jusqu'au "!empty" ?

                      En appliquant tout ça me donnerait donc ça :

                      //vérification envoie formulaire
                      if(!empty($_POST))
                      {
                          if (empty($_POST["no_facture"]) && !empty($_POST["date_facture"]) && !empty($_POST["nom_client"]) && !empty($_POST["raison_client"]) && !empty($_POST["siren"]) && !empty($_POST["adresse_client"]) && !empty($_POST["cp_client"]) && !empty($_POST["ville_client"]) && !empty($_POST["tel_client"]) && !empty($_POST["libelle"]) && !empty($_POST["prixht"]))
                          {
                              //Formulaire complet
                              //Récupération des données
                              $un = strip_tags($_POST['no_facture']);
                              $deux = strip_tags($_POST['date_facture']);
                              $trois = strip_tags($_POST['nom_client']);
                              $quatre = strip_tags($_POST['raison_client']);
                              $cinq = strip_tags($_POST['siren']);
                              $six = strip_tags($_POST['adresse_client']);
                              $sept = strip_tags($_POST['cp_client']);
                              $huit = strip_tags($_POST['ville_client']);
                              $neuf = strip_tags($_POST['tel_client']);
                              $dix = strip_tags($_POST['libelle']);
                              $onze = strip_tags($_POST['prixht']);
                      
                              //Enregistrement en BDD
                      
                              $sql = "INSERT INTO informations_client(nofacture,datefacture,nomclient, raisonclient, siren, adresseclient, cpclient, villeclient, telclient, libelle, prixht) VALUES(:un, :deux, :trois, :quatre, :cinq, :six, :sept, :huit, :neuf, :dix, :onze)";
                      
                              $query = $bdd->prepare($sql);
                      
                              $query->bindValue(":un", $un, PDO::PARAM_STR);
                              $query->bindValue(":deux", $deux, PDO::PARAM_STR);
                              $query->bindValue(":trois", $trois, PDO::PARAM_STR);
                              $query->bindValue(":quatre", $quatre, PDO::PARAM_STR);
                              $query->bindValue(":cinq", $cinq, PDO::PARAM_STR);
                              $query->bindValue(":six", $six, PDO::PARAM_STR);
                              $query->bindValue(":sept", $sept, PDO::PARAM_STR);
                              $query->bindValue(":huit", $huit, PDO::PARAM_STR);
                              $query->bindValue(":neuf", $neuf, PDO::PARAM_STR);
                              $query->bindValue(":dix", $dix, PDO::PARAM_STR);
                              $query->bindValue(":onze", $onze, PDO::PARAM_STR);
                      
                             $sql = "SELECT (nofacture) FROM (informations_client)";
                      
                              $query->execute();
                      
                      
                          }
                          else
                          {
                              die("Le formulaire n'est pas complet");
                          }
                      }



                      • Partager sur Facebook
                      • Partager sur Twitter
                        12 octobre 2021 à 21:17:10

                        Et tu obtiens quoi ?

                        Les erreurs PDO sont activées maintenant parce que tu redonnes ton code sans la connexion.

                        > if (empty($_POST["no_facture"])

                        Le ! est passé à l'as, non ?

                        > $sql = "SELECT (nofacture) FROM (informations_client)";

                        Pas de quoi vérifier sous le coude mais je doute que MySQL aime les parenthèses, si encore cette requête est exécutée quelque part.

                        Les strip_tags, ce n'est pas vraiment l'idée du siècle : s'il y a un <, ça tronque la chaîne ...

                        > php -r 'var_dump(strip_tags("abc<def"));'

                        > string(3) "abc"

                        Oups.

                        Autant utiliser des marqueurs positionnels (?) que de les appeler un, deux, ..., onze franchement. Aussi bindvalue n'apporte pas grand chose si ce n'est rien par rapport à des binds via PDOStatement::execute ici mais tout dépend quelle syntaxe est préférée.

                        PS : et vive ce forum encore et toujours totalement daubé (ça fait combien d'années maintenant, j'ai perdu le compte ?) où un < dans le code rend tout ton post illisible ...

                        -
                        Edité par julp 12 octobre 2021 à 21:27:58

                        • Partager sur Facebook
                        • Partager sur Twitter
                          12 octobre 2021 à 21:40:14

                          Ca marche !

                          J'ai effectivement corrigé le 

                          if (empty($_POST["no_facture"])

                          Ca marche mieux avec la bonne syntaxe. Pour les marqueurs positionnels je comprends mal leurs fonctionnements et avec ce que j'ai lu et regardé j'ai réussi à construire ce bout de code.

                          En tout cas merci à vous tous pour toute votre aide et je manquerai pas de vous en redemander (dans pas si lonptemps que ça je pense d'ailleurs ahah)

                          • Partager sur Facebook
                          • Partager sur Twitter
                            12 octobre 2021 à 21:52:50

                            <aside>

                            PS : et vive ce forum encore et toujours totalement daubé (ça fait combien d'années maintenant, j'ai perdu le compte ?) où un < dans le code rend tout ton post illisible ...

                            A peine plus de 4 ans, je pensais que c'était plus vieux…
                            </aside>

                            • Partager sur Facebook
                            • Partager sur Twitter
                              12 octobre 2021 à 21:59:53

                              Ymox a écrit:

                              <aside>

                              PS : et vive ce forum encore et toujours totalement daubé (ça fait combien d'années maintenant, j'ai perdu le compte ?) où un < dans le code rend tout ton post illisible ...

                              A peine plus de 4 ans, je pensais que c'était plus vieux…
                              </aside>


                              Merci pour le rappel.

                              Ah, ouais, quand même, je voyais ça moins vieux personnellement, ça ne fait QUE 4 ans ! J'aurais presque envie de marquer les 5 en leur envoyant un gâteau d'anniversaire ...

                              -
                              Edité par julp 12 octobre 2021 à 22:06:58

                              • Partager sur Facebook
                              • Partager sur Twitter
                                13 octobre 2021 à 8:11:44

                                Bonjour,

                                Mauvais titre

                                Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.

                                Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).

                                De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.

                                Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.

                                Merci de modifier votre titre. Pour cela, éditez le premier message de votre sujet.

                                (titre originel : Problème avec BDD SQL)

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Pas d'aide concernant le code par MP, le forum est là pour ça :)

                                Problème avec BDD SQL

                                × 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