Page 1 sur 1

Page Inscription: Problème requête préparée

Posté : 21 févr. 2012, 18:43
par Pas_Enregistré
Bonjour,
Je vous tourne vers vous car, j'ai fais une page d'inscription mais, malheureusement, elle a un petit problème... Les deux erreurs:
Notice: Undefined variable: response in C:\wamp\www\Site\inscription2.php on line 45.
Fatal error: Call to a member function execute() on a non-object in C:\wamp\www\Site\inscription2.php on line 45.
La première erreur, si j'ai bien compris, signifie que la variable n'est pas définie alors que si je fais var_dump($pseudo); elle me retourne ce que j'ai mis dans le champ pseudo.
Le code:

Je vous remercie d'avance de votre aide.
Une personne qui a la flamme de s'inscrire (haha :p)

Re: Page Inscription: Problème requête préparée

Posté : 21 févr. 2012, 18:44
par Pas_Enregistré
Ah, mince... J'étais sûr que je pourrais pas éditer mon message, je vais donc devoir m'inscrire :lol:

Re: Page Inscription: Problème requête préparée

Posté : 21 févr. 2012, 18:45
par Thibaud C
Moyen d'avoir le code vers la ligne 45 ? :)

Re: Page Inscription: Problème requête préparée

Posté : 21 févr. 2012, 18:50
par Dyzx
Voilà voilà, c'est moi. :p
<?php
include_once("include/config.php");

/***********************/
/* Inscription au site.
/***********************/

// Si la variable $_POST['bouton'] est vide, on affiche le formulaire.
if(empty($_POST['bouton'])) 
{
?>
<div id="inscription">
	<form method="post" action="">
		<label for="pseudo">Pseudo :</label> <input type="text" name="pseudo" id="pseudo"><br />
		<label for="password">Mot de passe :</label> <input type="password" name="password" id="password"><br />
		<label for="password2">Retapez le mot de passe :</label> <input type="password" name="password2" id="password2"><br />
		<label for="email">Adresse email :</label> <input type="text" name="email" id="email"><br />
		<label for="email2">Retapez votre adresse email :</label> <input type="text" name="email2" id="email2"><br />
		<input type="submit" name="bouton" value="S'inscrire" />
	</form>
</div>
<?php
}
// Sinon la personne a cliqué sur le bouton "S'inscrire" et donc la variable n'est pas vide.
else
{
	// On récupère les variables du formulaire.
	$pseudo = $_POST['pseudo'];
	$mdp = md5($_POST['password']);
	$mdp2 = md5($_POST['password2']);
	$email = $_POST['email'];
	$email2 = $_POST['email2'];
	// Son rôle est de stocker le nombre d'erreurs. 
	// Elle est incrémentée à chaque fois qu'un problème est détecté.
	$nombre_erreur = 0;
	
	// Vérification du pseudo.
	if($pseudo == "")
	{
		$erreur_pseudo_vide = 'Le pseudo n\'est pas remplis.';
		$nombre_erreur++;
	}
	$bdd = new PDO('mysql:host='.$PARAM_hote.';dbname='.$PARAM_nom_bd, $PARAM_user, $PARAM_mdp);
	$reponse = $bdd->prepare("SELECT * FROM site_utilisateurs WHERE pseudo = :pseudo");
	$response->execute(array(':pseudo' => $pseudo));
	$donnees = $reponse->fetchAll();
	$reponse->closeCursor();
	if(count($donnees) > 0)
	{
		$erreur_pseudo_pris = 'Désolé, ce pseudo est déjà utilisé par un membre.';
		$nombre_erreur++;
	}
	// Vérification du mot de passe.
	if($mdp != $mdp2)
	{
		$erreur_mdp_différents = 'Les deux mots de passe ne sont pas identiques.';
		$nombre_erreur++;
	}
	if($mdp == "" || $mdp2 == "")
	{
		$erreur_mdp_vide = 'Le mot de passe n\'est pas remplis.';
		$nombre_erreur++;
	}
	// Vérification de l'adresse email.
    if (!preg_match("#^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-z]{2,4}$#", $email || $mail2) && $email == "" || $email2 == "")
    {
        $erreur_email_format = 'Votre adresse mail n\'a pas un format valide.';
		$nombre_erreur++;
    }
	
	// Si il n'y a pas eu d'erreur pendant l'inscription du membre.
	if($nombre_erreur == 0)
	{
		// On enregistre le membre dans la base de données.
		$reponse = $bdd->prepare("INSERT INTO site_utilisateurs (pseudo, password, email) VALUES(:pseudo, :password, :email)");
		$response->execute(array(':pseudo' => $pseudo, ':password' => $mdp, ':email' => $email));
		$reponse->closeCursor();
?>
		<div class="success">
			<h1>Inscription terminée !</h1><br />
			Cliquez <a href="connexion.php">ici</a> pour vous connectez.
		</div>
<?php
	}
	// Sinon, il y a eu une erreur ou plus.
	else
	{
?>
		<div class="error">
			<p><h1>Inscription interrompue !</h1></p>
			<p>Une ou plusieurs erreurs se sont produites pendant l'incription.</p>
			<p><?php echo "$nombre_erreur"; ?> erreur(s)</p>
			<p><?php echo "$erreur_pseudo_pris";?></p>
			<p><?php echo "$erreur_pseudo_vide";?></p>
			<p><?php echo "$erreur_mdp_différents";?></p>
			<p><?php echo "$erreur_mdp_vide";?></p>
			<p><?php echo "$erreur_email_format";?></p>
		</div>
<?php
	}
}
?>

