Page 1 sur 1
Création, validation zone membres.
Posté : 10 août 2012, 16:01
par Loden
Salut,
voilà je me suis lancé dans la création d'un site internet et j'en suis à la création de la zone membres, j'ai déjà fais le formulaire et l'envoie de données à la Bdd :
<html>
<head>
<title>Inscription</title>
</head>
<body>
<p>Inscription au site</p>
<form name="inscription" method="post" action="inscription.php">
<p>
<label for="pseudo">Votre pseudo :</label>
<input type="text" name="pseudo" id="pseudo" required />
<br />
<label for="pass">Votre mot de passe :</label>
<input type="password" name="pass" id="pass" required />
<br />
<label for="confirmpass">Confirmer le mot de pass :</label>
<input type="password" name="confirmpass" id="confirmpass" required />
<br />
<label for="email">Votre adresse email :</label>
<input type="email" name="email" id"email" required />
<br />
<input type="submit" name="envoyer" value="Envoyer" />
</p>
</form>
<?php
$bdd = new PDO('mysql:host=localhost;dbname=RankOne', 'root', '');
if (isset($_POST['envoyer'])){
($pseudo=($_POST['pseudo']));
($pass=($_POST['pass']));
($confirmpass=($_POST['confirmpass']));
($email=($_POST['email']));
$bdd->beginTransaction();
$insert = $bdd->query("INSERT INTO Membres VALUES('','$pseudo','$pass','$email',NOW())");
$bdd->commit();
$bdd = null;
}
?>
</body>
</html>
Mais maintenant je bloque pour faire les validations, "le pseudo est déjà utilisé" etc... Je viens juste de modifier mon code en pdo (avant il était en mysql).
Et je sais pas trop comment m'y prendre pour faire les vérifs en pdo.
Merci,
Loden.
Re: Création, validation zone membres.
Posté : 10 août 2012, 16:05
par Mazarini
tu peux faire un select sur le pseudo pour voir s'il existe déjà
ou
tu peux ajouter un index unique sur la colonne pseudo et tester l'erreur ou l'exception qui correspond à DUPLICATE KEY
Re: Création, validation zone membres.
Posté : 10 août 2012, 16:15
par xTG
Attention à la protection contre l'injection...
mysql_real_escape_string() avec mysql.
PDO::quote() ou requête préparée avec PDO.
Re: Création, validation zone membres.
Posté : 10 août 2012, 16:25
par Loden
Oui j'ai un index unique sur pseudo et email, mais je n'arrive pas à trouver de tutos ou de solutions la "validation", tester l'erreur
sinon, j'ai modifier mon code pour avec la requête préparé :
<html>
<head>
<title>Inscription</title>
</head>
<body>
<p>Inscription au site</p>
<form name="inscription" method="post" action="inscription.php">
<p>
<label for="pseudo">Votre pseudo :</label>
<input type="text" name="pseudo" id="pseudo" required />
<br />
<label for="pass">Votre mot de passe :</label>
<input type="password" name="pass" id="pass" required />
<br />
<label for="confirmpass">Confirmer le mot de pass :</label>
<input type="password" name="confirmpass" id="confirmpass" required />
<br />
<label for="email">Votre adresse email :</label>
<input type="email" name="email" id"email" required />
<br />
<input type="submit" name="envoyer" value="Envoyer" />
</p>
</form>
<?php
$bdd = new PDO('mysql:host=localhost;dbname=RankOne', 'root', '');
if (isset($_POST['envoyer'])){
($pseudo=($_POST['pseudo']));
($pass=($_POST['pass']));
($confirmpass=($_POST['confirmpass']));
($email=($_POST['email']));
$bdd->beginTransaction();
$req = $bdd->prepare("INSERT INTO Membres(pseudo, pass, email, date_inscription) VALUES('$pseudo', '$pass', '$email', NOW())");
$req->execute(array(
'pseudo' => $pseudo,
'pass' => $pass,
'email' => $email,
));
$bdd->commit();
$bdd = null;
}
?>
</body>
</html>
Re: Création, validation zone membres.
Posté : 10 août 2012, 16:39
par Mazarini
Qu'est ce qui se passe si tu saisies 2 fois le même user ?
Une exception => var_dump($e) pour voir ou trouver le numéro de l'erreur - $e est l'exception interceptée dans un try / catch
Un code => var_dump($bdd->errorInfo())
Edit :
Error: 1022 SQLSTATE: 23000 (ER_DUP_KEY)
Message: Can't write; duplicate key in table '%s'
Re: Création, validation zone membres.
Posté : 10 août 2012, 16:43
par xTG
Edit: pouah trop rapide
Configures PDO pour les exceptions (voir la doc pour ça).
A la suite de cela l'erreur SQL duplicate entry (du fait de ton index unique) sera renvoyée sous forme d'exception lors de la tentative d'insertion.
Or il me semble que chaque PDOException a un numéro différent suivant l'erreur SQL.
Il te suffira donc de l'exécuter une fois pour afficher ce numéro et par la suite l'inclure dans ton code pour afficher un message d'erreur personnalisé.
Et si au pire je me plantais quand à ce numéro, tu auras ce numéro dans le texte de l'exception.
Un preg_match() ou compagnie pour l'extraire et le tour est joué.
Pour les exceptions voici un peu de doc :
http://fr.php.net/manual/fr/language.exceptions.php
Re: Création, validation zone membres.
Posté : 10 août 2012, 16:47
par Mazarini
Plus lent, mais plus clair...
Re: Création, validation zone membres.
Posté : 10 août 2012, 23:19
par Lodens
Re,
j'ai essayé avec ce code :
<html>
<head>
<title>Inscription</title>
</head>
<body>
<p>Inscription au site</p>
<form name="inscription" method="post" action="inscription.php">
<p>
<label for="pseudo">Votre pseudo :</label>
<input type="text" name="pseudo" id="pseudo" required />
<br />
<label for="pass">Votre mot de passe :</label>
<input type="password" name="pass" id="pass" required />
<br />
<label for="confirmpass">Confirmer le mot de pass :</label>
<input type="password" name="confirmpass" id="confirmpass" required />
<br />
<label for="email">Votre adresse email :</label>
<input type="email" name="email" id"email" required />
<br />
<input type="submit" name="envoyer" value="Envoyer" />
</p>
</form>
<?php
$bdd = new PDO('mysql:host=localhost;dbname=RankOne', 'root', '');
if (isset($_POST['envoyer'])){
($pseudo=($_POST['pseudo']));
($pass=($_POST['pass']));
($confirmpass=($_POST['confirmpass']));
($email=($_POST['email']));
try
{
$bdd->beginTransaction();
$insert = $bdd->query("INSERT INTO Membres VALUES('','$pseudo','$pass','$email',NOW())");
$bdd->commit();
}
catch (PDOException $e)
{
echo 'Pseudo ou email déjà utilisé', $e->getMessage();
}
$bdd = null;
}
?>
</body>
</html>
En rajoutant un
catch (PDOException $e)
{
echo 'Pseudo ou email déjà utilisé', $e->getMessage();
}
Mais sa ne marche pas je sais pas si il capte l'erreur.
Merci,
Loden.
Re: Création, validation zone membres.
Posté : 11 août 2012, 10:57
par xTG
Configures PDO pour les exceptions (voir la doc pour ça).

