Bonjour à tous !
Je possède un formulaire d’inscription basique notamment avec adresse e-mail et référence à 6 chiffres.
La validation de l'inscription se fait manuellement par l'admin.
Je possède pour cela 2 tables :
On va dire une table validation et utilisateurs.
Validation permet de mettre tous les champs d'un utilisateur en "attente" de validation de la part de l'administrateur qui via une ligne de commande basique permet d’insérer l'ensemble des champs de validation dans utilisateurs et de supprimer les champs validation une fois fait via l'ID correspondant.
Le soucis c'est que j'aimerai vérifier si l'e-mail et la référence est déjà connu dans les 2 tables afin d'éviter qu'un utilisateur s'enregistre plusieurs fois même si ce dernier n'a pas son compte validé. Pour l'instant le code suivant vérifie juste la présence de ces données seulement dans la table utilisateurs. Comment faire pour vérifier cela également dans la table validation.
UNION semble tout trouvé mais je ne vois pas comment le placer de manière simple...
Genre comme cela mais qui ne fonctionne pas...
Modifié par Gianni54 (17 Apr 2018 - 18:48)
Je possède un formulaire d’inscription basique notamment avec adresse e-mail et référence à 6 chiffres.
La validation de l'inscription se fait manuellement par l'admin.
Je possède pour cela 2 tables :
On va dire une table validation et utilisateurs.
Validation permet de mettre tous les champs d'un utilisateur en "attente" de validation de la part de l'administrateur qui via une ligne de commande basique permet d’insérer l'ensemble des champs de validation dans utilisateurs et de supprimer les champs validation une fois fait via l'ID correspondant.
Le soucis c'est que j'aimerai vérifier si l'e-mail et la référence est déjà connu dans les 2 tables afin d'éviter qu'un utilisateur s'enregistre plusieurs fois même si ce dernier n'a pas son compte validé. Pour l'instant le code suivant vérifie juste la présence de ces données seulement dans la table utilisateurs. Comment faire pour vérifier cela également dans la table validation.
UNION semble tout trouvé mais je ne vois pas comment le placer de manière simple...
Genre comme cela mais qui ne fonctionne pas...
('SELECT id FROM utilisateurs WHERE email = ? UNION SELECT id FROM validation WHERE email = ?');
<?php
session_start();
require_once 'db.php';
require_once 'functions.php';
if(!empty($_POST))
{
$errors = array();
if(empty($_POST['nom']) || !preg_match('/^[a-zA-ZàâäéèêëîïôöùûüçÀÂÄÉÈÊËÎÏÔÖÙÛÜÇ \'-]+$/', $_POST['nom']))
{
$errors['nom'] = "Nom invalide !";
}
if (empty($_POST['prenom']) || !preg_match('/^[a-zA-ZàâäéèêëîïôöùûüçÀÂÄÉÈÊËÎÏÔÖÙÛÜÇ \'-]+$/', $_POST['prenom']))
{
$errors['prenom'] = "Prénom invalide !";
}
if (empty($_POST['reference']) || !preg_match('/^[0-9]{6}+$/', $_POST['reference']))
{
$errors['reference'] = "Numéro de référence invalide !";
} else
{
$req = $pdo->prepare('SELECT id FROM utilisateurs WHERE reference = ?');
$req->execute([$_POST['reference']]);
$user = $req->fetch();
if($user)
{
$errors['reference'] = 'Numéro de référence déjà utilisé !';
}
}
if (empty($_POST['email']) || filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) != $_POST['email2'])
{
$errors['email'] = "Les e-mails saisis ne correspondent pas ou sont invalides !";
} else
{
$req = $pdo->prepare('SELECT id FROM utilisateurs WHERE email = ?');
$req->execute([$_POST['email']]);
$user = $req->fetch();
if($user)
{
$errors['email'] = 'Email déjà utilisé !';
}
}
if (empty($_POST['pass']) || $_POST['pass'] != $_POST['pass2'])
{
$errors['pass'] = "Les mots de passe saisis ne correspondent pas ou sont invalides !";
}
if(empty($errors))
{
$req = $pdo->prepare("INSERT INTO validation SET nom = ?, prenom = ?, reference = ?, email = ?, pass = ?, confirmation_token = ?");
$password = password_hash($_POST['pass'], PASSWORD_BCRYPT);
$token = str_random(60);
$req->execute([$_POST['nom'], $_POST['prenom'], $_POST['reference'], $_POST['email'], $password, $token]);
$user_id = $pdo->lastInsertId();
header('Location: success.php');
exit();
}
}
?>
Modifié par Gianni54 (17 Apr 2018 - 18:48)