Comment éviter compte client existe 2fois

Résolu/Fermé
Lolo - Modifié par Lolo le 28/06/2011 à 15:53
 Lolo - 1 juil. 2011 à 10:57
Bonjour,

J'ai mis en place un formulaire de création de compte et une requête/condition associée qui dit :

Si tous les champs demandés sont renseignés alors envoie des données dans la bdd et par mail au client pour résumé des identifiants

Sinon message : "Veuillez renseigner tous les champs demandés" et ne s'enregistre pas dans la bdd.

Je souhaiterais en plus de cette première condition en réaliser une autre qui empêcherait la création de deux comptes possédants les mêmes identifiants ?

Mon code :

<?php

try

{
// On se connecte à MySQL
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=album_photos', 'root', '', $pdo_options);

{
if(($_POST['nom']) AND ($_POST['prenom']) AND ($_POST['adresse']) AND ($_POST['code_postale']) AND ($_POST['ville']) AND ($_POST['pays']) AND ($_POST['email']) AND ($_POST['mot_de_passe']) != null)
{
mail ($_POST['email'], $titre, $message, $header);
?>
<script type="text/javascript" >
alert("Votre compte vient d'être créé");
window.location.replace("http://localhost/album_photos/creation_compte.php");
</script>
<?php
$req=$bdd->prepare('INSERT INTO session (nom, prenom, adresse, code_postale, ville, pays, email, telephone, mot_de_passe) VALUES (:nom, :prenom, :adresse, :code_postale, :ville, :pays, :email, :telephone, :mot_de_passe)');
$req->execute(array(
'nom' => $_POST['nom'],
'prenom' => $_POST['prenom'],
'adresse' => $_POST['adresse'],
'code_postale' => $_POST['code_postale'],
'ville' => $_POST['ville'],
'pays' => $_POST['pays'],
'email' => $_POST['email'],
'telephone' => $_POST['telephone'],
'mot_de_passe' => $_POST['mot_de_passe']));

$req->closeCursor();
}
else
{
?>
<script type="text/javascript" >
alert("Veuillez renseigner tous les champs demandés");
window.location.replace("http://localhost/album_photos/creation_compte.php");
</script>
<?php
}
}
}
catch(Exception $e)
{
die('Erreur: '.$e->getMessage());
}


?>

Merci pour votre aide...



A voir également:

9 réponses

Meoran Messages postés 1562 Date d'inscription vendredi 28 août 2009 Statut Membre Dernière intervention 8 avril 2015 204
Modifié par Meoran le 28/06/2011 à 16:55
Salut,

il faut mettre une contrainte d'unicité dans ta base de données, sur les champs que tu souhaites unique (login, adresse mail...)
0
J'ai fais ça (partie du code premier message) :