Re: Page Inscription: Problème requête préparée

Posté : 21 févr. 2012, 18:52
par Shenryu
Ta variable ligne 45 se nomme $reponse et non $response.

Re: Page Inscription: Problème requête préparée

Posté : 21 févr. 2012, 18:59
par Dyzx
Ohla... Je deviens vraiment aveugle moi. :(
Merci pour votre aide !

Re: Page Inscription: Problème requête préparée

Posté : 21 févr. 2012, 20:37
par Dyzx
C'est encore moi... Il y a un (gros) problème pendant l'inscription:
- Si les champs mots de passe sont vides l'inscription se déroule avec succès au lieu d'afficher le message d'erreur "Le mot de passe n'est pas remplis."
- Si le champ email est correcte mais, que le deuxième champs (email2) non, l'inscription se déroule avec succès au lieu d'afficher le message d'erreur "Votre adresse mail n'a pas un format valide." et inversement.

Le nouveau code:
<?php
include_once("include/config.php");
include_once("include/haut.php");

/***********************/
/* Inscription au site.
/***********************/

// Si la variable $_POST['bouton'] est vide, on affiche le formulaire.
if(empty($_POST['bouton'])) 
{
	?>
	<div id="inscription">
		<form method="post" action="">
			<label for="pseudo">Pseudo :</label> <input type="text" name="pseudo" id="pseudo"><br />
			<label for="password">Mot de passe :</label> <input type="password" name="password" id="password"><br />
			<label for="password2">Retapez le mot de passe :</label> <input type="password" name="password2" id="password2"><br />
			<label for="email">Adresse email :</label> <input type="text" name="email" id="email"><br />
			<label for="email2">Retapez votre adresse email :</label> <input type="text" name="email2" id="email2"><br />
			<input type="submit" name="bouton" value="S'inscrire" />
		</form>
	</div>
	<?php
}
// Sinon la personne a cliqué sur le bouton "S'inscrire" et donc la variable n'est pas vide.
else
{
	// On mets les variables d'erreurs à NULL sinon, ça bug.
	$erreur_pseudo_vide = NULL;
	$nombre_erreur = NULL;
	$erreur_pseudo_vide = NULL;
	$erreur_pseudo_pris = NULL;
	$erreur_mdp_vide = NULL;
	$erreur_mdp_différents = NULL;
	$erreur_email_format = NULL;
	
	// On récupère les variables du formulaire.
	$pseudo = $_POST['pseudo'];
	$mdp = md5($_POST['password']);
	$mdp2 = md5($_POST['password2']);
	$email = $_POST['email'];
	$email2 = $_POST['email2'];
	// Son rôle est de stocker le nombre d'erreurs. 
	// Elle est incrémentée à chaque fois qu'un problème est détecté.
	$nombre_erreur = 0;
		
	// Vérification du pseudo.
	if($pseudo == "")
	{
		$erreur_pseudo_vide = 'Le pseudo n\'est pas remplis.';
		$nombre_erreur++;
	}
	$bdd = new PDO('mysql:host='.$PARAM_hote.';dbname='.$PARAM_nom_bd, $PARAM_user, $PARAM_mdp);
	$reponse = $bdd->prepare("SELECT * FROM site_utilisateurs WHERE pseudo = :pseudo");
	$reponse->execute(array(':pseudo' => $pseudo));
	$donnees = $reponse->fetchAll();
	$reponse->closeCursor();
	if(count($donnees) > 0)
	{
		$erreur_pseudo_pris = 'Désolé, ce pseudo est déjà utilisé par un membre.';
		$nombre_erreur++;
	}
	// Vérification du mot de passe.
	if($mdp == "" || $mdp2 == "")
	{
		$erreur_mdp_vide = 'Le mot de passe n\'est pas remplis.';
		$nombre_erreur++;
	}
	if($mdp != $mdp2)
	{
		$erreur_mdp_différents = 'Les deux mots de passe ne sont pas identiques.';
		$nombre_erreur++;
	}
	// Vérification de l'adresse email.
	if (!preg_match("#^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-z]{2,4}$#", $email, $email2) && $email == "" || $email2 == "")
	{
		$erreur_email_format = 'Votre adresse mail n\'a pas un format valide.';
		$nombre_erreur++;
	}
	// Si il n'y a pas eu d'erreur pendant l'inscription du membre.
	if($nombre_erreur == 0)
	{
		// On enregistre le membre dans la base de données.
		$reponse = $bdd->prepare("INSERT INTO site_utilisateurs (pseudo, password, email) VALUES(:pseudo, :password, :email)");
		$reponse->execute(array(':pseudo' => $pseudo, ':password' => $mdp, ':email' => $email));
		$reponse->closeCursor();
?>
		<div class="success">
			<h1>Inscription terminée !</h1><br />
			Cliquez <a href="connexion.php">ici</a> pour vous connectez.
		</div>
		<?php
	}
	// Sinon, il y a eu une erreur ou plus.
	else
	{
?>
		<div class="error">
			<p><h1>Inscription interrompue !</h1></p>
			<p>Une ou plusieurs erreurs se sont produites pendant l'incription.</p>
			<p><?php echo "$nombre_erreur"; ?> erreur(s)</p>
			<p><?php echo "$erreur_pseudo_vide";?></p>
			<p><?php echo "$erreur_pseudo_pris";?></p>
			<p><?php echo "$erreur_mdp_vide";?></p>
			<p><?php echo "$erreur_mdp_différents";?></p>
			<p><?php echo "$erreur_email_format";?></p>
		</div>
		<?php
	}
}

include_once("include/bas.php");
?>
EDIT: Je voudrais aussi savoir, comment faire pour avoir le formulaire affiché avec les messages d'erreurs ou le message de succès car, le formulaire s'efface.. :/

Re: Page Inscription: Problème requête préparée

Posté : 21 févr. 2012, 20:43
par xTG
Pour tester le vide utilises empty() plutôt.
Ton utilisation de preg_match() est incorrecte, regarde la doc et tu verras qu'on peut pas lui passer deux chaines arguments à traiter.
Sur la même ligne faut rajouter des parenthèses pour donner un ordre de priorité des opérateurs.

Re: Page Inscription: Problème requête préparée

Posté : 21 févr. 2012, 21:31
par Dyzx
Pour l'email, je n'ai pu de problème: Si les champs sont vides ou s'ils ont pas un format correct, l'erreur est affiché. Par contre... Le mot de passe c'est toujours pareil. :|
<?php
include_once("include/config.php");
include_once("include/haut.php");

/***********************/
/* Inscription au site.
/***********************/

// Si la variable $_POST['bouton'] est vide, on affiche le formulaire.
if(empty($_POST['bouton'])) 
{
	?>
	<div id="inscription">
		<form method="post" action="">
			<label for="pseudo">Pseudo :</label> <input type="text" name="pseudo" id="pseudo"><br />
			<label for="password">Mot de passe :</label> <input type="password" name="password" id="password"><br />
			<label for="password2">Retapez le mot de passe :</label> <input type="password" name="password2" id="password2"><br />
			<label for="email">Adresse email :</label> <input type="text" name="email" id="email"><br />
			<label for="email2">Retapez votre adresse email :</label> <input type="text" name="email2" id="email2"><br />
			<input type="submit" name="bouton" value="S'inscrire" />
		</form>
	</div>
	<?php
}
// Sinon la personne a cliqué sur le bouton "S'inscrire" et donc la variable n'est pas vide.
else
{
	// On mets les variables d'erreurs à NULL sinon, ça bug.
	$erreur_pseudo_vide = NULL;
	$nombre_erreur = NULL;
	$erreur_pseudo_vide = NULL;
	$erreur_pseudo_pris = NULL;
	$erreur_mdp_vide = NULL;
	$erreur_mdp_différents = NULL;
	$erreur_email_format = NULL;
	
	// On récupère les variables du formulaire.
	$pseudo = $_POST['pseudo'];
	$mdp = md5($_POST['password']);
	$mdp2 = md5($_POST['password2']);
	$email = $_POST['email'];
	$email2 = $_POST['email2'];
	// Son rôle est de stocker le nombre d'erreurs. 
	// Elle est incrémentée à chaque fois qu'un problème est détecté.
	$nombre_erreur = 0;
		
	// Vérification du pseudo.
	if(empty($pseudo))
	{
		$erreur_pseudo_vide = 'Le pseudo n\'est pas remplis.';
		$nombre_erreur++;
	}
	$bdd = new PDO('mysql:host='.$PARAM_hote.';dbname='.$PARAM_nom_bd, $PARAM_user, $PARAM_mdp);
	$reponse = $bdd->prepare("SELECT * FROM site_utilisateurs WHERE pseudo = :pseudo");
	$reponse->execute(array(':pseudo' => $pseudo));
	$donnees = $reponse->fetchAll();
	$reponse->closeCursor();
	if(count($donnees) > 0)
	{
		$erreur_pseudo_pris = 'Désolé, ce pseudo est déjà utilisé par un membre.';
		$nombre_erreur++;
	}
	// Vérification du mot de passe.
	if(empty($mdp) || empty($mdp2))
	{
		$erreur_mdp_vide = 'Le mot de passe n\'est pas remplis.';
		$nombre_erreur++;
	}
	if($mdp != $mdp2)
	{
		$erreur_mdp_différents = 'Les deux mots de passe ne sont pas identiques.';
		$nombre_erreur++;
	}
	// Vérification de l'adresse email.
	if (!preg_match("#^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-z]{2,4}$#", $email) || !preg_match("#^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-z]{2,4}$#", $email2))
	{
		$erreur_email_format = 'Les adresses mail n\'ont pas un format valide.';
		$nombre_erreur++;
	}
	// Si il n'y a pas eu d'erreur pendant l'inscription du membre.
	if($nombre_erreur == 0)
	{
		// On enregistre le membre dans la base de données.
		$reponse = $bdd->prepare("INSERT INTO site_utilisateurs (pseudo, password, email) VALUES(:pseudo, :password, :email)");
		$reponse->execute(array(':pseudo' => $pseudo, ':password' => $mdp, ':email' => $email));
		$reponse->closeCursor();
?>
		<div class="success">
			<h1>Inscription terminée !</h1><br />
			Cliquez <a href="connexion.php">ici</a> pour vous connectez.
		</div>
		<?php
	}
	// Sinon, il y a eu une erreur ou plus.
	else
	{
?>
		<div class="error">
			<p><h1>Inscription interrompue !</h1></p>
			<p>Une ou plusieurs erreurs se sont produites pendant l'incription.</p>
			<p><?php echo "$nombre_erreur"; ?> erreur(s)</p>
			<p><?php echo "$erreur_pseudo_vide";?></p>
			<p><?php echo "$erreur_pseudo_pris";?></p>
			<p><?php echo "$erreur_mdp_vide";?></p>
			<p><?php echo "$erreur_mdp_différents";?></p>
			<p><?php echo "$erreur_email_format";?></p>
		</div>
		<?php
	}
}

include_once("include/bas.php");
?>

Re: Page Inscription: Problème requête préparée

Posté : 21 févr. 2012, 21:41
par xTG
Ah bah oui... md5() d'une chaîne vide ça donne pas une chaîne vide mais un hash de 32 caractères. ;)
Faut faire le md5() après les tests.

Re: Page Inscription: Problème requête préparée

Posté : 21 févr. 2012, 21:54
par Dyzx
Ah... Tu viens de m'apprendre quelque chose là, je ne le savais pas.
Tout marche impeccable désormais, merci. :)