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 :

if(mysql_num_rows($result) == 0) { me donne un resultat ! [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Points : 120
    Points
    120
    Par défaut if(mysql_num_rows($result) == 0) { me donne un resultat !
    Bonjour,

    Je comprends pas pourquoi ça marche

    Pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if(mysql_num_rows($result) == 0) {
    me donne un résultat lorsque les champs sont vides dans la base et donc == 0

    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
     
    $result = $mysql->query("
    SELECT 
            B.champ1,champ2,
            C.champ3,champ4
     
    FROM 
            table1 B,
            table2 C 
    WHERE 
            B.champ1 = C.champ3
    ");
    if($result)
    {     
    list($champ1,$champ2,$champ3,$champ4)=mysql_fetch_row($result) ;
     
    if(mysql_num_rows($result) == 0) {
    //n'affiche rien (enfin normalement et c'est ça le problème !!!)
    $page->addhtml('');
    } //ferme si pas de resultat
    if(mysql_num_rows($result) > 0) {
    //si resultat alors affiche:
    $page->addhtml(' 
    affiche champ1 = '.$champ1.'
    affiche champ4 = '.$champ4.'
    ');
    }//ferme si resultat
    }//ferme la requete sql
    Cette requête fonctionne bien, même trop bien puisqu'elle affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $page->addhtml(' 
    affiche champ1 = '.$champ1.'
    affiche champ4 = '.$champ4.'
    ');
    même lorsque les champs sont vide et == 0

    donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(mysql_num_rows($result) == 0) {
    //n'affiche rien (enfin normalement et c'est ça le problème !!!)
    $page->addhtml('');
    } //ferme si pas de resultat
    ne fonctionne pas

    Pourquoi ?

    Merci d'avance

  2. #2
    Membre averti Avatar de beejeridou
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2007
    Messages : 280
    Points : 342
    Points
    342
    Par défaut
    mysql_num_rows retourne false (qui est aussi equivalent à 0) si une erreur survient. Tu as donc une erreur qui est vérifiée dans ta condition.
    Et pourtant... Elle tourne.
    http://www.djib.me

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Points : 120
    Points
    120
    Par défaut
    un petit bout de code pour la solution ?
    Merci

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Utilise l'opérateur === pour éviter le cast implicite.

  5. #5
    Membre averti Avatar de beejeridou
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2007
    Messages : 280
    Points : 342
    Points
    342
    Par défaut
    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
     
    $result = $mysql->query("
    SELECT 
            B.champ1,champ2,
            C.champ3,champ4
     
    FROM 
            table1 B,
            table2 C 
    WHERE 
            B.champ1 = C.champ3
    ");
     
        if(mysql_num_rows($result)) 
        {
            echo 'Il y a des résultats';
        }
        else
        {
            echo 'Il n\'y a pas de résultat';
        }
    Ca devrait fonctionner
    Et pourtant... Elle tourne.
    http://www.djib.me

  6. #6
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Non, c'est pas vraiment ça car tu ne fais pas la différence entre une requête échouée et une requête réussie mais avec 0 lignes retournées.

    Je te recommande de vérifier tes requêtes:
    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
    // J'ai modifié la requête car un JOIN est plus approprié qu'une clause WHERE
    $query = <<< QUERY
    SELECT 
        B.champ1 AS champ1,
        champ2,
        C.champ3 AS champ3,
        champ4
     
    FROM 
        table1 B,
    JOIN
        table2 C ON (B.champ1 = C.champ3)
    QUERY;
     
    if (!$results = $mysql->query($query)) {
        // Erreur dans la requête
    }
    elseif (mysql_num_rows($results) === 0) {
        // Pas de résultats
    }
    else {
        // Extraire les résultats sous forme de variables
        extract(mysql_fetch_array($results));
     
        // on peut directement utilsier $champ1 à $champ4
        echo "$champ1 $champ2 $champ3 $champ4";
     
        // Continuer ici...
    }

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Points : 120
    Points
    120
    Par défaut
    Bonjour et merci pour les morceaux de code

    En fait c'est toujours pas bon

    C'est pas un problème de requête SQL mais purement PHP

    Ce que je cherche c'est
    si trouve un résultat dans la base = { un résultat qui s'affiche}

    si je trouve rien = affiche if {} (donc rien)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     if(mysql_num_rows($result) > 0) { 
    //si résultat venant de la base alors affiche: 
    $page->addhtml(' 
     Bonjour j'ai dans ma base = '.$champ1.' 
    //si pas de résultat dans '.$champ1.' venant de la base Mysql alors :
    Rien se s'affiche et surtout le texte html, donc Bonjour j'ai dans ma base = (ne dois pas s'afficher parce qu'il n'y a rien venant de la base Mysql)
     '); 
    }

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Points : 120
    Points
    120
    Par défaut
    Pour reprendre l’exemple de Benjamin

    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
     
    // J'ai modifié la requête car un JOIN est plus approprié qu'une clause WHERE
    $query = <<< QUERY
    SELECT 
        B.champ1 AS champ1,
        champ2,
        C.champ3 AS champ3,
        champ4
     
    FROM 
        table1 B,
    JOIN
        table2 C ON (B.champ1 = C.champ3)
    QUERY;
     
    if (!$results = $mysql->query($query)) {
        // Erreur dans la requête
    }
    elseif (mysql_num_rows($results) === 0) {
        // Pas de résultats
    }
    else {
        // Extraire les résultats sous forme de variables
        extract(mysql_fetch_array($results));
     
        // on peut directement utilsier $champ1 à $champ4
        echo "$champ1 $champ2 $champ3 $champ4";
     
        // Continuer ici...
    }
    C'est pas bon par ce que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    else {
        // Extraire les résultats sous forme de variables
        extract(mysql_fetch_array($results));
     
        // on peut directement utilsier $champ1 à $champ4
        echo "
    <h1>Réponse dans les champs</h1>
    <p>$champ1 $champ2 $champ3 $champ4"</p>
    }
    Ne doit pas s'afficher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h1>Réponse dans les champs</h1>

  9. #9
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    1) Les champs sont à la campagne ou dans les formulaires, pas dans les tables SQL qui ne sont composées que de colonnes et de lignes.

    2) Les jointures s'écrivent depuis 20 ans avec l'opérateur JOIN ; il serait temps de s'y mettre !

    Ça devrait déjà mieux fonctionner comme ça :
    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
    $query = "
    	SELECT B.col1, B.col2,
    		C.col3, C.col4
    	FROM table1 B
    	INNER JOIN table2 C ON B.col1 = C.col3
    ";
     
    $result = mysql_query($query) or die('<br />Erreur SQL : '.mysql_error().'<br />Requête :<br />'.$query);
     
    if(mysql_num_rows > 0)
    {
    	// Affection du résultat trouvé à des tableaux de variables
    	while($row = mysql_fetch_array($result))
    	{
    		$col1[] = $row['col1'];
    		$col2[] = $row['col2'];
    		$col3[] = $row['col3'];
    		$col4[] = $row['col4'];
    	}
     
    	// affichage du résultat trouvé
     
    }
    else
    {
    	// message d'absence de résultat
    }
    S'il y a une erreur SQL, tu verras l'erreur. Sinon c'est ton code PHP pour l'affichage qui ne va pas.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Points : 120
    Points
    120
    Par défaut
    S'il y a une erreur SQL, tu verras l'erreur. Sinon c'est ton code PHP pour l'affichage qui ne va pas.
    Oui Oui c'est justement ce que je dis plus haut

    C'est pas un problème de requête SQL mais purement PHP

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    277
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 277
    Points : 120
    Points
    120
    Par défaut
    J'ai trouvé
    merci à tous

    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
    $result = $mysql->query("
    SELECT 
            B.champ1,champ2,
            C.champ3,champ4
     
    FROM 
            table1 B,
            table2 C 
    WHERE 
            B.champ1 = C.champ3
    ");
    if($result)
    {     
    list($champ1,$champ2,$champ3,$champ4)=mysql_fetch_row($result) ;
     
    //if(mysql_num_rows($result) == 0) {
    // ce n'est pas $result qu'il faut utiliser mais le nom d'un champ :
    if($champ3 == 0) {
    $page->addhtml('');
    } //ferme si pas de resultat
    //if(mysql_num_rows($result) > 0) {
    // ce n'est pas $result qu'il faut utiliser mais le nom d'un champ :
    if($champ3 > 0) {
    //si resultat alors affiche:
    $page->addhtml(' 
    <ul><li>
    Ce qui se trouve dans champ3 est : '.$champ3.'
    C'est comme ça que le texte html ne va pas apparaitre si le champs3 est vide
    </li></ul>
    ');
    }//ferme si resultat
    }//ferme la requete sql

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/06/2015, 15h06
  2. Code php qui donne 2 resultats différents en local et en ligne
    Par gentil2005 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/05/2014, 09h52
  3. [MySQL] $_POST ne me donne aucun resultat
    Par sinifer dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 12/05/2009, 10h18
  4. Réponses: 7
    Dernier message: 24/02/2009, 18h19
  5. donnée resultat
    Par gealex dans le forum C
    Réponses: 2
    Dernier message: 14/04/2006, 12h06

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