IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Condition et requête


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 20
    Par défaut Condition et requête
    Bonjour à tous,

    Voilà j'essaye de faire un formulaire qui, une fois un email entré, traite son enregistrement dans la BDD. Si aucun enregistrement correspondant au email n'est déjà dans la BDD.

    Et sinan, et bien, je ne fait rien.

    Voici mon code

    Mon formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <FORM name="formulaire" METHOD=GET ACTION="Inscription.php" onsubmit="return check()">
    <div id="Connection_clt">
    			<div id="Contenu_Connection_Nveau_clt"><H2>Nouveau Client</H2>
    			Email* <br><INPUT type=text name="email" onKeyUp="javascript:couleur(this);"><br>
    			Confirmation Email* <br><INPUT type=text name="cemail" onKeyUp="javascript:couleur(this);"><br>
    			Mot de passe * <br><INPUT type=password name="pass" onKeyUp="javascript:couleur(this);"><br>
    			Confirmation mot de passe *<br><INPUT type=password name="cpass" onKeyUp="javascript:couleur(this);"><br>
    			<INPUT type=submit name="valider">
    			</div>
    		</Form>
    Puis le PHP de mon Inscription.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    email_existeBDD($_GET['email']); 
     
    function email_existeBDD ($email)
    		{
    		  $reponse = mysql_query("SELECT MAIL_CLIENT FROM client where MAIL_CLIENT='$email'"); 
     
    				if (!mysql_fetch_row($reponse)) //aucun enregistrement correspondant au email saisi !
    				{
    					echo '<h3> Bravo ! Inscription réalisée avec succès. </h3>';
                                            $email=$_GET['email'];
    					$pass=md5($_GET['pass']);
     
    					mysql_query("insert into client (ID_client, MAIL_CLIENT, PASSWORD_CLIENT) values('','$email','$pass')");
     
    				}
    				else
    				{
    					echo '<h3> Désolé mais un client possède déjà cet email.</h3>';
     
    				}
    		}
    (* Les valeurs par GET c'est pour tester forcément... *)
    Je rentre un email client qui n'est pas dans ma BDD et bizarrement .. Je rentre dans le else ... :S

    Et le pire, C que j'obtiens comme affichage "Désolé mais un client possède déjà cet email." ALORS QUE l'insert (contenu dans le IF) EST réalisé !

    Pouvez vous m'éclairez sur ce mystère
    Merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 453
    Par défaut
    Peux tu nous donner le code de ta page en entier ?
    Parce que lol, si ça passe à la fois la condition du if et du else, y a un gros problème

    Pour débugger :

    Mets ta requête (en chaîne de caractères) dans une variable, fais un echo de cette variable; et fais un var_dump de mysql_fetch_row($reponse)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 20
    Par défaut
    Je me doute bien qu'il y a un gros problème ...

    Voici l'echo de ma requête
    => SELECT MAIL_CLIENT FROM client where MAIL_CLIENT='er@.d'

    J'ai bien mentionné er@.d comme email. Donc normal !

    Ensuite le var_dump me donne

    array(1) { [0]=> string(5) "er@.d" }


    Je pense que C ma requête qui est mauvaise .. Cependant, je ne vois pas comment l'exprimer autrement.

    La détection de mon email dans ma BDD ne fonctionne pas du tout ! Créant des doublons et compagnie

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 48
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $reponse = mysql_query("SELECT MAIL_CLIENT FROM client where MAIL_CLIENT='$email'");
    ça ça marche pas.

    ça ça marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $reponse = mysql_query("SELECT MAIL_CLIENT FROM client where MAIL_CLIENT='".$email."'");

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 20
    Par défaut
    Pour clarifier les choses :

    - J'ai lancer en parallèle 2 de mes formulaires !
    - Je rempli le même email pour chacun
    - Je lance le premier puis le second.

    Normalement, je devrais avoir le 1er d'enregistré avec un affichage 'Bravo'
    Et le suivant, pas d'enregistrement et un désolé.

    On est d'accord.

    Et bien, voilà ce que j'obtiens

    1er cas : Enregistrement fait + Bravo ==> OK
    2eme cas : Enregistrement fait (doublons -_-) + message 'Désolé' ==> NOK

    1er var_dump : bool(false)
    2eme var_dump : array(1) { [0]=> string(4) "er@." }


    Voilà.

    Merci de votre aide

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 20
    Par défaut
    Citation Envoyé par Sladix Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $reponse = mysql_query("SELECT MAIL_CLIENT FROM client where MAIL_CLIENT='$email'");
    ça ça marche pas.

    ça ça marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $reponse = mysql_query("SELECT MAIL_CLIENT FROM client where MAIL_CLIENT='".$email."'");
    Et non..

    Avec ton changement Sladix, j'obtiens 2 'Bravo' et deux enregistrements (doublons)

    Toujours problème ..

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 20
    Par défaut
    Est ce que ça peut venir de l'encodage des caractères spéciaux de ma BDD ?

    C vraiment blazant cette affaire

  8. #8
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 617
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 617
    Par défaut
    A priori ta requête fonctionne, donc il faut changer la condition. A la place de mysql_fetch_row, je te conseille d'utiliser mysql_num_rows qui compte le nombre de résultats de la requête et éventuellement d'inverser la condition.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (mysql_num_rows($reponse) > 0)
    {
    	echo '<h3> Désolé mais un client possède déjà cet email.</h3>';
    }
    else
    {
    	echo '<h3> Bravo ! Inscription réalisée avec succès. </h3>';
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 20
    Par défaut
    Ca aurait du fonctionner.. J'étais pressé de tester ça.

    Ca marche pour le cas ou l'email existe déjà dans la BDD. Il ne fait pas l'enregistrement et ecrit 'Desolé'

    Cependant, j'ai toujours un problème lorsque le email n'est pas dans la BDD. L'affichage du else 'Désolé' avec tout de même l'enregistrement fait.

    Pourquoi cette affichage ???

    Je ne comprend vraiment pas. C illogique ! Que me conseillez-vous ?

    :-S J'ai besoin de cette création de compte ...

  10. #10
    Membre éclairé Avatar de Philcmoi
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 666
    Par défaut
    pourquoi ne pas essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    function email_existeBDD ($email)
    		{
    		  $reponse = mysql_query("SELECT MAIL_CLIENT FROM client where MAIL_CLIENT="'.$email.'""); 
     
    				Modifier ici if ($reponse==null) //aucun enregistrement correspondant au email saisi !
    				{
    					echo '<h3> Bravo ! Inscription réalisée avec succès. </h3>';
                                            $email=$_GET['email'];
    					$pass=md5($_GET['pass']);
     
    					mysql_query("insert into client (ID_client, MAIL_CLIENT, PASSWORD_CLIENT) values('','$email','$pass')");
     
    				}
    				else
    				{
    					echo '<h3> Désolé mais un client possède déjà cet email.</h3>';
     
    				}
    		}(* Les valeurs par GET c'est pour tester forcément

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    Puisque l'email doit être unique en base, pourquoi ne pas laisser la DB gérer le problème au lieu de faire des tests ?

    tu rajoutes une contrainte d'unicité sur ton champ MAIL_CLIENT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ALTER TABLE client ADD UNIQUE( MAIL_CLIENT )
    Puis ensuite tu essayes d'insérer sans te poser plus de questions.

    en cas de doublon, mysql_query() devrait retourner false et mysql_errno() te renverra (si je ne me trompe pas) une erreur 1062 (si tu veux t'assurer que le problème ne se situe pas ailleurs que le refus de doublon)

    genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if( !mysql_query("insert into client (ID_client, MAIL_CLIENT, PASSWORD_CLIENT) values('','$email','$pass')") ){
        if( mysql_errno() == 1062 ) echo 'Un client utilise déjà cette adresse';
    }

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 20
    Par défaut
    Citation Envoyé par Philcmoi Voir le message
    pourquoi ne pas essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    function email_existeBDD ($email)
    		{
    		  $reponse = mysql_query("SELECT MAIL_CLIENT FROM client where MAIL_CLIENT= " '.$email. ' " "); 
     
    				Modifier ici if ($reponse==null) //aucun enregistrement correspondant au email saisi !
    				{
    					echo '<h3> Bravo ! Inscription réalisée avec succès. </h3>';
                                            $email=$_GET['email'];
    					$pass=md5($_GET['pass']);
     
    					mysql_query("insert into client (ID_client, MAIL_CLIENT, PASSWORD_CLIENT) values('','$email','$pass')");
     
    				}
    				else
    				{
    					echo '<h3> Désolé mais un client possède déjà cet email.</h3>';
     
    				}
    		}(* Les valeurs par GET c'est pour tester forcément
    J'ai modifier mon code et avec cette modif'. Ma table client etant vide. J'obtiens en permanence des 'Désolé' et l'enregistrement n'est pas fait. :-S

    $reponse ne doit pas pouvoir être null..

    PS: la requête a une erreur d'ailleurs ^^

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 20
    Par défaut
    Citation Envoyé par Petibidon Voir le message
    Puisque l'email doit être unique en base, pourquoi ne pas laisser la DB gérer le problème au lieu de faire des tests ?

    tu rajoutes une contrainte d'unicité sur ton champ MAIL_CLIENT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ALTER TABLE client ADD UNIQUE( MAIL_CLIENT )
    Puis ensuite tu essayes d'insérer sans te poser plus de questions.

    en cas de doublon, mysql_query() devrait retourner false et mysql_errno() te renverra (si je ne me trompe pas) une erreur 1062 (si tu veux t'assurer que le problème ne se situe pas ailleurs que le refus de doublon)

    genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if( !mysql_query("insert into client (ID_client, MAIL_CLIENT, PASSWORD_CLIENT) values('','$email','$pass')") ){
        if( mysql_errno() == 1062 ) echo 'Un client utilise déjà cette adresse';
    }
    Je ne comprend vraiment pas ! Toujours le même problème. J'ai fait la modif' de la BDD.

    Et donc, je rentre les infos dans mon formulaire.
    Il procède bien à l'enregistrement du nouveau client (nouveau email) mais j'obtiens le 'Désolé' lors de celui-ci.

    Ensuite, la fonction marche très bien. Il m'affiche le désolé et ne fait pas l'enregistrement. M'enfin pourquoi ce 'Désolé' au premier enregistrement ?

  14. #14
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    Remet le code complet de ta fonction.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 20
    Par défaut
    La fonction ne marche pas lors du 1er enregistrement.. avec un 'Désolé'
    Cependant, l'enregistrement est fait.

    J'ai remarqué que si je suprime cette enregistrement de ma BDD. Et que je re-rempli le formulaire avec ce même mail ! Alors là, la fonction marche !

    Puis au second remplissage toujours avec le même mail. La, j'obtiens bien le 'désolé' sans l'enregistrement.

    Voici le diagnostics!

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 20
    Par défaut
    @Petibidon : OK ! (PS: j'étais entrain de modifier un peu ton code ^^')


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	function email_existeBDD ($email)
    		{
    $pass=md5($_GET['pass']);
    				$reponse=mysql_query("insert into client (ID_client, MAIL_CLIENT, PASSWORD_CLIENT) values('','$email','$pass')");
    				    if (!$reponse)
    					{
    						if(mysql_errno() == 1062) echo 'Désolé';
    					}
    					else {echo 'Bien !!';}
    }
    J'ai pas fini.. J'essaye de m'inspirer de ceux-ci
    http://www.developpez.net/forums/d71...nregistrement/

    Apparement, C le même problème

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 20
    Par défaut
    Je vais essayer avec un simple count.. on verra bien

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 20
    Par défaut
    Magique quand même cette chose !

    voici mon nouveau code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    	function email_existeBDD ($email)
    		{
     
     
    		  $reponse = mysql_query("select count(*) FROM client where MAIL_CLIENT='$email'"); 
     
    				echo mysql_result($reponse,0,0);// donne la valeur du compte (si email existant ou pas)
    				if (mysql_result($reponse,0,0)==0)
    				{
    				echo '<h3> Bravo ! Inscription réalisée avec succès. </h3>';
     
    					$pass=md5($_GET['pass']);
     
    					mysql_query("insert into client (ID_client, MAIL_CLIENT, PASSWORD_CLIENT) values('','$email','$pass')"); 
     
    					}
    				else
    				{
    					echo '<h3> Désolé mais un client possède déjà cet email.</h3>';
    				}
    }
    Alors lorsque je rentre un email existant, j'obtiens un 1 et un 'Désolé' puis lorsque je met un nouveau email inconnu dans ma BDD.

    Il ose me mettre le 1 suivi du 'Désolé'

    Mais ou est le problème ....

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 20
    Par défaut
    Mon appel de fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    email_existeBDD($_GET['email']);

  20. #20
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    Vu que le code parait correct, on va passer aux hypothèses improbables.

    Ajoute ceci en tête de ton script php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date dans le passé
    Et vide le cache de ton navigateur.

Discussions similaires

  1. [AC-2003] Checkbox pour activer condition dans requête + calendrier
    Par basoil dans le forum IHM
    Réponses: 3
    Dernier message: 30/04/2009, 17h09
  2. condition dans requête access
    Par joelp68 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 29/11/2008, 16h19
  3. Réponses: 5
    Dernier message: 24/10/2008, 09h20
  4. [MySQL] Condition dans requète
    Par malabarbe dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 23/05/2008, 09h53
  5. condition dans requête select
    Par lionel256 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/05/2008, 10h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo