Comment éviter compte client existe 2fois
Résolu
Lolo
-
Lolo -
Lolo -
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...
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:
- Comment éviter compte client existe 2fois
- Créer un compte google - Guide
- Comment créer un compte gmail - Guide
- Comment savoir qui regarde mon compte facebook - Guide
- Filezilla client - Télécharger - Téléchargement & Transfert
- Installer windows 10 sans compte microsoft - Guide
9 réponses
Salut,
il faut mettre une contrainte d'unicité dans ta base de données, sur les champs que tu souhaites unique (login, adresse mail...)
il faut mettre une contrainte d'unicité dans ta base de données, sur les champs que tu souhaites unique (login, adresse mail...)
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 ???
{
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 ???
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");
Quelque chose du genre :
ALTER TABLE "User"
ADD CONSTRAINT "Unique_Email" UNIQUE("Email");
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 ?
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 ?
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
???
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
???
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...)
- 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...)
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");
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");
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 ?
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 ?
salut,
C'est super grossier, mais je ferais quelque chose comme ça :
Tout vient à point à qui sait attendre
~~ Cr3u7z0u ~~
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 ~~
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é ???
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é ???