Partage
  • Partager sur Facebook
  • Partager sur Twitter

PHP et mySQL

    17 septembre 2019 à 15:09:12

    bonjour a tous, 

    j'ai crée un code PHP qui récupère des informations depuis un formulaire et qui les écrits dans une base de donnée.

    je n'est pas d'erreur, mais aucune données n'arrive dans la base de donnée. 

    pourriez-vous m'aidez svp?

    <?php
    
    $Nom = $_POST['Nom']; 
    $Prenom = $_POST['Prenom'];
    $Classe = $_POST['Classe'];
    $date_de_naissance = $_POST['date_de_naissance'];
    $Adresse_postale = $_POST['Adresse_postale'];
    $Adresse_mail_des_parents = $_POST['Adresse_mail_des_parents'];
    $Numero_de_telephone_des_parents = $_POST['Numero_de_telephone_des_parents'];
    $Numero_de_telephone_de_leleve = $_POST['Numero_de_telephone_de_leleve'];
    $Adresse_mail_de_leleve = $_POST['Adresse_mail_de_leleve'];
    $Projet_professionel = $_POST['Projet_professionel'];
    $Situation_familial = $_POST['Situation_familial'];
    
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=formulaire_de_rentre;charset=utf8', 'root', '');
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
    
    // On ajoute une entrée dans la table formulaire_de_renseignement.
    $req = $bdd->prepare("INSERT INTO formulaire_de_renseignement(Nom, Prenom, Classe,
     date_de_naissance, Adresse_postale, Adresse_mail_des_parents,
     Adresse_mail_de_leleve, Numero_des_parents, Numero_de_leleve, 
     Projet_professionnel, Situation_familial) VALUES('$Nom', '$Prenom', '$Classe',
     '$date_de_naissance', '$Adresse_postale',
     '$Adresse_mail_des_parents', '$Adresse_mail_de_leleve',
     '$Numero_de_telephone_des_parents', '$Numero_de_telephone_de_leleve',
     '$Projet_professionel, '$Situation_familial')");
    $req->execute(array(
    	'Nom' => $Nom,
    	'Prenom' => $Prenom,
    	'Classe' => $Classe,
    	'date_de_naissance' => $date_de_naissance,
    	'Adresse_postale' => $Adresse_postale,
    	'Adresse_mail_des_parents' => $Adresse_mail_des_parents,
    	'Numero_de_telephone_des_parents' => $Numero_de_telephone_des_parents,
    	'Numero_de_telephone_de_leleve' => $Numero_de_telephone_de_leleve,
    	'Adresse_mail_de_leleve' => $Adresse_mail_de_leleve,
    	'Projet_professionel' => $Projet_professionel,
    	'Situation_familial' => $Situation_familial,
    	));
    
    echo ('Le formulaire a bien était envoyé !');
      
    
    ?>



    • Partager sur Facebook
    • Partager sur Twitter
      17 septembre 2019 à 15:17:25

      Salut

      Active les erreurs PDO

      et pour faire des marqueurs nommés dans ta requête ce n'est pas $ qu'il faut mettre mais :.

      Tu as une parenthèse en trop à la fin de ta requête.  

      • Partager sur Facebook
      • Partager sur Twitter
        17 septembre 2019 à 15:17:34

        Bonjour à toi,

        Pour commencer la seule coloration syntaxique du moteur du forum ici te montre qu'il y a un erreur de syntaxe (oubli d'ouverture / fermeture de guillemet simple) ligne 32 '$Projet_professionel, '$Situation_familial')");

        Ensuite tu ne t'y prends pas de la bonne manière pour préparer la requête puis l'exécuter.

        Le principe est le suivant :

        • D'abord on prépare la requête, en n'indiquant AUCUNE valeur, mais en mettant des marqueurs dans l'ordre
          Exemple de la documentation (toujours revenir à la documentation...)
          https://www.php.net/manual/fr/pdo.prepare.php
          $sth = $dbh->prepare('SELECT nom, couleur, calories FROM fruit WHERE calories < ? AND couleur = ?');
          En effet si tu mets les valeurs brutes dans la requête dès la préparation, ça ne sert à rien... car les valeurs ne sont pas protégées... C'est plus facile que de mettre des marqueurs :nommés avec deux points, car ça évite de recopier 15 fois les noms de variable si c'est pas utile...

        • Ensuite on "binde" les paramètres, c'est à dire qu'on indique les données dans l'ordre où les marqueurs ont été mis
          Exemple de la documentation (toujours...)
          $sth->execute(array(150, 'rouge'));
          Tu en déduiras donc qu'on passe à l'exécution uniquement un array dans lequel on range l'ensemble des valeurs à envoyer à la requête, dans l'ordre où ont été mis les marqueurs.

        Et c'est fini. Adapté à ton propre script, ça donnera donc quelque chose comme...

        $req = $bdd->prepare("INSERT INTO formulaire_de_renseignement(Nom, Prenom, Classe, date_de_naissance, Adresse_postale, dresse_mail_des_parents, Adresse_mail_de_leleve, Numero_des_parents, Numero_de_leleve, Projet_professionnel, Situation_familial) VALUES(?, ?, ?, ?, .........");

        $req->execute(array($Nom, $Prenom, ........);

        On en déduit qu'il est inutile de changer les noms de variable en début de script (car ça te fait recopier des variables qui existent déjà pour rien alors que tu ne leurs appliques aucun traitement à l'occasion, donc autant les laisser en $_POST pour laisser visible le fait qu'elles sont "brutes" et pas encore "traitées" ce que fera la requête préparée plus tard ;)

        Voilà, amuse toi bien :)

        -
        Edité par Nicolas B 17 septembre 2019 à 15:20:29

        • Partager sur Facebook
        • Partager sur Twitter
        Nicolas - Développeur PHP qui bricole pas mal, utilisant Bootstrap, Materialize, MySQL et quelques astuces piochées par ci par là. Codeigniter a changé ma vie de codeur :D
          17 septembre 2019 à 15:40:07

          nicolas B,

          je suis débutant en PHP, et je ne comprend pas vraiment ce qu'ils expliquent dans le lien que tu as mis. 

          je ne comprend pas non plus ce que tu explique concernant la préparation des requêtes. 

          • Partager sur Facebook
          • Partager sur Twitter
            17 septembre 2019 à 15:45:26

            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.

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

            (titre originel : PHP et mySQL)

            Liens conseillés

            • Partager sur Facebook
            • Partager sur Twitter
              17 septembre 2019 à 15:45:50

              En gros pour faire simple

              Une requête préparée sert à protéger ta base des injections SQL, type d'attaque courante. Pour faire une requête préparée, c'est simple. Tu fais ta requête normale, mais au lieu d'entrer tes données brutes, tu mets des marqueurs. Deux types de marqueurs

              -> les Nommés (':toto')

              -> les non nommés, ça a ptet un autre nom mais comme je n'utilise que les nommés ...  (?)

              Ensuite tu bind tes valeurs avec tes marqueurs comme tu as fait et tu execute. Le système va faire son travail avec les bonnes données. 

              Ton erreur est donc comme dit plus haut une parenthèse fermante en trop, et remplacer tes '$' dans la partie VALUES de ta requête par des ":". 

              • Partager sur Facebook
              • Partager sur Twitter

              PHP et mySQL

              × 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