@chapt0011 : non pour l'égalité le like est une hérésie en terme de ressource
tu as oublié les ' autours de la chaine de caractère
@ aenarion33
merci d'utiliser le bbcode php c'est vachement mieux en couleur
tu a une erreur de conception dans ton code
<?php
$req = $bdd->query('SELECT pseudo, pass, email FROM membres WHERE pseudo="' . $pseudo1 . '"');
$ligne = $req->fetch();
if ($req == true) { // est ce que la requete c'est bien passée ?
// oui on est renvoyé aute part
header('Location: connection3.php');
} elseif ($pass1 != $pass2 OR $email1 != $email2 AND $req == false) {
// est ce que les mot de passe ou email sont différents et que la requete est ko
header('Location: connection2.php');
} elseif ($pass1 == $pass2 AND $email1 == $email2 AND $req == false) {
// mot et email ok mais requete ko
$req2 = $bdd->prepare('INSERT INTO membres(pseudo, pass, email) VALUES (:pseudo, :pass, :email)');
$req2->execute(array('pseudo' => $pseudo1, 'pass' => $pass1, 'email' => $email1));
header('Location: creer2.php');
}
tu commence par récupérer des données qui ne servent pas.
ensuite tu test si la requête c'est bien passé? Mais tu oublie que même si la requête ne retourne rien elle peux correctement s’exécuter. D’ailleurs, dans ton cas la requête est syntaxiquement correcte ton il n'y a pas de raison qu'elle échoue.
Il faut que tu comprenne que query retourne false lorsqu'il y a une erreur SQL or le fait que le pseudo ne soit pas présent (ou qu'il le soit d'ailleurs) ce n'est pas une erreur SQL).
ton premier test est donc inutile
je suppose que le but est de valider un formulaire, dans ce cas je ferais plutôt ainsi (c'est fait rapidment il faut quand même tester).
<?php
try {
if (empty($_POST['password']) || empty($_POST['password2']) || empty($_POST['email']) || empty($_POST['email'])
|| ($_POST['password'] != $_POST['password2']) || ($_POST['email'] != $_POST['email2'])
) {
// est ce que les mot de passe ou email sont différents et que la requete est ko
header('Location: connection2.php');
} else {
$bdd = new PDO('');
$req = $bdd->query('SELECT count(1) as nb FROM membres WHERE pseudo=' . $bdd->quote($pseudo1));
$ligne = $req->fetch(PDO::FETCH_OBJ);
$req->closeCursor();
if ($ligne->nb == 0) {
$sql = 'INSERT INTO membres(pseudo, pass, email) VALUES (';
$sql .= $bdd->quote($_POST['pseudo']) . ' ,';
$sql .= $bdd->quote($_POST['password']) . ' ,';
$sql .= $bdd->quote($_POST['email']);
$sql .= ')';
$bdd->query($sql);
header('Location: creer2.php');
} else {
// le pseudo existe déjà
header('Location: connection3.php'); // je suppose ?
}
}
} catch (PDOException $e) {
echo 'Erreur SQL : ' . $e->getMessage();
}
par principe ou ne récupère pas de donnée qui ne servent pas.
les variables temporaires ne sont utile que si cela facilite la lecture (donc $pass = $_POST['password'] est inutile, on perd ml'information de l'origine).
Les requêtes préparées ne sont pas vraiment utile dans ton cas (elle sont simulée par défaut et font ce que j'ai fat à la main).
utiliser des fichiers numéroté n'est pas non plus une bonne idée, mais si au départ cela semble l'être (tu peux surement tous faire sur le même fichier avec des paramètres sans parler du fait que cela serait surement plus efficace ?).
Dernière chose : quand tu as un problème n'oublie pas de décrire précisément ce problème, d'ajouter les éventuels messages d'erreurs et surtout de nous dire ce que tu souhaite au final (c'est évident pour toi mais pas pour nous

)
@+