Re: Création, validation zone membres.
Posté : 11 août 2012, 12:41
par Loden
D'accord mais sa ce situe dans les extension php de wampserver ou il faut le télécharger ?
Re: Création, validation zone membres.
Posté : 11 août 2012, 16:27
par moogli
Re: Création, validation zone membres.
Posté : 12 août 2012, 00:12
par Loden
D'accord merci sa marche :p Et donc maintenant je peux enlever le
var_dump($e->getMessage())
Non pour seulement montrer le message que je veux.
Voilà mon code maintenant :
<?php
session_start();
include("identifiants.php");
?>
<html>
<head>
<title>Inscription</title>
</head>
<body>
<p>Inscription au site</p>
<form name="inscription" method="post" action="inscription.php">
<p>
<label for="pseudo">Votre pseudo :</label>
<input type="text" name="pseudo" id="pseudo" required />
<br />
<label for="pass">Votre mot de passe :</label>
<input type="password" name="pass" id="pass" required />
<br />
<label for="confirmpass">Confirmer le mot de pass :</label>
<input type="password" name="confirmpass" id="confirmpass" required />
<br />
<label for="email">Votre adresse email :</label>
<input type="email" name="email" id"email" required />
<br />
<input type="submit" name="envoyer" value="Envoyer" />
</p>
</form>
<?php
if (isset($_POST['envoyer'])){
($pseudo=($_POST['pseudo']));
($pass=($_POST['pass']));
($confirmpass=($_POST['confirmpass']));
($email=($_POST['email']));
try
{
$bdd->beginTransaction();
$insert = $bdd->query("INSERT INTO Membres VALUES('','$pseudo','$pass','$email',NOW())");
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$bdd->commit();
}
catch (PDOException $e)
{
echo 'Pseudo ou email deja utilise', var_dump($e->getMessage());
}
$bdd = null;
}
?>
</body>
</html>