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 : le else ne s'execute pas


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Par défaut Condition : le else ne s'execute pas
    Bonjour,
    j'ai un petit script pour lancer une session j'ai donc fait un if else et le else ne s'exécute pas, bien que les infos soient érronées.

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    <?php
    include('connect.php');
    if(isset($_POST['login'])AND isset($_POST['pass']))
    	{
    	$login = $_POST['login'];
    	$pass = $_POST['pass'];
    	if($login != NULL AND $pass != NULL)
    		{
    		$rep = mysql_query("SELECT * FROM acces_boutique WHERE login_acces_boutique = '$login' AND pass_acces_boutique = '$pass'");
    		if (!empty($rep))
    			{
    			while($tab = mysql_fetch_array($rep))
    				{
    				$id_acces_boutique = $tab['id_acces_boutique'];
    				$gerant_acces_boutique = $tab['gerant_acces_boutique'];
    				$login_acces_boutique = $tab['login_acces_boutique'];
    				$pass_acces_boutique = $tab['pass_acces_boutique'];
    				session_start();
    				$_SESSION['id'] = $id_acces_boutique;
    				$_SESSION['gerant'] = $gerant_acces_boutique;
    				$_SESSION['login'] = $login_acces_boutique;
    				$_SESSION['pass'] = $pass_acces_boutique;
    				header("location:admin-boutique.php");
    				}
    			}
    		else
    			{
    			header("location:acces_boutique.html");
    			}
    		}
    	}
    mysql_close();
    ?>
    Merci de vos aides!

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 368
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 368
    Billets dans le blog
    17
    Par défaut
    Je n'ai pas tout lu, mais pour commencer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $login = $_POST['login'];
    $pass = $_POST['pass'];
    if($login != NULL AND $pass != NULL)
    $login et $pass ne seront jamais NULL car $_POST['login'] et $_POST['pass'] ne contiendront jamais NULL mais au pire, s'ils sont définis, une chaîne vide.

  3. #3
    Membre éclairé Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Par défaut
    oui ok séb.,

    je ne veux pas parraître agressif mais essaies de lire tout avant de poster sinon il y a aucun interet sauf faire monter tes stats sur le site et essaies de ne poster pas des choses sans rapport avec le sujet car mon else n'intervient pas pour faire une alternative à mes vérifications de contenu de variable mais pour faire une alternative à la vérification du contenu de ma requête.

    En deuxième lieu je peux que te conseiller d'essayer les deux scripts suivants et de voir le résultat et la tu verra que m'a manière de vérification par != NULL est belle et bien efficace:

    formulaire.html:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <form method="post" action="testvariable.php">
    login : <input type="text" name="login" /><br />
    pass : <input type="password" name="pass" /><br />
    <input type="submit" />
    </form>
    testvariable.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
     
    <?php
    if(isset($_POST['login'])AND isset($_POST['pass']))
         {
         $log = $_POST['login'];
         $pass = $_POST['pass'];
         if($log != NULL AND $pass !=NULL)
              {
               echo 'j\'avais raison';
              }
         else
              {
              echo 'j\'avais aussi raison';
              }
         }
    ?>
    test1 : remplis le formulaire
    test2 : remplis pas le formulaire

    Merci aux membres du forum qui souhaitent vraiment faire avancer certain sujet de bien lire le post et si toute fois des propositions sans certitudes sont faites dans un esprit de reflexion mutuel n'hésitez pas on est la pour ça.

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 368
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 368
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par xess91 Voir le message
    En deuxième lieu je peux que te conseiller d'essayer les deux scripts suivants
    Au temps pour moi. L'habitude d'utiliser !== et === :\

    et de voir le résultat et la tu verra que m'a manière de vérification par != NULL est belle est efficace:
    Ce n'est ni beau et ni efficace, mais ce n'est que mon avis hein, car : tu testes si une variable vaut NULL alors qu'elle ne le vaudra jamais. En fait ça passe uniquement parce que NULL == '' donne TRUE, merci PHP.

    Merci aux membres du forum qui souhaitent vraiment faire avancer certain sujet de bien lire le post et si toute fois des propositions sans certitudes sont faites dans un esprit de reflexion mutuel n'hésitez pas on est la pour ça
    Je vais m'occuper de mes stats. EOT.

  5. #5
    Membre éclairé Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Par défaut
    C'est bien ce que je disais ça n'avance pas le sujet et le problème de ce post.

    Ceci étant c'est comme je disais, je ne voulais pas être agressif et c'est sans rancunes car ça a juste pourrit le post !

    Si toutes fois des personnes veulent encore poster c'est sans problème, sinon demain le sujet partira à la poubelle.

    Aller bonne soirée à séb. et aux autres

  6. #6
    Expert confirmé
    Avatar de N1bus
    Homme Profil pro
    Dev. Web & OpenERP
    Inscrit en
    Janvier 2003
    Messages
    2 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Dev. Web & OpenERP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 827
    Par défaut
    Bonjour,

    je ne suis pas sûr que ceci fonctionne comme tu l'attends :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $rep = mysql_query("SELECT * FROM acces_boutique WHERE login_acces_boutique = '$login' AND pass_acces_boutique = '$pass'");
    if (!empty($rep))
    {
    .
    .
    }
    Dans tous les cas, $rep ne sera pas vide puisqu'il contiendra au moins le résultat de la requete.

    j'aurais plutôt fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $rep = mysql_query("SELECT * FROM acces_boutique WHERE login_acces_boutique = '$login' AND pass_acces_boutique = '$pass'");
    $nb = mysql_num_rows($rep);
    if ($nb != 0)
    {
    .
    .
    }

  7. #7
    Membre éclairé Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Par défaut
    Salut N1bus,

    éffectivement ça peut-être ça, car le problème que tu soulèves m'est déjà arrivé en faisant juste if($rep){}forcement je tombais toujours dans le if car de toute façon la requête s'executait quelque soit le résultat retourné.

    Je vais tester mais à première vue il semblerai que ça régle mon PB.

    Merci N1bus, je reviens tenir au courrant.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Par défaut
    Citation Envoyé par N1bus Voir le message
    Bonjour,

    je ne suis pas sûr que ceci fonctionne comme tu l'attends :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $rep = mysql_query("SELECT * FROM acces_boutique WHERE login_acces_boutique = '$login' AND pass_acces_boutique = '$pass'");
    if (!empty($rep))
    {
    .
    .
    }
    Dans tous les cas, $rep ne sera pas vide puisqu'il contiendra au moins le résultat de la requete.

    j'aurais plutôt fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $rep = mysql_query("SELECT * FROM acces_boutique WHERE login_acces_boutique = '$login' AND pass_acces_boutique = '$pass'");
    $nb = mysql_num_rows($rep);
    if ($nb != 0)
    {
    .
    .
    }
    Humm nonn normalement ça donne le même résultat
    on pourrais même faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1234567
     
    $rep = mysql_query("SELECT * FROM acces_boutique WHERE login_acces_boutique = '$login' AND pass_acces_boutique = '$pass'");
    if (!$rep)
    {
    .
    .
    }
    J'avais lu que cette solution était plus performante en terme de vitesse d'exécution mais je n'ai pas vérifier personnellement
    Pour revenir au problème il faudrait tout d'abord s'assurer qu'on entre dans les 2 premiers if ...
    essaie donc de mettre des echo pour en être sur car je ne vois pas trop le problème

  9. #9
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Bonjour,

    Cette ligne ne sert à rien. Si tu arrives d'un formulaire, la condition sera toujours vraie, car vide ou rempli, le champs existe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(isset($_POST['login'])AND isset($_POST['pass']))
    Celle-ci sera plus efficace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!empty($_POST['login']) && !empty($_POST['pass']))
    Outre la remarque de Seb. plus haut, par la même occasion, cela rend celle-ci inutile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($log != NULL AND $pass !=NULL)
    Comme déjà dit plus haut, cette ligne :
    sera toujours vrai, sauf erreur dans l'exécution de la requête. Si tu fait :
    tu devrais trouver quelque chose comme "ressource id #xx", même si la ligne recherchée n'existe pas.

    Cette boucle est totalement inutile, car compte tenu de ce que tu cherches, la requête ne devrait retourner qu'un résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while($tab = mysql_fetch_array($rep))
    Cette ligne est inutile, car le "close" est automatiquement effectué en fin de script :
    Quelle est l'utilité de ces variables intermédiaire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    				$id_acces_boutique = $tab['id_acces_boutique'];
    				$gerant_acces_boutique = $tab['gerant_acces_boutique'];
    				$login_acces_boutique = $tab['login_acces_boutique'];
    				$pass_acces_boutique = $tab['pass_acces_boutique'];
    Ceci n'est pas conseillé dans une requête :
    Il vaut mieux nommer les colonnes.

    Enfin bref, dans un cas comme celui-ci, j'efface tout et je recommence.

    Toutes ces remarques n'ont qu'un but purement humanitaire : abrèger tes souffrances.

  10. #10
    Membre éclairé Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Par défaut
    code corrigé et fonctonnel (j'ai pas dis optimal):
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    <?php
    session_start();
    include('connect.php');
    if(isset($_POST['login'])AND isset($_POST['pass']))
    	{
    	$login = $_POST['login'];
    	$pass = $_POST['pass'];
    	if($login != NULL AND $pass != NULL)
    		{
    		$rep = mysql_query("SELECT * FROM acces_boutique WHERE login_acces_boutique = '$login' AND pass_acces_boutique = '$pass'");
                              $tab = mysql_fetch_array($rep);
    		if ($tab[0] != NULL)
    			{
    				$_SESSION['id'] = $tab['id_acces_boutique'];
    				$_SESSION['gerant'] = $tab['gerant_acces_boutique'];
    				$_SESSION['login'] = $tab['login_acces_boutique'];
    				$_SESSION['pass'] = $tab['pass_acces_boutique'];
    				header("location:admin-boutique.php");
    			}
    		else
    			{
    			header("location:acces_boutique.html");
    			}
    		}
                        else
                             {
                              header("location:acces.html");
                             }
    	}
    mysql_close();
    ?>

Discussions similaires

  1. conditions else else if ne fonctionnant pas
    Par johnny3 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 19/01/2010, 11h22
  2. Ma condition if / else ne fonctionne pas
    Par kryogen dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 11/10/2007, 19h39
  3. condition (if/else) qui ne fonctionne pas
    Par oceane751 dans le forum Langage
    Réponses: 8
    Dernier message: 25/07/2007, 00h58
  4. ShellExecuteEx ne s'execute pas à chaque fois??
    Par Gothico dans le forum MFC
    Réponses: 11
    Dernier message: 01/03/2005, 23h02
  5. [Kylix] Compilation OK Execution pas ok
    Par teurf dans le forum EDI
    Réponses: 14
    Dernier message: 03/12/2002, 16h10

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