Portail PHP

Forum de discussion et d'aide au php

Vous n'êtes pas identifié.

Annonce

Regles d'utilisation des forums : pensez à toujours les respecter si vous désirez obtenir des réponses rapides.
FAQ : pensez à toujours chercher dedans si la réponse à votre question est dedans.
Proposez vos news : si vous avez un evenement à annoncer
le chat : venez discuter de php.
 

#1 15-01-2008 19:04:20

Myst3ry
Membre
Date d'inscription: 15-01-2008
Messages: 114

[php] Problème dans un script de Gestion de Membre

Bonjour à vous tous,

Il y a un bon moment j'ai créé un site web en (X)HTML...
C'est bien beau mais j'ai voulus ensuite pouvoir automatiser des petites chose pour me faciliter la tache et c'est là que j'ai décidé de créer un espace membre pour que le visiteur sois en mesure s'enregistrer et par la suis enregistrer des chose sur son Acount pour ensuite quand il se reconnecte retrouver les info qu'il avait enregistrer.

Mais voilà que je bloque déjà au début :S

J'ai réussi (sans trop de difficulté) à créer mon espace membre (INSCRIPTION) mais je me suis aperçus en faisant quelques test que un visiteur pouvait facilement se RECRER un Acount avec le Même EMAIL sans que MySQL ne dise un mot.

Alors je me suis lancé sur ce problème, consulté le Web, les forums et bâti mon script sur les infos recueilli, mais je suis encore bloqué.

Mon problème est que quand le visiteur fait enregistré et bien je demande a MySQL de rechercher dans ma BDD et dans la bonne table si le email est déjà présent (plus précisément de compter tout les emails identiques et de mettre le nombre dans une variable EX:$email_same) Je lui met une limite de 1 et ensuite je dit:
-SI $email_same est différent de 0
   C'est une erreur
-sinon tu laisses envois vers un autre page...

Bon jusqu'ici sa va Voici mon code (je dirai ensuite le problème) :
CODE PHP

Code:

 
if ($code == $_SESSION['code'] AND $password_enter == $password_enter_compare AND $email_enter != "" )  //Pas important C'est à titre d'info
{  
 echo "Password(s)...OK"; 
  
 mysql_connect("localhost", "root", "monpassword" ) or die(mysql_error()); // Connexion à MySQL 
 mysql_select_db("maBDD" ) or die(mysql_error()); // Sélection de la base 
  
 $sql = mysql_query('SELECT COUNT(MEM_COURRIEL) FROM membre WHERE MEM_COURRIEL=\''.$email_enter.'\' '); //regarder ici
 if(mysql_num_rows($sql)!=0) 
 { 
 echo mysql_affected_rows(); 
 echo '<br />cette adresse est déjà présente en base'; 
 } 
 else 
 { 
 ?> 
                     //MA PAGE DE RÉUSSITE ET LE CODE POUR AJOUTER L'ENTRER LA LIGNE 
 <?php 
 } 
} 
...

Je n'est pas tout affiché mon script complet de ma apge parce que j'ai un autre script d'envois d'email pour la validation etc....

Noté que $email_enter était avant $_POST['email_enter'] mais que j'ai mit dans la variable $email_enter pour plus de facilité (de même pour $code etc.. (au début))

Bon alors à met yeux mon code fonctionne mais il affiche toujours le message :«Cette adresse est déjà.....» même si le email n'existe pas! dans ma BDD j'ai ajouté (AVANT) une entré avec comme email blablabla@hotmail.com alors même si je test et que je met dans l'espace email (dans le formulaire) dsafadsfadsfads il me dit que se Email existe (Autrement dit il ne va jamais au else). J'ai donc fais afficher la variable pour voir ce quelle contenait et elle est toujours à 1! il est donc normal que sa marque le message d'erreur mais pourquoi elle est toujours à 1? J'ai beau mettre au début de mon code:

$sql = ""

Sa ne change rien... ce qui voudrais dire que peu importe le résultat de la recherche il met 1 dans la variable?

Alors je vous fais appelle en espérant qu'un être généreux m'aide un peu sur mon script et si il y à une façon de simplifier mon script ou quelque chose du genre merci de me prévenir   

Merci d'avance d'avoir lit mon message et à toute personne qui tentera de m'aider.

Salutation.
Maxime.

Dernière modification par Myst3ry (15-01-2008 19:06:35)

Hors ligne

 

#2 15-01-2008 19:54:10

Shiva
Moderateur
Lieu: BONNEUIL SUR MARNE
Date d'inscription: 15-11-2005
Messages: 299
Site web

Re: [php] Problème dans un script de Gestion de Membre

Salut,
Le problème se trouve dans ta requête SQL. Telle que tu l'as écrite avec le COUNT(MEM_COURRIEL) tu aura toujours au moins une ligne car tu demande à compter le nombre de mails présent dans ta table. Si il ne trouve rien il renvera une ligne contenant simplement le chiffre 0, mais c'est tout de même une ligne.
Tu fais d'ailleurs un "echo mysql_affected_rows();" qui doit t'afficher le chiffre 1.

Pour regler le problème, virre simplement le COUNT :

Code:

$sql = mysql_query('SELECT MEM_COURRIEL FROM membre WHERE MEM_COURRIEL = "'.$email_enter.'"');

Hors ligne

 

#3 15-01-2008 20:39:30

Myst3ry
Membre
Date d'inscription: 15-01-2008
Messages: 114

Re: [php] Problème dans un script de Gestion de Membre

Shiva a écrit:

Salut,
Le problème se trouve dans ta requête SQL. Telle que tu l'as écrite avec le COUNT(MEM_COURRIEL) tu aura toujours au moins une ligne car tu demande à compter le nombre de mails présent dans ta table. Si il ne trouve rien il renverra une ligne contenant simplement le chiffre 0, mais c'est tout de même une ligne.
Tu fais d'ailleurs un "echo mysql_affected_rows();" qui doit t'afficher le chiffre 1.

Pour regler le problème, virre simplement le COUNT :

Code:

$sql = mysql_query('SELECT MEM_COURRIEL FROM membre WHERE MEM_COURRIEL = "'.$email_enter.'"');

Bonjour,

Merci de ton aide qui ma sauvé beaucoup de mots de têtes, mais entre-temps j'ai cherché de mon côté et j'ai remarqué que mon transfert de variable n'était pas correcte.

Regarde mon code:

Code:

    $sql = mysql_query('SELECT COUNT(*) AS nbemail FROM membre WHERE mem_courriel="'.$email_enter.'"'); //ICI
    $donnees = mysql_fetch_array($sql);
    if($donnees['nbemail'] != 0)
    {
    echo $donnees['nbemail'];
    echo '<br />cette adresse est deja présente en base';
    }

Mais maintenant sa fonctionne mais je vois bien que ta façon est BEAUCOUP plus simple big_smile
Et Après test elle fonctionne très bien! Je n'avais pas réalisé qu'il renvoyait toujours une ligne mais c'est très logique!

Encore merci pour ton aide et à l'avenir je vais venir sur ce forum! L'aide est rapide et efficace!

Signé Maxime

(J'ai coché Résolu)

Hors ligne