{
if(($_POST['nom']) AND ($_POST['prenom']) AND ($_POST['adresse']) AND ($_POST['code_postale']) AND ($_POST['ville']) AND ($_POST['pays']) AND ($_POST['email']) AND ($_POST['mot_de_passe']) != null)
if (!mysql_fetch_row($_POST['email'])== null)
{
mail ($_POST['email'], $titre, $message, $header);
?>

et ça me marque l'erreur suivante :

Warning: mysql_fetch_row() expects parameter 1 to be resource, string given in ... on line 29

Que dois je faire ???
0
Meoran Messages postés 1562 Date d'inscription vendredi 28 août 2009 Statut Membre Dernière intervention 8 avril 2015 204
28 juin 2011 à 16:57
Non, c'est dans la structure de ta bd que tu dois définir une contrainte d'unicité.

Quelque chose du genre :

ALTER TABLE "User"
ADD CONSTRAINT "Unique_Email" UNIQUE("Email");
0
euh ???
Désolé je suis pommée...
Je ne sais pas ce que cela signifie ?
0

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

Posez votre question
Meoran Messages postés 1562 Date d'inscription vendredi 28 août 2009 Statut Membre Dernière intervention 8 avril 2015 204
28 juin 2011 à 17:03
Ce n'est pas en php que se définit ta contrainte d'unicité mais en SQL

MySQL permet directement de dire que chaque valeur du champ "mail" dans la bd ne doit se retrouver qu'une seule et unique fois au maximum.

Ceci se fait avec la commande du dessus.

Tu utilises phpMyAdmin ?
0
OUI phpMyAdmin
0
j'ai trouvé dans bdd. Petit icône U.
Pour le mdp ça a marché mais pour l'email il marque :
#1170 - BLOB/TEXT column 'email' used in key specification without a key length

???
0
Meoran Messages postés 1562 Date d'inscription vendredi 28 août 2009 Statut Membre Dernière intervention 8 avril 2015 204
Modifié par Meoran le 28/06/2011 à 17:13
Email est la clef primaire de ta table ?
0
Non.
id est la clef primaire...
0
Meoran Messages postés 1562 Date d'inscription vendredi 28 août 2009 Statut Membre Dernière intervention 8 avril 2015 204
Modifié par Meoran le 28/06/2011 à 17:11
Bien alors tu peux faire de deux façons :

- soit tu entres la commande du dessus (avec ton champ que tu souhaites rendre unique et la table qui va avec ) directement à l'endroit ou tu peux rentrer une commande SQL.

- ou tu peux le faire par interface graphique en cochant "unique" quelque part en face du champ voulu

(désolé peut pas être plus précis, pas phpmyadmin sous la main...)
0
Meoran Messages postés 1562 Date d'inscription vendredi 28 août 2009 Statut Membre Dernière intervention 8 avril 2015 204
28 juin 2011 à 17:12
(et il est idiot de mettre un mdp unique. Pourquoi interdirais tu à deux personnes différentes d'avoir le même mot de passe ??)
0
En fait je souhaite tout simplement refuser la création de deux comptes similaires (même email et même mdp).
Je ne dois peut être pas faire comme dit précédemment finalement ??
0
Meoran Messages postés 1562 Date d'inscription vendredi 28 août 2009 Statut Membre Dernière intervention 8 avril 2015 204
29 juin 2011 à 09:42
Bah non, il ne faut pas créer une contrainte d'unicité sur chaque, mais une contrainte d'unicité sur le couple, ce qui est tout à fait différent !

ALTER TABLE "User"
ADD CONSTRAINT "Unique_couple_emailmdp" UNIQUE("Email","mdp");

ce qui est tout à fait différent de :

ALTER TABLE "User"
ADD CONSTRAINT "Unique_Email" UNIQUE("Email");
ALTER TABLE "User"
ADD CONSTRAINT "Unique_mdp" UNIQUE("mdp");
0
Il m'affiche cette erreur :

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"User" ADD CONSTRAINT "Unique_couple_emailmdp" UNIQUE("Email","mdp")' at line 1
0
Pour ce qui est de l'unicité, je l'ai faite que sur l'email. Cela permet à deux clients différents de s'identifier avec deux email différents mais avec le même mdp.
Ca marche !

Par contre comment puis je faire pour récupérer cette unicité et afficher un message au client lorsque son email est déjà enregistré dans la bdd ?
0
Creutzou Messages postés 550 Date d'inscription lundi 17 mai 2010 Statut Membre Dernière intervention 30 mai 2013 30
Modifié par Creutzou le 29/06/2011 à 11:08
salut,

C'est super grossier, mais je ferais quelque chose comme ça :
$req = "select count(email) from masuperbetable where email='lenouvelemail'"; 
$nbmail = $PDO->query($req); 
if ($nbmail<1){ 
    echo 'Mail unique'; 
     
}else{ 
    echo 'mail deja present dans la base'; 
} 


Tout vient à point à qui sait attendre
~~ Cr3u7z0u ~~
0
Meoran Messages postés 1562 Date d'inscription vendredi 28 août 2009 Statut Membre Dernière intervention 8 avril 2015 204
Modifié par Meoran le 29/06/2011 à 11:49
J'avoue c'est super grossier ^^. Mais ça marche ^^

Le plus propre serait de générer une erreur lors d'une tentative de viol de cette contrainte d'unicité (tu utilises PDO ?) et dans le traitement de cette erreur, tu affiches le message d'erreur voulu.
0
Je suis tout ouïe pour connaître cette méthode ???
Oui j'utilise PDO.
0
Creutzou Messages postés 550 Date d'inscription lundi 17 mai 2010 Statut Membre Dernière intervention 30 mai 2013 30
29 juin 2011 à 11:42
comment tu ferais ça ? tu tenterais de mettre la nouvelle adresse, et de récupérer l'exception ?
0
Meoran Messages postés 1562 Date d'inscription vendredi 28 août 2009 Statut Membre Dernière intervention 8 avril 2015 204
29 juin 2011 à 11:53
Je répondrais ce soir, dsl, je suis au boulot là ^^

Mais promis je le ferais ^^
0
help !!!!
Je ne sais pas encore ce que j'ai foutu mais phpMyAdmin ne veut plus s'ouvrir. Il marque :
phpMyAdmin - Erreur

Erreur lors du démarrage de la session, veuillez vérifier les erreurs indiquées par PHP ou dans le fichier témoin du serveur web, et configurer PHP correctement.

De quoi parle t-il ? Je n'ai rien changé par rapport à quand ça marché ???
0