Récupéré information formulaire: Pas d'inscription WAMP

Résolu
EinsteinE=mc2 -  
EinsteinE=mc2 Messages postés 43 Statut Membre -
Bonjour,

Merci à ceux qui prendront un moment pour m'aider.

Je suis débutant en php et je souhaite récupérer des données d'un formulaire d'inscription à mettre dans ma base de donnée PHPMYADMIN (WAMP). J'ai un souci c'est que ma requête passe, je n'ai pas d'erreur cependant rien ne s'inscrit dans ma base et j'arrive sur un écran blanc sans mon echo qui s'affiche ( j'avais mis echo 'Enregistrement effectué!' . J'ai bien fait un session start sur mon autre fichier php . Je ne voit pas ou ça bloque. :??: :??: :??: :??:

Voici mon code:


<?php 

session_start();
if (isset($_POST['Valider']))  // appui sur bouton 

{

	$Civilite=$_POST["civility"];
	$Nom=$_POST["lastname"];
	$Prenom=$_POST["firstname"];
	$Pays=$_POST["country"];
	$email=$_POST["mail"];
	$Utilisateur_mdp=$_POST["pass"];




	$db = new PDO('mysql:host=localhost;dbname=utilisateurs','root'); // connexion à la base de donnée
	$requete= $db->prepare("INSERT INTO utilsateur(Civilite, Nom, Prenom, Pays, email, Utilisateur_mdp) VALUES ('".$Civilite."','".$Nom."','".$Prenom."','".$Pays."','".$email."','".$Utilisateur_mdp."')");
	$requete->execute();
    
    $_SESSION["utilisateur"]= $_POST["Prenom"];// Permet de garder la connexion active de page en page 

 
 
echo 'Enregistrement effectué!';

else
{
	
echo 'buggggggggggggg';
	
}


13 réponses

Résumé de la discussion

Un débutant en PHP souhaite insérer les données d’un formulaire d’inscription dans une base MySQL via PDO sur WAMP, mais page reste blanche et l’écho ne s’affiche pas. Les échanges pointent une erreur due à une copie incorrecte qui transforme '->' en '=&gt;' dans l’appel PDO, indiquant que la connexion doit être formée avec deux arguments correctement. En parallèle, plusieurs réponses recommandent d’utiliser une requête préparée avec des paramètres nommés et d’éviter l’insertion directe des valeurs, puis d’exécuter avec un tableau de variables et récupérer l’ID inséré. Un ajout utile rappelle aussi de vérifier les identifiants et le mot de passe, puis de tester localement pour isoler les erreurs de syntaxe ou de connexion.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
     
    Affiche la requête générée et essayes-la dans PhpMyAdmin;.
    0
  2. EinsteinE=mc2
     
    Bonjour Nhenry,

    Merci pour ton temps , Voici ce que j'ai obtenu :

    Erreur

    Requête SQL :

    INSERT INTO utilsateur(Civilite, Nom, Prenom, Pays, email, Utilisateur_mdp) VALUES ('"uuuu"','"hhhhh"','"hhhhh"','"fra"','"ggvgvgvg"','"jnnnjbbcc"')

    MySQL a répondu: Documentation
    #1146 - La table 'utilisateurs.utilsateur' n'existe pas
    0
    1. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
       
      Si le problème est résolu, merci de cliquer sur "Marquer comme résolu"
      Petite remarque, essayes de mettre un ' dans un champ et ensuite intéresses-toi aux injections SQL.
      0
    2. EinsteinE=mc2 Messages postés 43 Statut Membre
       
      je suis débutant Nhenry , je comprend pas tout ce que tu dis ....
      0
    3. NHenry Messages postés 15235 Date d'inscription   Statut Modérateur Dernière intervention   387
       
      Une injection SQL est une "attaque" consistant à détourner une requête SQL en modifiant son contenu.

      Par exemple, une ' dans un mon cassera ta requête SQL.
      Dans ce cas, il te faut soit échapper les chaines d'entrée soit utiliser une requête paramétrée.

      Recherches un peu sur le net.
      0
  3. EinsteinE=mc2 Messages postés 43 Statut Membre
     
    help personne
    0
  4. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour,

    Déjà .. on sépare la connexion de la BDD dans un fichier à part
    pour éviter de devoir la copier/coller partout...
    Donc :
    <?php
    //Fichier cnxBdd.php
    try{
     $db = new PDO('mysql:host=localhost;dbname=utilisateurs'=>'root'); // connexion à la base de donnée
    }catch(Exception $e){
      echo "<br>Erreur lors de la connexion à la bdd !".$e->getMessage();
    }
    


    Ensuite, on récupère PROPREMENT les variables AVANT de les utiliser.
    Pour cela, on va utiliser l'écriture ternaire avec ISSET (ou !EMPTY selon nos préférences)
    Puis, pour éviter les erreurs d'injection SQL, on va utiliser les requêtes préparées.
    Pour finir, on ajoute des blocs TRY/CATCH pour intercepter les éventuelles erreurs.

    <?php 
    //Affichage des erreurs PHP
    error_reporting(E_ALL);
    
    //Démarrage des Sessions
    session_start();
    
    //connexion à la BDD 
    require_once "cnxBdd.php";
    
    // Récupération PROPRE des variables AVANT de les utiliser
    $Civilite = isset($_POST["civility"]) ? $_POST["civility"] : '';
    $Nom = !empty($_POST["lastname"]) ? $_POST["lastname"] : '';
    $Prenom = isset($_POST["firstname"]) ? $_POST["firstname"] : '';
    $Pays = isset($_POST["country"]) ? $_POST["country"] : '';
    $email = isset($_POST["mail"]) ? $_POST["mail"] : '';
    $Utilisateur_mdp = isset($_POST["pass"]) ? $_POST["pass"] : '';
    
    //traitement du Submit
    if (isset($_POST['Valider'])){
    
       //préparation de la requête
       $sql = "INSERT INTO utilsateur(Civilite, Nom, Prenom, Pays, email, Utilisateur_mdp) 
               VALUES (:Civilite,:Nom,:Prenom,:Pays,:email,:Utilisateur_mdp)";
    
        $variables = array(':Civilite'=>$Civilite
                           ,':Nom'=>$Nom
                           ,':Prenom'=>$Prenom
                           ,':Pays'=>$Pays
                           ,':email'=>$email
                           ,':Utilisateur_mdp' =>$Utilisateur_mdp);
       
      //exécution de la requete
      try{
       $requete= $db->prepare($sql);
       $requete->execute($variables);
        
        //Si tu as mis un champ auto-incrementé dans ta table
        // tu peux même récupérer l'ID sur lequel aura été inséré ta ligne
        $id = $db->lastInsertId(); 
        $_SESSION["id_user"] = $id;
        
        $_SESSION["utilisateur"]= $Prenom ;// Permet de garder la connexion active de page en page 
        echo 'Enregistrement effectué!';
      }catch(Exception $e){
        echo "<br>Erreur :".$e->getMessage();
        print_r($variables);//en cas d'erreur, affichage des variables
      }
    
    } else{
     echo 'buggggggggggggg';
    }
    


    Cordialement, 
    Jordane                                                                 
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      NB: Je viens de voir que tu avais nommé ta BDD : utilisateurs ? .. j'espère que tu ne confond pas BASE de données.. et TABLE.
      0
    2. EinsteinE=mc2 Messages postés 43 Statut Membre
       
      Merci pour ta réponse Jordan !!! Non ma base de donnée s'appellent utilisateurs avec un s et ma table utilisateur au singulier :)
      0
    3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Je viens de faire une petite correction au niveau de la requête.
      Reprend cette dernière version. (j'ai édité mon message précédent)
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. EinsteinE=mc2 Messages postés 43 Statut Membre
     
    Je vais tester avec les modif que tu a fait mais je comprend pas bien ton fichier cnxBDD.php . C'est pour la connexion à la base de donnée mais comment je fais appel à celui-ci ?
    0
    1. EinsteinE=mc2 Messages postés 43 Statut Membre
       
      Excuse moi je vient de voir la ligne correspondante autant pour moi ! Je teste illico
      0
  7. EinsteinE=mc2 Messages postés 43 Statut Membre
     
    Alors j'ai une erreur :(

    ( ! ) Parse error: syntax error, unexpected '=>' (T_DOUBLE_ARROW) in C:\wamp\www\WELLDRESSED\cnxBDD.php on line 4

    cela correspond à cette ligne

    $db = new PDO('mysql:host=localhost;dbname=utilisateurs'=>'root'); // connexion à la base de donnée
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Et oui...
      verifie bien comment se connecter à une bdd en pdo...
      j'ai juste copier ton code... mais il est faut.
      0
      1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         
        https://www.commentcamarche.net/faq/44117-connexion-a-une-base-avec-pdo-mysqli
        0
      2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Ah non. Au temps pour moi.. c'est mon copier/remplacer qui a fait ça
        vire le => et remplace par une virgule.
        0
      3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Par contre il te manque le password (a vide si tu n'en as pas mis)
        0
  8. EinsteinE=mc2 Messages postés 43 Statut Membre
     
    Donc c'est corriger par contre au niveau du if il y a un problème car il me renvoit vert le else et donc sa affiche bugg :/
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Sans voir le code de ton formulaire. .. impossible de t'aider
      0
  9. EinsteinE=mc2 Messages postés 43 Statut Membre
     
    
    
    			<div id=droite_formu> 
    				
    			
    						<form method="post" id="inscriptionform" action="inscription.php">
    				<fieldset>
    						<legend>    Inscription: </legend>
    					<p >
    						<label> Civilité<span> *</span></label>
    									<select name="civility">
    										<option value='1' >Mme</option>
    										<option value='2' selected>MR</option> /* selection par défaut*/
    									</select>
    					<div id="nickname-element">
    						<label>Nom<span> *</span></label>
    												<input id="nickname" type="text" name="lastname" value="">
    						<span id="nickname-info"></span>
    					</div>
    					<label>Prénom<span> *</span></label>
    										<input type="text" name="firstname" value="">
    					<label>Pays<span> *</span></label>
    					<div class="select">
    						<select name="country">
    						<option value="AF">Afghanistan</option><option value="ZA">Afrique du Sud</option><option value="AL">Albanie</option><option value="DZ">Algérie</option><option value="DE">Allemagne</option><option value="AD">Andorre</option><option value="AO">Angola</option><option value="AI">Anguilla</option>	</select>
    					</div>
    					<label>Adresse e-mail<span> *</span></label>
    										<input type="text" name="mail" value="">
    					<label>Mot de passe<span> *</span></label>
    										<input type="password" name="pass" value="">
    			
    										</br>
    										</br>
    			
    				</fieldset> 
    						<input type="submit" value="Valider" name="valider"> 
    					</form>
    						
    				</div>
    						
    	
    
    


    Du coup j'ai pas mis tous les pays par contre c'était trop long...
    0
    1. EinsteinE=mc2 Messages postés 43 Statut Membre
       
      Désolé pour l’indentation....
      0
    2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > EinsteinE=mc2 Messages postés 43 Statut Membre
       
      Dans ton fichier inscription.php , peux tu mettre avant le IF un
      print_r($_POST);
      

      et nous dire ce que ça donne lorsque tu valides ton formulaire ?
      0
    3. EinsteinE=mc2 Messages postés 43 Statut Membre
       
      (c'est super cool d’essayer débugger le code avec moi )

      Voilà ce que ça me donne une fois le formulaire validé

      Array ( [civility] => 2 [lastname] => david [firstname] => jean [country] => FR [mail] => david@gmail.com [pass] => vffggg [valider] => Valider ) buggggggggggggg
      0
    4. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > EinsteinE=mc2 Messages postés 43 Statut Membre
       
      Humm.. bizarre....

      Essaye de remplacer
      if (isset($_POST['Valider'])){
      

      par :
      if ($Nom){
      
      0
    5. EinsteinE=mc2 Messages postés 43 Statut Membre
       
      J'obtiens cette erreur :

      Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp\www\WELLDRESSED\inscription.php on line 37
      0
  10. EinsteinE=mc2 Messages postés 43 Statut Membre
     
    Bon alors la j'ai plus d'erreur déja mais un bon point mais il y a un souci :

    - Je n'ai pas d'entrée dans ma base de donnée , les seuls qui y sont sont des utilisateurs test que j'ai rentré moi-même à la main.
    0
  11. EinsteinE=mc2 Messages postés 43 Statut Membre
     
    Bon alors la j'ai plus d'erreur déja mais un bon point mais il y a un souci :

    - je n'ai pas d'entrée dans ma base de donnée , les seuls qui y sont sont des utilisateurs que j'ai rentré moi-même à la main
    0
  12. EinsteinE=mc2 Messages postés 43 Statut Membre
     
    Oké donc voilà ce que me retourne la nouvelle requête :



    Il me dit enregistrement effectué mais j'ai toujours rien dans la base , j'ai peut être loupé une étape, dans la conf de la base de donnée parce que la j'y comprend plus rien....
    0
    1. EinsteinE=mc2 Messages postés 43 Statut Membre
       
      J'ai mis des mot au hazard dans les cases du formulaire fait pas attention c'était juste pour tester...
      0
  13. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    On va modifier le fichier de connexion à la bdd
    de base, les Exceptions ne sont pas activées (pour afficher les erreurs)

     <?php
    //Fichier cnxBdd.php
    try{
     $db = new PDO('mysql:host=localhost;dbname=utilisateurs'=>'root'); // connexion à la base de donnée
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }catch(PDOException $e){
      echo "<br>Erreur lors de la connexion à la bdd !".$e->getMessage();
    }
    ?>
    


    Cordialement, 
    Jordane                                                                 
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Et dans le code de ta page,
      tu vas ajouté un echo de $id

      En modifiant la ligne
         echo 'Enregistrement effectué!';

      par :
        echo 'Enregistrement effectué !  <b>ID:</b> = '.$id; 
      0
    2. EinsteinE=mc2 Messages postés 43 Statut Membre
       
      T'es un génie !!!!! :D :D :D j'ai plus sommeil tellement je suis content lol
      0
      1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > EinsteinE=mc2 Messages postés 43 Statut Membre
         

        T'es un génie

        Ah ? ... mais par contre je n'ai plus de lampe à frotter.. :-)
        0
  14. EinsteinE=mc2 Messages postés 43 Statut Membre
     
    En fait quand j'ai modifié le fichier de connexion à la bdd pour affiché les erreurs , il m'a dit dit qu'il ne trouvais pas la table ce qui était normal puisque si tu regarde le code plus haut j'ai mis utilsateur au lieu de utilisateur donc j'ai modifié cela et BIMM cela a fonctionné

    Bon c'était un problème de c** en soit :') mais c'est la méthode de débuggage qui est cool
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Et maintenant... tu as un code "propre".
      Tiens en compte pour tes prochains dev.

      Bonne soirée.
      0
    2. EinsteinE=mc2 Messages postés 43 Statut Membre
       
      Yes merci beaucoup . Bonne soirée !
      0