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

PHP & Base de données Discussion :

problème au niveau du else assez bizarre ou pas ! [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chef de département DSI
    Inscrit en
    Octobre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de département DSI
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 12
    Points : 13
    Points
    13
    Par défaut problème au niveau du else assez bizarre ou pas !
    ceci est mon code d'authentification tout marche à merveille le contrôle le submit etc, sauf que au niveau de mon else quand je met des logs qui n'existe pas mon header marche pas :s voici mon code toute remarque ou suggestion sera pas de refus

    Cordialement

    mon code : auth.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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    <?php
    include "../function/connexion.php";
    include "../function/function.php";
    session_start();
    $login = filter_input(INPUT_POST, 'login', FILTER_SANITIZE_STRING);
    $pass = filter_input(INPUT_POST, 'pass', FILTER_SANITIZE_STRING);
     
    //maintenir les variables de sessions
    $_SESSION['login'] = $login;
    $_SESSION['pass'] = $pass;
     
    //valider le login coté form
    if(strlen($login) == 0){
        $_SESSION['statut'] = 'echec';
        $_SESSION['loginMessage'] = 'mettez votre login.';
    }
    else{
        $_SESSION['statut'] = 'succes';
    }
    //valider le pass coté form
    if(strlen($pass) == 0){
        $_SESSION['statut'] = 'echec';
        $_SESSION['passMessage'] = 'mettez votre passe.';
    } else{
        $_SESSION['statut'] = 'succes';
    }
     
     
    //message d'erreur
    if($_SESSION['statut'] == 'echec'){
        $_SESSION['message'] = 'Veuillez remplir les champs svp!';
    } else {
        //le message
        $sql = 'SELECT login,pass FROM user WHERE login="'.$login.'" AND pass="'.$pass.'" ';
        $res = $mysqli->query($sql);
        while($row=$res->fetch_array()) {
                                        if($row){
                                            header('Location: ../categorie/music/index.php');
                                        }
     
                                        else{
                                            header('location:../index.php');
                                        }
        }
     
        //écraser toutes les variables de sessions
        $_SESSION['login'] = '';
        $_SESSION['pass'] = '';
        }
     
    //retour au form
    if($_SESSION['statut'] == 'echec'){
    $appelerPage = $_SERVER['HTTP_REFERER'];
    header('Location: '.$appelerPage);
    }
    ?>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si la requête ne retourne rien, tu ne rentres pas dans le while.
    Utilise plutôt simplement mysqli_stmt_num_rows pour voir s'il y a des retours ou pas.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Homme Profil pro
    Chef de département DSI
    Inscrit en
    Octobre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de département DSI
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 12
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Si la requête ne retourne rien, tu ne rentres pas dans le while.
    Utilise plutôt simplement mysqli_stmt_num_rows pour voir s'il y a des retours ou pas.
    j'vais essayer merci, mais si la requête ne retourne rien comment ça se fait que ça me redirige quand les log via la bdd sont correct ?!

    néanmoins j'essaye mysqli_stmt_num_rows pour voir

    Edit : j'ai test la fonction pour débug mon requête et voir si j'ai une ligne quand les logs sont correct et zéro ligne quand c'est incorrect le fameux else bref voilà comment j'ai test

    le test :
    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
     $sql = 'SELECT * FROM user WHERE login="'.$login.'" AND pass="'.$pass.'" ';
        $res = $mysqli->query($sql);
     
        if ($stmt = mysqli_prepare($mysqli,$sql)) {
     
            /* Exécution de la requête */
            mysqli_stmt_execute($stmt);
     
            /* Stockage du résultat */
            mysqli_stmt_store_result($stmt);
     
            printf("Nombre de lignes : %d.\n", mysqli_stmt_num_rows($stmt));
     
            /* Fermeture de la commande */
            mysqli_stmt_close($stmt);
        }
     
        /* Fermeture de la connexion */
        mysqli_close($mysqli);
    quand les logs sont corrects j'ai : Nombre de lignes : 1.
    quand c'est incorrect : Nombre de lignes : 0.

    donc il n y a pas de problème au niveau de la requête ce qui est sûr :s.

    Cordialement.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu m'as mal lu, je n'ai pas dit que la requête n'était pas bonne :
    - si la requête retourne une ligne tu rentres dans le while et dans le cas if
    - si la requête ne retourne rien, tu ne rentres meme pas dans le while, donc pas le else.
    mysqli_stmt_num_rows n'avait pas pour but de tester ta requête mais de te permettre de faire ta condition if/else.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre à l'essai
    Homme Profil pro
    Chef de département DSI
    Inscrit en
    Octobre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de département DSI
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 12
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu m'as mal lu, je n'ai pas dit que la requête n'était pas bonne :
    - si la requête retourne une ligne tu rentres dans le while et dans le cas if
    - si la requête ne retourne rien, tu ne rentres meme pas dans le while, donc pas le else.
    mysqli_stmt_num_rows n'avait pas pour but de tester ta requête mais de te permettre de faire ta condition if/else.
    ah excuse moi alors, je modifie mon code de suite je vois ce que ça donne merci pour l'aide .

    Edit : problème résolu mon code devient le suivant
    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
     
      $sql = 'SELECT * FROM user WHERE login="'.$login.'" AND pass="'.$pass.'" ';
        $res = $mysqli->query($sql);
     
        if ($stmt = mysqli_prepare($mysqli,$sql)) {
     
            /* Exécution de la requête */
            mysqli_stmt_execute($stmt);
     
            /* Stockage du résultat */
            mysqli_stmt_store_result($stmt);
     
            if( mysqli_stmt_num_rows($stmt) > 0){
                header('Location: ../categorie/music/index.php');
            }
            else{
                header('location:../index.php');
            }
     
            /* Fermeture de la commande */
            mysqli_stmt_close($stmt);
        }
     
        /* Fermeture de la connexion */
        mysqli_close($mysqli);
    et ça marche j'ai essayé toute les entrées possibles et inimaginables pour voir si mes tests reste opérationnels, c'est Ok!.

    Ps : merci encore pour ton aide sabotage

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Points : 1 631
    Points
    1 631
    Par défaut
    Bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while($row=$res->fetch_array()) {
        if($row){
            header('Location: ../categorie/music/index.php');
        }else{
             header('location:../index.php');
        }
    }
    Si ta requête ne retourne aucun résultat tu ne rentre pas dans la boucle while() et donc tu saute les instructions if() et else, donc tu n'est pas redirigé, alors que si t'a requête retourne au moins une ligne alors tu rentre dans la boucle while puis tu test une deuxième fois (la première est la condition d'entrée dans la boucle) si tu a bien un résultat.

    Tu pourrait à la place faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if( $row = $res->fetch_array() ){
        header('Location: ../categorie/music/index.php');
    }else{
        header('location:../index.php');
    }
    sans passer par une boucle et donc ton if teste si t'a requête retourne au moins une ligne alors tu est redirigé vers ../categorie/music/index.php, sinon ta requête n'a retourné aucune données donc tu est redirigé vers ../index.php .

    EDIT : Squizzé par sabotage :o
    une réponse vous a permis d'avancer ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Chef de département DSI
    Inscrit en
    Octobre 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de département DSI
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 12
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Exia93 Voir le message
    Bonsoir,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while($row=$res->fetch_array()) {
        if($row){
            header('Location: ../categorie/music/index.php');
        }else{
             header('location:../index.php');
        }
    }
    Si ta requête ne retourne aucun résultat tu ne rentre pas dans la boucle while() et donc tu saute les instructions if() et else, donc tu n'est pas redirigé, alors que si t'a requête retourne au moins une ligne alors tu rentre dans la boucle while puis tu test une deuxième fois (la première est la condition d'entrée dans la boucle) si tu a bien un résultat.

    Tu pourrait à la placa faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if( $row = $res-Wfetch_array() ){
        header('Location: ../categorie/music/index.php');
    }else{
        header('location:../index.php');
    }
    sans passer par une boucle et donc ton if teste si t'a requête retourne au moins une ligne alors tu est redirigé vers ../categorie/music/index.php, sinon ta requête n'a retourné aucune données donc tu est redirigé vers ../index.php .

    EDIT : Squizzé par sabotage :o
    Merci j'ai essayé de voir ce que ça donne pour les deux solutions je retiens la 2éme c'était instructif merci beaucoup .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL] Problème assez bizarre
    Par Dud225 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 05/07/2007, 10h45
  2. [PPC][C#][SQL2000] Problème au niveau de donné controlé
    Par Roach dans le forum Windows Forms
    Réponses: 16
    Dernier message: 21/09/2005, 22h08
  3. problème au niveau de restore database
    Par Redouane dans le forum Administration
    Réponses: 2
    Dernier message: 07/09/2005, 11h49
  4. Probleme d'index fulltext assez bizarre
    Par Clovis37 dans le forum Débuter
    Réponses: 4
    Dernier message: 08/07/2005, 19h59
  5. [DNS MX]Avec DynDNS.org, problème au niveau du MX
    Par Swoög dans le forum Développement
    Réponses: 9
    Dernier message: 24/08/2004, 22h00

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