Partage
  • Partager sur Facebook
  • Partager sur Twitter

Insérer des data dans une BDD depuis un formulaire

    1 mai 2019 à 17:55:01

    Bonjour,

    Je sollicite votre aide car j'ai un petit problème avec le script PHP que j'ai développé. Alors j'ai mis en place un formulaire HTML où on doit renseigner le nom, prénom etc..

    Et j'aimerais que toutes ces informations aillent directement au niveau de ma base de données. Mais je n'y arrive pas et je n'arrive pas à trouver mon erreur non plus.

    Si vous pouviez me faire un retour s'il vous plait histoire que je puisse terminer mon projet au plus vite (je suis en stage).

    Voici mon code :

    • Partager sur Facebook
    • Partager sur Twitter
      1 mai 2019 à 18:05:28

      Bonjour,

      Les fonctions "mysql_*" sont obsolètes et supprimées depuis php 7.0.

      Tourne-toi vers PDO ou mysqli

      Et il manque des ' dans les index de $_POST

      • Partager sur Facebook
      • Partager sur Twitter
        1 mai 2019 à 20:25:41

        et le code est mieux qu'une image ;)
        • Partager sur Facebook
        • Partager sur Twitter
          2 mai 2019 à 10:35:12

          Bonsoir,

          Me voila de retour Lol !

          Aprés avoir suivi les tutos, j'ai par la suite installé le serveur WAMP et créé ma base de données sous PHPMyadmin.

          Sur mon éditeur de texte notepad++, j'ai développé mon script PHP avec l'extension PDO (comme vous m'aviez conseillé de le faire) mais jusqu'a présent je n'arrive pas à insérer des données au sein de ma base de données (Pas faute d'avoir essayé !!)

          Voici le code :

          <?php
          try
            {
          //Connexion à MYSQL via PDO sur la base cbb
          $bdd = new PDO(mysql:host=localhost;dbname=cbb charset=utf8', 'root', '', array(PDO::ATTR_ERRMODEXCEPTION));
            }
          catch(Exception $e)
           {
          
          //En cas d'erreur, on affiche un message et on arrête tout
          die('Erreur : '.$e->getMessage());
          
          //Insertion de la requête SQL 
          
          $req = $bdd->prepare('INSERT INTO cbb VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)')
          $req->execute(array($_POST['Nom'], $_POST['Prénom'], $_POST['Statut'], $_POST['Date de Naissance'], $_POST{Date Adhésion'], $_POST['Durée Adhésion'], $_POST['Email'], $_POST['Sexe'], $_POST['Numéro Téléphone']));
          
          ?>
          

          -
          Edité par AminataSy8 2 mai 2019 à 21:38:46

          • Partager sur Facebook
          • Partager sur Twitter
            5 mai 2019 à 13:31:20

            Bonjour,

            Heho ! Y a quelqu'un ??:o

            Si vous pouviez m'aider à trouver mon erreur, je vous en serai vraiment reconnaissante.

            Merci et Bonne journée !

            • Partager sur Facebook
            • Partager sur Twitter
              5 mai 2019 à 13:44:11

              Bonjour,

              Tu ne donnes pas assez d'infos (que fais ton code, des errreurs ?), mais il y a déjà un problème dans ta connexion (manque un point-virgule).

              Ensuite, dans ta requête, il faut nommer les colonnes concernées (à moins que ta table soit mal conçue et qu'on ait là toutes les colonnes, mais de toute façon c'est à éviter).

              • Partager sur Facebook
              • Partager sur Twitter
                5 mai 2019 à 15:46:11

                Sans parler des accents sur les noms de champs de $_POST
                • Partager sur Facebook
                • Partager sur Twitter
                  6 mai 2019 à 17:02:49

                  Bonjour,

                  Pour vous répondre : Après avoir rempli le formulaire et cliqué sur le bouton "Ajouter", je suis redirigée vers une page (cbb.php) où il y a l'intégralité de mon code PHP (celui qui est juste au dessus).

                  Or ce n'est pas cela l'objectif malheureusement:(.

                  @philodick : J'ai nommé les colonnes concernées comme tu me l'as conseillé mais toujours la même erreur. Et pourrais tu stp me dire où manque le point-virgule ?

                  @christouphe : J'ai enlevé les accents sur les noms de champs de $_POST mais toujours la même erreur lol

                  Merci et j'attends vos retours  s'il vous plait :ange:

                  • Partager sur Facebook
                  • Partager sur Twitter
                    6 mai 2019 à 17:05:58

                    Entre "dbname=cbb" et "charset=utf8".

                    Et si tu as une erreur... donne-là !

                    • Partager sur Facebook
                    • Partager sur Twitter
                      6 mai 2019 à 17:06:33

                      AminataSy8 a écrit:

                      @philodick : J'ai nommé les colonnes concernées comme tu me l'as conseillé mais toujours la même erreur. Et pourrais tu stp me dire où manque le point-virgule ?


                      lis l'erreur elle te la donne la ligne ET le nom du script

                      EDIT: ah oui, celle là non ^^

                      -
                      Edité par christouphe 6 mai 2019 à 17:07:06

                      • Partager sur Facebook
                      • Partager sur Twitter
                        6 mai 2019 à 21:23:21

                        Et sinon on ne met pas le code dans la partie "catch" du try-catch

                        Remontre nous le code avec les modifications demandés

                        • Partager sur Facebook
                        • Partager sur Twitter
                          7 mai 2019 à 15:44:59

                          bonjour, Bonjour:)

                          Voici mon code php un peu revisité (même si ça ne change pas grand chose lol):

                          <?php
                          try
                          {
                          //connexion à Mysql via PDO sur la base cyber
                          $bdd = new PDO('mysql:host=localhost;dbname=cyber;charset=utf8', 'root', '', [
                          PDO::ATTR_ERRMODE      =>PDO::ERRMODE_EXCEPTION,
                          PDO::ATTR_EMULATE_PREPARES  => false
                          ]);
                          }
                          catch(Exception $e)
                          {
                          
                          //En cas d'erreur, on affiche un message et on arrête tout
                          die('Erreur : '.$e->getMessage());
                          }
                          
                          $insert = $bdd->prepare('INSERT INTO cyber (Nom, Prénom, Statut, Date_de_Naissance, Date_Adhésion, Durée_Adhésion, Email, Sexe, Numéro_Téléphone) VALUES (:Nom, :Prénom, :Statut, :Date_de_Naissance, :Date_Adhésion, :Durée_Adhésion, :Email, :Sexe, :Numéro_Téléphone)');
                          
                          $insert->execute(array('Nom' => $_POST['Nom'], 'Prénom' => $_POST['Prénom'], 'Statut' => $_POST['Statut'], 'Date_de_Naissance' => $_POST['Date_de_Naissance'], 'Date_Adhésion' => $_POST['Date_Adhésion'], 'Durée_Adhésion' => $_POST['Durée_Adhésion'], 'Email' => $_POST['Email'], 'Sexe' => $_POST['Sexe'], 'Numéro_Téléphone' => $_POST['Numéro_Téléphone']));
                          
                          ?>    


                          Aprés avoir rempli mon formulaire html, je suis redirigée vers la page cbb.php, au niveau du navigateur, où il y a l'intégralité de mon code ci-dessus (ce qui n'est pas normal) et après consultation de ma base de données, il n'y a rien dans celle-ci bien évidemment:colere:

                          Je ne reçois aussi pas de message d'erreur même après avoir activé les erreurs PDO. Ce qui n'est pas normal encore une fois de plus lol !

                          P.S : Est ce normal lorsque je tape l'URL http://localhost/cbb.php, on me sort 404 Not Found et truc du genre ??

                          Merciiiii

                          -
                          Edité par AminataSy8 7 mai 2019 à 15:46:17

                          • Partager sur Facebook
                          • Partager sur Twitter
                            16 mai 2019 à 20:53:16

                            Bonjour Bonjour:)

                            Vous savez j'attends toujours vos réponses mine de rien:-°:).

                            Si vous pouviez me répondre, cela m'aiderait énormément.

                            Merci à vous !

                            • Partager sur Facebook
                            • Partager sur Twitter
                              16 mai 2019 à 22:14:48

                              D'après ce qu'il a dis plus haut, si . Mais je pense qu'il ne passe pas par http://localhost/ :)

                              Edit: Visiblement, si.

                              -
                              Edité par Koyuki Tanaka 16 mai 2019 à 22:19:49

                              • Partager sur Facebook
                              • Partager sur Twitter
                                16 mai 2019 à 22:19:02

                                Bonsoir, et il me semble qu'on ta dit de ne pas mettre de caractères accentués dans les noms de table, ni de variables
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  16 mai 2019 à 23:02:55

                                  > il me semble qu'on ta dit de ne pas mettre de caractères accentués dans les noms de table, ni de variables

                                  Ceux des colonnes ne sont pas véritablement un problème tant que le fichier est bien encodé en UTF-8 vu qu'il déclare le jeu de caractères de la connexion PDO/MySQL. Ceux qui ne passeront pas surtout, ce sont au niveau des marqueurs.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    17 mai 2019 à 1:36:03

                                    Bonjour.

                                    Ceux des colonnes ne sont pas véritablement un problème tant que le fichier est bien encodé en UTF-8 vu qu'il déclare le jeu de caractères de la connexion PDO/MySQL.

                                    Au contraire, c'est un problème de mettre des accents ou autres caractères spéciaux dans les noms de colonnes, l'encodage sert uniquement pour les valeurs.

                                    Et puis ça n'a aucun sens de mettre des accents et caractères spéciaux (hormis le underscore) pour les noms de colonnes étant donné que ce n'est pas le genre de chose que l'on compte afficher.

                                    -
                                    Edité par Lartak 17 mai 2019 à 1:36:46

                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

                                      17 mai 2019 à 2:03:30

                                      Ecoute, lis la doc de MySQL, fais le test et on en reparle ... Tous les identificateurs MySQL (noms de colonnes, tables, etc) sont "en interne" en UTF-8 et même si le script n'était pas encodé en UTF-8, puisque le jeu de la connexion est indiqué, et c'est là tout son but, ça permet à MySQL de les convertir si besoin au même titre que les données.

                                      Note que j'ai dit que c'était parfaitement possible, je n'en suis pas à en encourager la pratique (chose que j'évite aussi comme 99% des gens).

                                      Par contre, les marqueurs, sûr et certain que ça ne passe pas : le parser intégré à PDO n'attend que des lettres ASCII pour ceux-ci, il reconnaîtrait encore moins les lettres encodées en UTF-8 (codées sur 2 octets ou plus pour commencer).

                                      -
                                      Edité par julp 17 mai 2019 à 2:35:29

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        20 mai 2019 à 13:22:08

                                        Bonjour,

                                        Je vais changer tout ce dont vous m'avez part et vous revenir.

                                        Cependant, je n'ai pas bien compris l'histoire des marqueurs ?? C'est quoi exactement ?

                                        J'ai fait des recherches mais je n'ai rien trouvé de concluant malheureusement:'(

                                        Merciiiiiiii

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          20 mai 2019 à 13:33:49

                                          Si tu lis les doc PDO, tu verras que les marqueurs sont les :<noMarqueur> OU les <?>

                                          https://www.google.com/search?q=php+pdo+marqueur&ie=utf-8&oe=utf-8&client=firefox-b-ab

                                          tu as vraiment cherché ?

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            22 mai 2019 à 17:00:05

                                            Bonjour:)

                                            J'ai changé complètement mon formulaire et je suis passée sous mysqli_ car se rapprochant beaucoup de l'extension mysql_ avec laquelle j'ai l'habitude de travailler.

                                            En espérant que cela ne pose problème, voici mon code:

                                            <?php
                                            function connectMaBase(){
                                                   $conn = mysqli_connect('localhost', 'root', '', 'cyber');
                                            }
                                            
                                            //Check for errors
                                            if(mysqli_connect_errno()){
                                               echo "Failed to connect to MySQL: " . mysqli_connect_error();
                                            }
                                            ?>
                                            
                                            
                                            <?php
                                            include ("fonctions.php");
                                            ?>
                                            <!DOCTYPE html PUBLIC "-//W3c//DTD XHTML  Transitional//EN" "http://www.w3.org/TR/xhtml-transitional.dtd>
                                            <html xmlns="http://www.w3.org/1999/xhtml">
                                              <head>
                                                <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
                                                <title>  FORMULAIRE D'ADHESION A LA CYBER BASE </title>
                                                 <div clas="section header">
                                                   <div id="changes"></div>
                                                         Formulaire d'adhésion à la Cyber base
                                                 </div>
                                                  <form name="inscription" method="post" action="dudu.php">
                                                  <div>
                                                    <label for="name">Civilite:</label>
                                                    <input type="radio" name="Civilite" value="M." />M.
                                                    <input type="radio" name="Civilite" value="Mme" />Mme
                                                    <input type="radio" name="Civilité" value="Mlle" />Mlle
                                                  </div>
                                                  <div>
                                                    <label for="name">Nom :</label>
                                                    <input type="text" id="name" name="user_name" />
                                                  </div>
                                                  <div>
                                                    <label for="name">Prenom :</label>
                                                    <input type="text" id="name" name=user_name" />
                                                  </div>
                                                  <div>
                                                    <label  for="name">Statut :</label>
                                                    <input type="text" id="name" name=user_name" />
                                                  </div>
                                                  <div>
                                                    <label for="name">DateNaissance :</label>
                                                    <input type="text" id="name" name=user_name" />
                                                  </div>
                                                  <div>
                                                    <label  for="name">DureeAdhesion :</label>
                                                    <input type="text" id="name" name=user_name" />
                                                  </div>
                                                  <div>
                                                    <label  for="name">Email :</label>
                                                    <input type="text" id="name" name=user_email" />
                                                  </div>
                                                  <div>
                                                    <label  for="name">Sexe :</label>
                                                    <input type="radio" name="Sexe" value="F" />F
                                                    <input type="radio" name="Sexe" value="M" />M
                                                  </div>
                                                  <div>
                                                  <label  for="name">NumeroTelephone :</label>
                                                    <input type="text" id="name" name=user_name" />
                                                  </div>
                                                  <div class="button">
                                                            <button type="submit">OK</button>
                                                  </div>
                                            </form>
                                            
                                            <?php
                                            if (isset ($_POST['valider])){
                                            
                                            //Onrécupère les valeurs entrées par l'utilisateur
                                            $Civilite=$_POST['Civilite'];
                                            $Nom=$_POST['Nom'];
                                            $Prenom=$_POST['Prenom'];
                                            $Statut=$_POST['Statut'];
                                            $DN=$_POST['DateNaissance'];
                                            $DA=$_POST['DureeAdhesion'];
                                            $Email=$_POST['Email'];
                                            $Sexe=$_POST['Sexe'];
                                            $NT=$_POST['NumeroTelephone'];
                                            
                                            //On construit la date d'aujourd'hui
                                            $today = date("y-m-d");
                                            
                                            //On se connecte
                                            connectMaBase();
                                            
                                            //On prépare la commande sql d'insertion
                                            $requete = 'INSERT INTO trappes VALUES ("", "'.$Civilite.'", "'.$Nom.'", "'.$Prenom.'", "'.$Statut.'", "'.$DN.'", "'.$today.'", "'.$DA.'", "'.$Email.'", "'.$Sexe.'", "'.$NT.'")';
                                            
                                            //On envoie la requête
                                            $resultat = mysqli_query($conn, $requete);
                                            
                                            //On ferme la connexion
                                            mysqli_close($conn);
                                            }
                                            ?>
                                            </html>
                                            
                                                  
                                                

                                            Cependant, même si je ne reçois aucune message d'erreur, je n'arrive pas à insérer les données dans la base. J'ai même supprimé ma base de données, ma table pour en refaire une nouvelle, mais cela ne marche toujours pas malheureusement.

                                            Merci d'avance pour vos retours:):honte:

                                            -
                                            Edité par AminataSy8 22 mai 2019 à 17:01:05

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              22 mai 2019 à 17:09:15

                                              Où est la préparation de la requête ou les échappements avec mysqli_real_escape_string : documentes-toi sur les injections SQL, tu ne fais toujours rien pour ne pas en avoir ni ne serait-ce que laisser passer les " (une " dans tes données et ta requête plante lamentablement) ?

                                              Ensuite, il n'y a aucune gestion d'erreur : voir mysqli_error ou mieux mysqli_report.

                                              Quand une requête ne fait rien, c'est qu'elle plante et dans ce cas, on va chercher l'erreur SQL puisque PHP ne les donne JAMAIS par défaut (décidément, on a beau le répéter 10 fois par jour minimum, ça ne rentrera jamais et personne ne doit chercher non plus avant de poster)

                                              EDIT : il faudrait aussi jeter une oeil à la documentation de PHP sur les variables, la partie portée des variables : ta variable $conn n'existe pas en dehors de ta fonction. Je ne comprends même pas que tu ne le vois pas, ça devrait te valoir une notice: undefined variable conn et une erreur fatale (NULL peut difficilement passer par une instance mysqli comme mysqli_query l'attend).

                                              -
                                              Edité par julp 22 mai 2019 à 17:13:56

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                22 mai 2019 à 17:35:09

                                                Bonjour.

                                                En même temps, si tu définis le même nom à tous tes input de type text, tu ne récupérera la valeur que de l'un d'eux.

                                                Et encore, là tu n'en récupère aucun d'eux, étant donné que dans ton traitement tu utilises des index du tableau $_POST totalement différents de ceux que tu as défini dans ton formulaire.

                                                Au passage, une variable définie dans une fonction, n'est pas accessible depuis l'extérieur de celle-ci, à moins bien sur de la retourner et de la stocker dans une variable lorsque la fonction est appelée (connectMaBase).

                                                -
                                                Edité par Lartak 22 mai 2019 à 17:41:02

                                                • Partager sur Facebook
                                                • Partager sur Twitter

                                                Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

                                                  28 mai 2019 à 13:35:06

                                                  Bonjour,

                                                  J'ai réédité mon code (pour la énième fois je sais:)) :

                                                  <?php
                                                  
                                                  //On teste si le formulaire a été soumis
                                                  if (isset($_POST['cbb']) && ($_POST['cbb']) == 'cbb') {
                                                  
                                                  //On se connecte à la base
                                                  $connexion = mysqli_connect('localhost', 'root', '', 'cyber');
                                                  
                                                  //On recherche si l'email est déjà utilisé par un autre membre
                                                  $sql = "'SELECT count(*) FROM trappes Email="'.mysqli_escape_string($connexion, $_POST['Email']).'"'";
                                                  $rep = mysqli_query($connexion, $sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysqli_error($connexion));
                                                  $data = mysqli_fetch_array($rep);
                                                  
                                                  if ($data[0] == 0) {
                                                  
                                                  //On prépare la commande sql d'insertion
                                                  $sql = 'INSERT INTO trappes VALUES("", "'.mysqli_escape_string($connexion, $_POST['Civilite']).'", "'.mysqli_escape_string($connexion, $_POST['Nom']).'", "'.mysqli_escape_string($connexion, $_POST['Prenom']).'", "'.mysqli_escape_string($connexion, $_POST['Statut']).'", "'.mysqli_escape_string($connexion , $_POST['DateNaissance']).'", "'.mysqli_escape_string($connexion, $_POST['DateAdhesion']).'", "'.mysqli_escape_string($connexion, $_POST['DureeAdhesion']).'", "'.mysqli_escape_string($connxeion, $_POST['Email']).'", "'.mysqli_escape_string($connexion, $_POST['Sexe']).'", "'.mysqli_escape_string($connexion, $_POST['NumeroTelephone']).'")';
                                                  
                                                  //On envoie la requête
                                                  $req = mysqli_query($connexion, $sql) or die('Erreur SQL !'.$sql.'<br />'.mysqli_error($connexion));
                                                  
                                                  echo "Utilisateur ajoute";
                                                  
                                                       }
                                                    }
                                                  ?>

                                                  Cette fois-ci, je reçois bien les erreurs (merci beaucoup pour l'astuce mysqli_escape_string et mysqli_error).

                                                  La première erreur que je reçois et d'ailleurs je ne comprends pas pourquoi est celle-ci:

                                                  Apparemment lorsque j'établis la connexion avec ma base, il n'y a pas de point-virgule à la fin de la ligne de commande. Bon je l'ai supprimé (je ne voyais pas d'autres solutions) et après avoir relancé, une deuxième erreur a été générée :

                                                  Pour celle-ci par contre je n'arrive vraiment pas à la résoudre. J'ai essayé d'indiquer un "return $sql" mais même avec cela, ça ne marche pas. Je ne comprends plus et sincèrement je n'arrive plus à beaucoup réfléchir; je suis juste épuisée donc toute aide serait la bienvenue:):(

                                                  Et apparemment il y aurait également un problème avec les noms de mes input de type text (qui sont tous les mêmes). Je vais y jeter un coup d’œil et je vous reviens dans les plus brefs délais.

                                                  Merci à vous !!!!!!!!!!!!!!!!!!!!!!

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    28 mai 2019 à 13:36:52

                                                    Tu as fait n'importe quoi au niveau des quotes de ton SELECT (aussi bien celles pour le PHP que le SQL).

                                                    On remarquera que la coloration syntaxique du forum ne fait guère mieux.

                                                    -
                                                    Edité par julp 28 mai 2019 à 13:38:16

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      28 mai 2019 à 13:38:55

                                                      Alors,

                                                      Quant tu as une erreur de syntaxe, tu la corriges, normalement c'est au dessus de la ligne citée, comme dans une dictée à l'école, tu supprime pas la phrase ;)

                                                      la seconde découle de la suppression de la ligne en question <=> tu as supprimé le script de connexion à la base.

                                                      DONC, je te conseille vivement de poser ce script et d'aller apprendre les base de la programmation + php + inclusion de fichier en php

                                                      -
                                                      Edité par christouphe 28 mai 2019 à 13:40:08

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter

                                                      Insérer des data dans une BDD depuis un formulaire

                                                      × 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