Salut à tous !

J'ai un petit soucis dans mon formulaire d'inscription. J'aimerai que si jamais une personne s'inscrive et qu'il a déjà le même pseudo qu'un autre eh bien ca lui affiche qu'un membre possède déjà ce même pseudo (jusque là ca marche), mais j'aimerai que ca fasse pareil avec l'ip, je m'explique :
Membre 1 : Pseudo = Moi & Ip = 2
Membre 2 : Pseudo = Toi & Ip = 2
En gros, le pseudo est différent mais l'ip est identique, donc là ca coince, le membre ne peux pas s'inscrire !

Mais voilà, avec l'ip ca marche pas.. Voici mon code :

<?php
    require "config.php";
    mysql_connect(DB_HOST,DB_LOGIN,DB_PASS);
    mysql_select_db(DB_BDD); 

    extract($_POST);

    $erreur ="";

    if(isset($_POST'pseudo']) && isset($_POST'pass']) && isset($_POST'verif_pass'])){
        if(!empty($_POST'pseudo']) && !empty($_POST'pass']) && !empty($_POST'verif_pass'])){
            if($_POST'pass'] != $_POST'verif_pass']){
                $erreur = "Les deux mot de passe sont différent";
            }else{
            $ip = $_SERVER"REMOTE_ADDR"];
            $pseudo = mysql_real_escape_string($_POST'pseudo']);
            $pass = mysql_real_escape_string($_POST'pass']);
            $mail = mysql_real_escape_string($_POST'mail']);
            $pass = sha1($pass);

            $sql = "SELECT COUNT(*) AS nbr FROM membres WHERE pseudo='".$pseudo."' AND ip='".$ip."'";
            $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
            $data = mysql_fetch_assoc($req);

                if($data'nbr'] == 0){
                    $sql = "INSERT INTO membres (pseudo,pass,ip,mail, level) VALUES ('$pseudo','$pass','$ip','$mail', '1')";
                    mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
                    $erreur = "Tu as bien été inscris.";
                }else{
                    $erreur = "Un membre possède déjà ce même pseudo.";
                }
            }
        }else{
            $erreur = "Au moins un champ est vide.";
        }
    }
?>

Merci d'avance :D
Bye !

5 réponses


djtec
Réponse acceptée

Et bien tu fais exactement comme avec le pseudo

$sql = "SELECT COUNT(*) AS nbr FROM membres WHERE pseudo='".$pseudo;
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_fetch_assoc($req);
$sql2 = "SELECT COUNT(*) AS nbr FROM membres WHERE ip='".$ip;
$req2 = mysql_query($sql2) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data2 = mysql_fetch_assoc($req2);
if($data'nbr'] != 0) {
   // Erreur si pseudo existe
} else if($data2'nbr'] != 0) {
   // Erreur si ip existe
} else {
   // Ton insert into si pas d'erreur
}
SnoT
Réponse acceptée

Salut,

tu as juste à modifier ta requête SQL comme ça, en remplacant le AND par un OR :

$sql = "SELECT COUNT(*) AS nbr FROM membres WHERE pseudo='".$pseudo."' OR ip='".$ip."'";

D'ailleurs avec ton code actuel, si je tente de m'inscrire avec un pseudo déjà pris, mais que je n'ai pas la même adresse IP, ça marche quand même, vu que les 2 conditions ne sont pas remplies (vu que tu utilisais un AND).

Par ailleurs, si tu souhaites personnaliser ton message d'erreur, tu devrais faire la reqûete suivante, puis le traitement suivant dessous :

$sql = "SELECT `pseudo`, `ip` FROM `membres` WHERE `pseudo`='".$pseudo."' OR `ip`='".$ip."' LIMIT 1";
            $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
            $data = mysql_fetch_assoc($req);

            if(sizeof($data) and $data'pseudo'] != $pseudo AND $data'ip'] != $ip){
                $sql = "INSERT INTO `membres` (`pseudo`,`pass`,`ip`,`mail`, `level`) VALUES ('$pseudo','$pass','$ip','$mail', '1')";
                mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
                $erreur = "Tu as bien été inscris.";
            }elseif($data'pseudo'] == $pseudo){
                $erreur = "Un membre possède déjà ce même pseudo.";
            }elseif($data'ip'] == $ip){
                $erreur = "Un membre possède est déjà enregistré avec cette adresse IP.";
            }

Note le LIMIT 1 dans la requête. Dans ton cas on veut seulement savoir si au moins un membre possède déjà le pseudo ou l'ip.
Note aussi les backquotes dans la requête ( ) qui sont aussi une protection en plus contre les injections SQL même si tu utilises mysql_real_escape_string().

En espérant avoir pu t'aider.

Babou
Auteur

J'ai pris la version de code de djtec ! Merci quand même SnoT :D
Ca marche niquel, résolu :)

Le code de SnoT te permet de le faire en une seule requête et c'est quand même mieux je voulais te le proposé en 1 seule requête mais je me rappelais plus de l'opérateur OR donc utilise plutôt celle de SnoT.

Car moins y a de requête et plus ton script va vite.

Babou
Auteur

D'accord, ben merci beaucoup à vous deux :D