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 :

Deux erreurs mysql_fetch_assoc()


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Par défaut Deux erreurs mysql_fetch_assoc()
    Bonjour à tous et à toute

    J'ai une erreur du type Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\wamp\www\mediumfr\index.php

    En effet j'ai créé 2 tableaux associatifs et ils sont en erreurs tous les deux.

    Si vous pouvez m'aider à trouver mon problème

    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
    ?php
    									$DocParPage=4; 
    									$retour_total=mysql_query('SELECT COUNT(*) AS nbre_document FROM document'); 
     
    									$donnees_total=mysql_fetch_assoc($retour_total); 
    									$total=$donnees_total['nbre_document']; 
    									$nombreDePages=ceil($total/$DocParPage);
    									if(isset($_GET['nbre_document'])) 
    										{
    											 $pageActuelle=intval($_GET['nbre_document']);
     
    											 if($pageActuelle>$nombreDePages)
    											 {
    												  $pageActuelle=$nombreDePages;
    											 }
    										}
    									else 
    									{
    										 $pageActuelle=1;     
    									}
     
    									$premiereEntree=($pageActuelle-1)*$DocParPage; 
     
    									// La requête sql pour récupérer les messages de la page actuelle.
    									$retour_messages=mysql_query('SELECT c.id_categorie, c.nom_categorie, d.titre_document, d.descrition_document, d.url_feature_image FROM categorie AS c, document AS d WHERE d.fkid_categorie = c.id_categorie ORDER BY d.id_document DESC LIMIT '.$premiereEntree.', '.$DocParPage.'');
     
    									while($donnees_messages=mysql_fetch_assoc($retour_messages)) 
    									{
     
    										 echo '<table width="50%" height="33.33%" border="0" align="center" cellpadding="0" cellspacing="0">
    													<tr>
    														<tb>
    														 <a href=page.php?param=' . $donnees_messages['id_categorie']. '>
    														 <img alt=&quot;' . $donnees_messages['id_categorie'] . '&quot; class="feature_img" src=' . $donnees_messages['url_feature_image'] . '>
    														 <p class=titre_document>'. $donnees_messages['titre_document']. '<br /><p class=description_document>'. $donnees_messages['descrition_document']. '<br /><img class="view" src="./img/lire.gif">
    														</tb
    													</tr>
     
    												</table>';
    									}
    ?>

    Merci à tous

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    Tu dois rendre ton code plus lisible si tu veux te faciliter le débogage.
    Si tu essaies avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $retour_total = mysql_query('SELECT COUNT(*) AS nb FROM document');
    if ($retour_total === false) {
       die(mysql_error());
    }
    $total = mysql_result($retour_total, 0);
    ça roule ?

    EDIT : es-tu sûr d'avoir bien ouvert une connexion avec la base de données avant d'exécuter ton script ?

  3. #3
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Warning: mysql_fetch_assoc() expects parameter 1 to be resource
    Ce type d'erreurs veut dire que la requête à "plantée" et du coup la fonction mysql_query() n'a pas retournée une ressource comme ça aurait dû mais a retournée FALSE.

    Le code par suite par en sucette car la fonction mysql_fetch_assoc() elle attend une ressource, d'où l'erreur.

    Il faut alors éviter de faire un code du genre "ça passe ou ça casse", mais vérifier que la requête ne retourne pas FALSE.

    En faisant simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $retour_messages = mysql_query(' ... ');
    if (!$retour_messages) {
        // OK ...
    }
    else {
        // ERREUR !!!
    }
    Ou alors on peu aussi gérer ça avec une gestion des Erreurs et Exception (mais c'est plus compliqué).


    Mise à par ça, et comme ça vient d'une erreur dans la requête, il faut à tout prix obtenir tous les retours d'erreurs possibles afin de ne pas rester ainsi bloqué sur une simple erreur.
    Donc soit activer l'affichage des erreurs de MySQL dans le php.ini : mysql.trace_mode à On
    Ou alors rajouter des or die( mysql_error() ) aux requêtes.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $sql = 'SELECT c.id_categorie, c.nom_categorie, d.titre_document, d.descrition_document, d.url_feature_image
    FROM categorie AS c, document AS d
    WHERE d.fkid_categorie = c.id_categorie
    ORDER BY d.id_document DESC
    LIMIT '.$premiereEntree.', '.$DocParPage;
     
    // Pour déboguer provisoirement
    echo $sql.'<br />';
     
    $retour_messages=mysql_query($sql) or die('Erreur : '.mysql_error());
    Tout ça pour avoir l'erreur, des infos ... déboguer en somme.



    Par ailleurs, il faudrait plutôt faire une vrai jointure de table (JOIN OU INNER JOIN) au lieu d'une simple équivalence entre 2 tables.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql = 'SELECT ... blablabla ...
    FROM categorie AS c
    JOIN document AS d ON c.id_categorie = d.fkid_categorie
    ORDER BY d.id_document DESC
    LIMIT '.(int)$premiereEntree.', '.(int)$DocParPage;
    Mais aussi, je ne suis pas sûr que la pagination soit correctement faite.
    Sous réserve.
    Si jamais certains documents de la table "document" ne se trouve pas liés à la table "categorie", le nombre total ne sera pas le bon.
    Du coup le calcul pour la pagination (les limites pour le 2ème requête) risque d'être faussé.
    Donc à voir.

    Personnellement j'aurais effectué la 1ère requête avec la même jointure que la 2ème, donc avec les mêmes conditions.
    C'est à dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = 'SELECT COUNT(*) AS nbre_document
    FROM categorie AS c
    JOIN document AS d ON c.id_categorie = d.fkid_categorie';

    En espérant ne pas dire de bêtises.

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bon finalement, j'avais 2 minutes et j'en ai profité pour reprendre ton code en corrigeant au passage les coquilles.
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    <?php
     
        // par défaut
        $doc_par_page = 4;
        $num_page     = 1;
     
        $sql =
    <<<SQL
    SELECT
        COUNT(*) AS nb
    FROM
        document
    SQL;
     
        $qry = mysql_query($sql);
        if ($qry === false) {
            die(mysql_error());
        }
     
        $nb_total = mysql_result($qry, 0);
        $nb_pages = ceil($nb_total/$doc_par_page);
     
        if (isset($_GET['nbre_document'])) {
            $num_page = intval($_GET['nbre_document']);
            $num_page = ($num_page > $nb_pages) ? $nb_pages : 1;
        }
     
        // clause limit du sql
        $offset = ($num_page - 1) * $doc_par_page;
     
        $sql =
    <<<SQL
    SELECT
        c.id_categorie,
        c.nom_categorie,
        d.titre_document,
        d.descrition_document,
        d.url_feature_image
    FROM
        categorie AS c
            INNER JOIN document d ON c.id_categorie = d.fkid_categorie
    ORDER BY
        d.id_document DESC
    LIMIT
        $offset, $doc_par_page
    SQL;
     
        $qry = mysql_query($sql);
        if ($qry === false) {
            die(mysql_error());
        }
     
        while ($row = mysql_fetch_assoc($qry)) {
            echo
    <<<HTML
    <table width="50%" height="33.33%" border="0" align="center" cellpadding="0" cellspacing="0">
        <tr>
            <td>
                <a href="page.php?param={$row['id_categorie']}">
                    <img alt="{$row['id_categorie']}" class="feature_img" src="{$row['url_feature_image']}" />
                    <p class="titre_document">{$row['titre_document']}</p><br />
                    <p class="description_document">{$row['descrition_document']}<br />
                    <img class="view" src="./img/lire.gif" />
                </a>
            </td>
        </tr>
    </table>
    HTML;
        }
    ?>
    En espérant sans boulettes...

    EDIT : grilled par RunCodePhp

  5. #5
    Membre averti
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Par défaut
    J'ai indenter mon code et bien mis un contrôle d'erreur mais maintenant j'ai une autre erreur

    J'ai "No database selected"

    Sa doit être mon fichier connexion.php qui merde mais sa marché très bien avant
    !!

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    OK, vérifies que tu fais bien un mysql_select_db() dans ton fichier de connexion

  7. #7
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    J'ai "No database selected"
    Cette erreur n'a plus rien avoir avec celle que tu as eu au début.

    Tu as donc 2 problèmes bien différents.

    Il est évident qu'il va falloir d'abord réparer cette erreur de connexion.
    Post le code qui se charge de faire tout ça si nécessaire.

  8. #8
    Membre averti
    Homme Profil pro
    Responsable du parc et des réseaux de télécommunication
    Inscrit en
    Novembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable du parc et des réseaux de télécommunication

    Informations forums :
    Inscription : Novembre 2011
    Messages : 18
    Par défaut
    C'est bon sa marche Merci beaucoup

    Par contre avant j'avais pas sélectionné de nom de base et cela marché très bien avez vous une idée ?

Discussions similaires

  1. Gérer deux erreur dans une procédure
    Par rominous41 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/05/2011, 18h48
  2. [MySQL] erreur mysql_fetch_assoc() une aide
    Par speedylol dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 13/01/2011, 13h22
  3. [MySQL] Erreur : mysql_fetch_assoc()
    Par leff34 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/04/2009, 18h09
  4. [MySQL] Erreur mysql_fetch_assoc() et JOIN
    Par yakou32 dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 06/02/2009, 18h03
  5. Réponses: 2
    Dernier message: 25/07/2007, 12h20

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