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

Résolu
EinsteinE=mc2 -  
EinsteinE=mc2 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention   -
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

NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
Affiche la requête générée et essayes-la dans PhpMyAdmin;.
0
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
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
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
EinsteinE=mc2 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
je suis débutant Nhenry , je comprend pas tout ce que tu dis ....
0
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
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
EinsteinE=mc2 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
help personne
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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
EinsteinE=mc2 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
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
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
EinsteinE=mc2 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
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
EinsteinE=mc2 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
Excuse moi je vient de voir la ligne correspondante autant pour moi ! Je teste illico
0
EinsteinE=mc2 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
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
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Et oui...
verifie bien comment se connecter à une bdd en pdo...
j'ai juste copier ton code... mais il est faut.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention  
 
https://www.commentcamarche.net/faq/44117-connexion-a-une-base-avec-pdo-mysqli
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > jordane45 Messages postés 38486 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
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > jordane45 Messages postés 38486 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
EinsteinE=mc2 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
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
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Sans voir le code de ton formulaire. .. impossible de t'aider
0
EinsteinE=mc2 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 


			<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
EinsteinE=mc2 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
Désolé pour l’indentation....
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > EinsteinE=mc2 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
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
EinsteinE=mc2 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
(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
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > EinsteinE=mc2 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
Humm.. bizarre....

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

par :
if ($Nom){
0
EinsteinE=mc2 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
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
EinsteinE=mc2 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
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
EinsteinE=mc2 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
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
EinsteinE=mc2 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
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
EinsteinE=mc2 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai mis des mot au hazard dans les cases du formulaire fait pas attention c'était juste pour tester...
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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
EinsteinE=mc2 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
T'es un génie !!!!! :D :D :D j'ai plus sommeil tellement je suis content lol
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752 > EinsteinE=mc2 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 

T'es un génie

Ah ? ... mais par contre je n'ai plus de lampe à frotter.. :-)
0
EinsteinE=mc2 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
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
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Et maintenant... tu as un code "propre".
Tiens en compte pour tes prochains dev.

Bonne soirée.
0
EinsteinE=mc2 Messages postés 40 Date d'inscription   Statut Membre Dernière intervention  
 
Yes merci beaucoup . Bonne soirée !
0