Création, validation zone membres.

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Création, validation zone membres.

Re: Création, validation zone membres.

par Loden » 12 août 2012, 00:12

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> 

Re: Création, validation zone membres.

par moogli » 11 août 2012, 16:27

C'est tout simplement dans la doc de php http://fr2.php.net/manual/fr/pdo.error-handling.php

Tu peux aussi regarder le tuto du site du zéro http://www.siteduzero.com/tutoriel-3-34 ... x-bdd.html

@+

Re: Création, validation zone membres.

par Loden » 11 août 2012, 12:41

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.

par xTG » 11 août 2012, 10:57

Configures PDO pour les exceptions (voir la doc pour ça).
;)

Re: Création, validation zone membres.

par Lodens » 10 août 2012, 23:19

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.

par Mazarini » 10 août 2012, 16:47

Plus lent, mais plus clair...

Re: Création, validation zone membres.

par xTG » 10 août 2012, 16:43

Edit: pouah trop rapide :P

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.

par Mazarini » 10 août 2012, 16:39

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.

par Loden » 10 août 2012, 16:25

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.

par xTG » 10 août 2012, 16:15

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.

par Mazarini » 10 août 2012, 16:05

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

Création, validation zone membres.

par Loden » 10 août 2012, 16:01

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.