[PHP] Probleme de tri d'article par le client

Résolu
Bonjour,

Je voudrais créer un systeme de tri d'articles, utilisable par le client.
Il se presente sous la forme :
__________________________________________________________________________________
Trier par : Vidéos - Images - Animations - Jeux
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
Ainsi, lorsque le client clique sur une de ces options, une variable ("typ_c" en l'occurence) se créé dans l'url et se remplit du type choisi :
<span class="band">Trier par : <a href="?typ_c=videos">Vid&eacute;os</a> - <a href="?typ_c=images">Images</a> - <a href="?typ_c=anims">Animations</a> - <a href="?typ_c=jeux">Jeux</a></span><br /><br />


Ensuite, j'utilise ce code pour rendre effectif le choix du client sur le tir des articles :
if (isset($_GET['typ_c'])) //Si "typ_c" est remplit :
{	 
	$premierArticleAAfficher = ($page - 1) * $nombreArticlesParPage;
	$reponse = mysql_query('SELECT * FROM articles WHERE type='.$_GET['typ_c'].' ORDER BY id DESC LIMIT ' . $premierArticleAAfficher . ', ' . $nombreArticlesParPage . ''); //On choisi les articles selon la choix du client.
}
else //Sinon :
{
	$premierArticleAAfficher = ($page - 1) * $nombreArticlesParPage;
	$reponse = mysql_query('SELECT * FROM articles ORDER BY id DESC LIMIT ' . $premierArticleAAfficher . ', ' . $nombreArticlesParPage . ''); //On affiche tous les articles.
}


Seulement, lorsque la variable "typ_c" est remplie, ce message d'erreur s'affiche : "Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ******* on line 74."
Et lorsqu'elle est vide, l'affichage de tous les articles se fait tout seul.

Alors, je me suis demandé s'il était possible de modifier la variable utile à la boucle d'affichage, ici c'est "$reponse" ?

Merci de vos réponses, et de vos corrections.

--
<!-- Politically Lying Unholy Cowardly Killers. -->
Configuration: Windows XP
Firefox 3.0.1

8 réponses

  1. Re salut,
    à mon avis , utlises des requetes pleine , non raccourci et fais des echos sur tes requetes
    exemple:
    $req="SELECT COUNT(*) FROM ta_table";//tu fais un echo de ta requete
    echo $req;
    $query=mysql_query($req) or die("Impossible de compter le nb de lignes dans ta_table");
    while($row=mysql_fetch_array($query)){
    $nb_lignes=$row[0];
    echo $nb_lignes;
    }
    ça te permettra de debugge, et une fois que tout fonctionne, tu peux recompacter ton code
    1. Voici mon code a partir du <body>.
      De plus, lorsque j'ai mis les "or die [...]" plus aucun article ne s'affichait.
      Après une petite recherche en changeant le nombre et la place des "or die [...]", il s'est avéré que si il s'en trouvais un a la ligne que j'ai volontairement espacée des autres, les articles ne s'affichaient pas. S'il était absent, cela fonctionnait normalement. Donc l'erreur serait là. Mais comment ça serait possible ? ><

      <div id="body">
      <span class="band">Trier par : <a href="?typ_c=videos">Vid&eacute;os</a> - <a href="?typ_c=images">Images</a> - <a href="?typ_c=anims">Animations</a> - <a href="?typ_c=jeux">Jeux</a></span><br /><br />
      
      
      <?php
      include("../connexion.php"); //Import du fichier .php de connexion.
      
      $nombreArticlesParPage = 15;
      $retour = mysql_query('SELECT COUNT(*) AS nb_articles FROM articles');
      $donnees = mysql_fetch_array($retour);$totalDesArticles = $donnees['nb_articles'];
      $nombreDePages  = ceil($totalDesArticles / $nombreArticlesParPage);
      
      if (isset($_GET['page']))//Si "page" est remplit :
      {
              $page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse (articles.php?page=4)
      }
      else // La variable n'existe pas, c'est la première fois qu'on charge la page
      {
              $page = 1; // On se met sur la page 1 (par défaut)
      }
      // On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
      
      if (isset($_GET['typ_c'])) //Si "typ_c" est remplit :
      {	 
      	$premierArticleAAfficher = ($page - 1) * $nombreArticlesParPage or die (mysql_error());
      	$reponse = mysql_query('SELECT * FROM articles WHERE type='.$_GET['typ_c'].' ORDER BY id DESC LIMIT ' . $premierArticleAAfficher . ', ' . $nombreArticlesParPage . '') or die (mysql_error()); //On choisi les articles selon le choix du client.
      }
      
      else //Sinon :
      {	
      
      
      
       
      	$premierArticleAAfficher = ($page - 1) * $nombreArticlesParPage or die (mysql_error());
      	
      
      
      
      
      $reponse = mysql_query('SELECT * FROM articles ORDER BY id DESC LIMIT ' . $premierArticleAAfficher . ', ' . $nombreArticlesParPage . '') or die (mysql_error()); //On choisi les articles selon le choix du client.
      }
      
      while($donnees = mysql_fetch_array($reponse))
      {
      [...]
      
      1. Salut,

        perso je vois une première erreur de principe

        pour trouver le nombre de pages, tu as fais une requette pour compter tous les articles

        et ensuite tu va afficher page par page suivant l'article sélectionné.

        c'est pas bon

        ensuite pour tes or die

        il faut pour chaque commande type mysql_.....

        tu mettes par exemple :
        mysql_query(.........) or die ("pb avec la requette ".mysql_error());


        et la ça te sortira tous les pb des commandes mysql_...
    2. Salut,

      L'erreur : 'MySQL result resource in ******* on line 74' signifie que le résultat fournit par ta requête SQL n'est pas valide et déclenche une erreur lorsque tu tentes de l'utiliser avec la fonction 'mysql_fetch_array()' en ligne 74.

      Il y a donc 2 solutions :
      - Soit tu utilises pas la bonne variables dans 'fetch_array'
      - Soit la requête SQL échoue. Dans ce cas le résultat de requête renvoie FALSE ou NULL (je ne sais plus !).

      Peut être qu'un
       echo( mysql_error() );
      placé juste après les 'mysql_query' pourrait t'en dire plus...
      Il te diras quelle erreur SQL s'est produite...

      Si tu toujours pas à trouver le problème post le code au moins jusqu'à la ligne 74.
      Et exporte la structure de la table 'articles' pour qu'on puisse t'aider...

      Note : il convient de toujours vérifier le résultat d'une requète avant de l'utiliser... soit par un 'if', soit par un système de gestion d'Exception (uniquement dispo sous PHP5)....

      Amicalement,
      S@M...
      http://kryoportail.ath.cx
      1. Elle sont définies au tout début du code PHP :

        <?php
        include("../connexion.php"); //Import du fichier .php de connexion.
        
        $nombreArticlesParPage = 15;
        $retour = mysql_query('SELECT COUNT(*) AS nb_articles FROM articles');
        $donnees = mysql_fetch_array($retour);$totalDesArticles = $donnees['nb_articles'];
        $nombreDePages  = ceil($totalDesArticles / $nombreArticlesParPage);
        [...]
        
        1. Désolé pour le retard.
          Oui, ma page s'affiche totalement, c'est simplement le fait que le "mysql_fetch_array" ne peut pas s'effectuer.
          A moins que tu veuille mon codage de page ? =X
          1. Salut,

            d'ou viennent ces deux variables :

            $premierArticleAAfficher = ($page - 1) * $nombreArticlesParPage;

            si elles ne sont pas définies ou calculées plus haut dans ton code il y des chances que la ligne mysql_query(...

            plante, donc la suivante aussi
        2. J'avais aussi essayé de mettre ce que contenait "typ_c" dans une varible, mais il y avis toujours cette erreur.

          D'autres suggestions ? En tout cas, merci.
          1. essai ça
            if (isset($_GET['typ_c'])) //Si "typ_c" est remplit :
            {
            $type=$_GET['typ_c'];
            $premierArticleAAfficher = ($page - 1) * $nombreArticlesParPage;
            $reponse = mysql_query("SELECT * FROM articles WHERE type='$type' ORDER BY id DESC LIMIT $premierArticleAAfficher , $nombreArticlesParPage "); //On choisi les articles selon la choix du client.
            }
            else //Sinon :
            {
            $premierArticleAAfficher = ($page - 1) * $nombreArticlesParPage;
            $reponse = mysql_query("SELECT * FROM articles ORDER BY id DESC LIMIT $premierArticleAAfficher , $nombreArticlesParPage "); //On affiche tous les articles.
            }