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

Résolu/Fermé
Pluck Messages postés 41 Date d'inscription jeudi 8 mai 2008 Statut Membre Dernière intervention 29 septembre 2009 - 8 août 2008 à 19:07
medoc13 Messages postés 65 Date d'inscription jeudi 7 août 2008 Statut Membre Dernière intervention 12 août 2008 - 11 août 2008 à 20:54
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.


A voir également:

8 réponses

medoc13 Messages postés 65 Date d'inscription jeudi 7 août 2008 Statut Membre Dernière intervention 12 août 2008 21
8 août 2008 à 19:23
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.
}
0
Pluck Messages postés 41 Date d'inscription jeudi 8 mai 2008 Statut Membre Dernière intervention 29 septembre 2009 7
9 août 2008 à 11:23
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.
0
medoc13 Messages postés 65 Date d'inscription jeudi 7 août 2008 Statut Membre Dernière intervention 12 août 2008 21
9 août 2008 à 13:23
est ce que tu peux afficher ta page complete
0
Pluck Messages postés 41 Date d'inscription jeudi 8 mai 2008 Statut Membre Dernière intervention 29 septembre 2009 7
11 août 2008 à 17:47
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
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
11 août 2008 à 18:29
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Pluck Messages postés 41 Date d'inscription jeudi 8 mai 2008 Statut Membre Dernière intervention 29 septembre 2009 7
11 août 2008 à 18:30
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);
[...]
0
kryoportail Messages postés 222 Date d'inscription dimanche 10 août 2008 Statut Membre Dernière intervention 22 mai 2014 125
11 août 2008 à 18:31
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
0
Pluck Messages postés 41 Date d'inscription jeudi 8 mai 2008 Statut Membre Dernière intervention 29 septembre 2009 7
11 août 2008 à 19:01
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))
{
[...]
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
11 août 2008 à 19:47
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_...
0
medoc13 Messages postés 65 Date d'inscription jeudi 7 août 2008 Statut Membre Dernière intervention 12 août 2008 21
11 août 2008 à 20:54
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
0