fplus39 Posté 8 Octobre 2008 Posté 8 Octobre 2008 (modifié) bonjour, J'ai un souci... En fait j'ai une page qui me sort les données de ma bdd dans un tableau...ca, c'est bon... En haut de page, je met un petit formulaire qui me sert à trouver rapidement un des artistes de ma base... Ca fonctinne sauf quand la page se charge la première fois, donc quand il n'y a pas de recherce effectuée... J'ai ce message : Il y a Warning: mysql_numrows(): supplied argument is not a valid MySQL result resource in /....mon_serveur_ftp/racine/sql/liste.php on line 70artiste(s) répondant à ce nom: mon code: <? include("sql1.inc"); mysql_connect($host, $user, $pass); mysql_select_db("$bdd") or die("Ouverture base impossible"); if (isset($HTTP_POST_VARS)) { $list_query = "SELECT * FROM mp3 WHERE "; $k = 0; while(list($variable, $value) = each($HTTP_POST_VARS)) { //make the query if ($k) { $list_query .= " OR $variable like '%$value%'"; } else { $list_query .= "$variable like '%$value%'"; } $k++; } }?><center><form action="liste.php" method="post"><table width="440"> <tr> <td width="316">Rechercher un artiste :<input type="text" name="artiste" value="recherche" size="20" maxlength="50"></td> <td width="114"> <input type="submit" value="Rechercher" style="float: right"></td> </tr> </table></form><table BORDER=5 bgcolor='#cad3fa'bgcolor='#cad3fa' bordercolorlight='#a4f8f7' width='950' style='border-collapse: collapse' bordercolor='#4d6af1' cellpadding='0' cellspacing='0';><?phpif (isset($list_query)) {// if the query exist$result_query = mysql_query ($list_query);// submit the query@$num_rows = mysql_numrows($result_query)or print ("Il n'y a aucun artiste répondant à ce nom dans la base de données Fréquence Plus");echo "<p>";echo "Il y a ";echo mysql_numrows($result_query);echo " artiste(s) répondant à ce nom:";// number of rows$i = 0; echo "<td width='25'><center><B><font size='3'>ID</font></B></center></td>"; echo "<td width='100'><center><B><font size='3'>Artiste</font></B></center></td>"; echo "<td width='100'><center><B><font size='3'>Titre</font></B></center></td>"; echo "<td width='100'><center><B><font size='3'>Visuel</font></B></center></td>"; echo "<td width='100'><center><B><font size='3'>Son</font></B></center></td>"; echo "<td width='100'><center><B><font size='3'>Vidéo</font></B></center></td>"; echo "<td width='75'><center><B><font size='3'>Date</font></B></center></td>"; echo "<td width='35'><center><B><font size='3'>Mod</font></B></center></td>"; echo "<td width='35'><center><B><font size='3'>Suppr</font></B></center></td>"; while($i != $num_rows) {echo "\t<tr>\r\n"; echo "\t\t<td width='25'><center><B><font size='2'>".mysql_result($result_query,$i,"ID")."</font></B></center></td>\r\n"; echo "\t\t<td width='100'><center><B><font size='2'>".mysql_result($result_query,$i,"artiste")."</font></B></center></td>\r\n"; echo "\t\t<td width='100'><center><B><font size='2'>".mysql_result($result_query,$i,"titre")."</font></B></center></td>\r\n"; echo "\t\t<td width='100'><center><font size='2'>".mysql_result($result_query,$i,"img")."</font></center></td>\r\n"; echo "\t\t<td width='100'><center><font size='2'>".mysql_result($result_query,$i,"son")."</font></center></td>\r\n"; echo "\t\t<td width='100'><center><font size='2'>".mysql_result($result_query,$i,"video")."</font></center></td>\r\n"; echo "\t\t<td width='75'><center><font size='2'>".mysql_result($result_query,$i,"date")."</font></center></td>\r\n"; echo"<TD width='50'><CENTER><font size='2'><a href='modifier.php?ID=idatrouver'><img border='0' src='modifier.gif'></a></font></center>"; echo"</font><TD width='50'><CENTER><B><font size='2'><a href='supprimer.php?ID=idatrouver' onclick=\"return confirm(Voulez-vous vraiment supprimer artisteatrouver - titreatrouver ?)\"><img border='0' src='poubelle.gif'></a>"; echo "\t</tr>\r\n"; $i++; }}mysql_close();?> Si vous pouviez m'aider un peu à résoudre ce souci, ce serait gentil.. Merci d'avance Modifié 8 Octobre 2008 par Monique Merci d'utiliser la balise CODEBOX pour plus de 10 lignes de code
Patrick Posté 8 Octobre 2008 Posté 8 Octobre 2008 Hum ... Vu ton code je dirais que le problème vient de la requête elle-même. Tu devrais remplacer $result_query = mysql_query ($list_query); par $result_query = mysql_query($list_query) or die(mysql_error()); Si l'erreur n'est pas la même c'est que le problème vient de la création de la requête. Tiens nous informés. Par ailleurs en tant que nouveau membre, n'hésite pas à te présenter ici. Bienvenue sur le Hub. ++ Patrick
fplus39 Posté 8 Octobre 2008 Auteur Posté 8 Octobre 2008 (modifié) Hello! Merci pour ton aide J'obtiens ce message : Parse error: syntax error, unexpected T_VARIABLE in /monserveur/racine/sql/liste.php on line 67 ligne 67: $num_rows = mysql_numrows($result_query) Modifié 8 Octobre 2008 par fplus39
Patrick Posté 8 Octobre 2008 Posté 8 Octobre 2008 C'est bien ce que je pensais ! En affichant le contenu de la variable générée $list_query tu devrais facilement trouver l'erreur. ++ Patrick
fplus39 Posté 8 Octobre 2008 Auteur Posté 8 Octobre 2008 tu peux m'expliquer parce que j'e n'y connais pas grand chose et je decouvre au fur et à mesure... Merci à toi
fplus39 Posté 8 Octobre 2008 Auteur Posté 8 Octobre 2008 tu veux dire que c'est cette variable qui pose problème? if (isset($HTTP_POST_VARS)) { $list_query = "SELECT * FROM mp3 WHERE "; $k = 0; while(list($variable, $value) = each($HTTP_POST_VARS)) { //make the query if ($k) { $list_query .= " OR $variable like '%$value%'"; } else { $list_query .= "$variable like '%$value%'"; } $k++; } } tu peux m'expliquer stp?
Dan Posté 8 Octobre 2008 Posté 8 Octobre 2008 Deux commentaires ... $k est mis à 0 et ensuite tu fais un test if($k) ... il ne sera jamais vérifié. Ensuite, tu dois écrire tes lignes comme ceci, si tu veux que $value soit interprété : if ($k) { $list_query .= " OR $variable like '%".$value."%'"; } else { $list_query .= "$variable like '%".$value."%'"; }
Patrick Posté 9 Octobre 2008 Posté 9 Octobre 2008 Dan a été plus prompt que moi. C'est exactement ça à mon avis. Pour vérifier, tu pourrais mettre cette ligne echo "requête : ".$list_query; die; juste avant celle-ci $result_query = mysql_query($list_query) or die(mysql_error()); pour vérifier que ta requête est bonne. Si c'est le cas, enlève la ligne que tu as ajouté et c'est parti, si ce n'est pas le cas tu dois modifier les lignes qui génèrent ta requête pour obtenir ce que tu souhaites. ++ Patrick
captain_torche Posté 9 Octobre 2008 Posté 9 Octobre 2008 Ensuite, tu dois écrire tes lignes comme ceci, si tu veux que $value soit interprété : Il me semble qu'une variable est toujours interprétée lorsqu'elle est mise dans une chaîne de caractères délimitée par doubles quotes (c'est ce dont je me sers, en tout cas).
Patrick Posté 9 Octobre 2008 Posté 9 Octobre 2008 Oui Captain, mais dans le cas présent la variable est placée aussi entre simples quotes et là pas d'interprétation ! '%$value%' il faut donc sortir la variable des simples quotes. ++ Patrick
captain_torche Posté 9 Octobre 2008 Posté 9 Octobre 2008 Non, vu qu'ici, les simples quotes sont juste des caractères de la chaîne délimitée par les doubles quotes
fplus39 Posté 9 Octobre 2008 Auteur Posté 9 Octobre 2008 Dan a été plus prompt que moi.C'est exactement ça à mon avis. Pour vérifier, tu pourrais mettre cette ligne echo "requête : ".$list_query; die; juste avant celle-ci $result_query = mysql_query($list_query) or die(mysql_error()); pour vérifier que ta requête est bonne. Si c'est le cas, enlève la ligne que tu as ajouté et c'est parti, si ce n'est pas le cas tu dois modifier les lignes qui génèrent ta requête pour obtenir ce que tu souhaites. ++ Patrick voilà le résultat : requête : SELECT * FROM mp3 WHERE Je suis désolé mais je découvre tout juste ce langage (j'aurais peut être dû commencer par le dire ) Donc en fait j'ai essayé de réadapter ce script pris ailleurs pour ma page... concernant : $k = 0; while(list($variable, $value) = each($HTTP_POST_VARS)) { //make the query if ($k) { $list_query .= " OR $variable like '%$value%'"; } else { $list_query .= "$variable like '%$value%'"; } $k++; je dois reprendre le code que tu m'as donné tel quel? Je dois supprimer $k = 0; ? Je sais même pas sa signification... Merci pour votre patience, ce n'est pas de la mauvaise volonté, promis
Dudu Posté 10 Octobre 2008 Posté 10 Octobre 2008 Salut SQL est un langage très simple. SELECT va "sélectionner" quelque chose dans la base. * indique qu'on cherche "tout ce qu'il y a dans une table". FROM te permet de cibler dans quelle table tu vas sélectionner "tout ce qu'il y a dans la table". Dans ton cas, tu chercheras "tout ce qu'il y a dans la table mp3". WHERE te permet d'affiner la recherche via une condition. Par exemple: "SELECT * FROM mp3 WHERE `dudu` = 1" va sélectionner toutes les entrées de la table mp3, mais uniquement celles où le champ "dudu" a la valeur "1" Revenons à ta requête. Quand tu n'as pas de recherche effectuée (donc sur ta première page), ton script lance cette requête SQL erronée: SELECT * FROM mp3 WHERE ce qui donne en traduction française: "sélectionner toutes les entrées de la table mp3, mais uniquement celles où..." Ben oui, mais où quoi ? tu n'indiques aucune condition ensuite ! Il faut donc enlever ce WHERE et ne le mettre dans la requête que lorsque tu effectues une recherche d'artiste. Tu gardes juste "SELECT * FROM mp3" tout seul. Ou peut-être avec une clause "LIMIT 0, 30" si tu as beaucoup d'artistes.
fplus39 Posté 10 Octobre 2008 Auteur Posté 10 Octobre 2008 Il faut donc enlever ce WHERE et ne le mettre dans la requête que lorsque tu effectues une recherche d'artiste.Tu gardes juste "SELECT * FROM mp3" tout seul. Ou peut-être avec une clause "LIMIT 0, 30" si tu as beaucoup d'artistes. Hello! MAis si je comprends bien ce que tu dis: En fait quand je ne fais aucune recherche, je ne devrais même pas avoir de Select, puisque je ne recherche rien, donc, je ne dois rien afficher En fait je devrais avoir 2 conditions? -si aucune recherche effectuée (au chargement de la page) > ne rien faire -si le mot recherché n'est pas présent dans la base > Afficher un message (ça, ça marche actuellement) poue le reste, afficher les résultats (ça fonctionne aussi)
Dudu Posté 11 Octobre 2008 Posté 11 Octobre 2008 Salut Ça dépend: que veux-tu faire de cette page lorsqu'on y accède sans faire de recherche d'artiste ? Dire bonjour, ou bien afficher par défaut tous les artistes ? Dans le premier cas, il manque un else dans ton code php. Dans lequel tu définis que lorsqu'il n'y a pas de variables POST envoyées, tu affiches un message de ton choix.
fplus39 Posté 13 Octobre 2008 Auteur Posté 13 Octobre 2008 (modifié) Hello! Désolé pour le retard de réponse... En fait, quand il n'y a pas de recherche, j'affiche mes données réparties sous plusieurs pages... Je ne peux pas te donner l'url, car c'est une page protégée mais le code pour afficher mes données est en place, donc, j'ai rajouté le module de recherche en haut de page... Donc: Si pas de recherche : on ne fait rien et on passe à la suite du code qui affiche les données... Si la donnée recherchée n'existe pas dans la base, message qui le dit puis on passe à la suite et on affiche le code... Si la donnée recherchée existe, on affiche le nombre de résultats et le résultat, puis on passe à la suite du code... Je te remet toute le code que j'ai concernant la recherche, ce sera peut être plus facile d'apréhender mno souci: <? include("connect.inc"); mysql_connect($host, $user, $pass); mysql_select_db("$bdd") or die("Ouverture base impossible"); if (isset($HTTP_POST_VARS)) { $list_query = "SELECT * FROM mp3 WHERE "; $k = 0; while(list($variable, $value) = each($HTTP_POST_VARS)) { //make the query if ($k) { $list_query .= " OR $variable like '%$value%'"; } else { $list_query .= "$variable like '%$value%'"; } $k++; } } ?><center><form action="liste.php" method="post"><table width="440"> <tr> <td width="316">Rechercher un artiste :<input type="text" name="artiste" value="recherche" size="20" maxlength="50"></td> <td width="114"> <input type="submit" value="Rechercher" style="float: right"></td> </tr> </table></form><table BORDER=5 bgcolor='#cad3fa'bgcolor='#cad3fa' bordercolorlight='#a4f8f7' width='950' style='border-collapse: collapse' bordercolor='#4d6af1' cellpadding='0' cellspacing='0';><?phpif (isset($list_query)) {// if the query exist//echo "requête : ".$list_query; die;$result_query = mysql_query($list_query);// submit the query@$num_rows = mysql_numrows($result_query)or print ("Il n'y a aucun artiste répondant à ce nom dans la base de données Fréquence Plus");echo "<p>";echo "Il y a ";echo mysql_numrows($result_query);echo " artiste(s) répondant à ce nom:";// number of rows$i = 0; echo "<td width='25'><center><B><font size='3'>ID</font></B></center></td>"; echo "<td width='100'><center><B><font size='3'>Artiste</font></B></center></td>"; echo "<td width='100'><center><B><font size='3'>Titre</font></B></center></td>"; echo "<td width='100'><center><B><font size='3'>Visuel</font></B></center></td>"; echo "<td width='100'><center><B><font size='3'>Son</font></B></center></td>"; echo "<td width='100'><center><B><font size='3'>Vidéo</font></B></center></td>"; echo "<td width='75'><center><B><font size='3'>Date</font></B></center></td>"; echo "<td width='35'><center><B><font size='3'>Mod</font></B></center></td>"; echo "<td width='35'><center><B><font size='3'>Suppr</font></B></center></td>"; while($i != $num_rows) {echo "\t<tr>\r\n"; echo "\t\t<td width='25'><center><B><font size='2'>".mysql_result($result_query,$i,"ID")."</font></B></center></td>\r\n"; echo "\t\t<td width='100'><center><B><font size='2'>".mysql_result($result_query,$i,"artiste")."</font></B></center></td>\r\n"; echo "\t\t<td width='100'><center><B><font size='2'>".mysql_result($result_query,$i,"titre")."</font></B></center></td>\r\n"; echo "\t\t<td width='100'><center><font size='2'>".mysql_result($result_query,$i,"img")."</font></center></td>\r\n"; echo "\t\t<td width='100'><center><font size='2'>".mysql_result($result_query,$i,"son")."</font></center></td>\r\n"; echo "\t\t<td width='100'><center><font size='2'>".mysql_result($result_query,$i,"video")."</font></center></td>\r\n"; echo "\t\t<td width='75'><center><font size='2'>".mysql_result($result_query,$i,"date")."</font></center></td>\r\n"; echo"<TD width='50'><CENTER><font size='2'><a href='modifier.php?ID=idatrouver'><img border='0' src='modifier.gif'></a></font></center>"; echo"</font><TD width='50'><CENTER><B><font size='2'><a href='supprimer.php?ID=idatrouver' onclick=\"return confirm(Voulez-vous vraiment supprimer artisteatrouver - titreatrouver ?)\"><img border='0' src='poubelle.gif'></a>"; echo "\t</tr>\r\n"; $i++; }}mysql_close();?></center></table></form></p><p> </p></center> merci pour votre gentillesse, votre patience, et votre aide Modifié 13 Octobre 2008 par Dan Comme signalé dans ton premier post, merci d'utiliser CODEBOX pour les codes de plus de 10 lignes !!!
fplus39 Posté 15 Octobre 2008 Auteur Posté 15 Octobre 2008 Dan: lundi 13 octobre 2008 à 18:53 Edition : Comme signalé dans ton premier post, merci d'utiliser CODEBOX pour les codes de plus de 10 lignes !!! Désolé, je n'avais pas vu que mon premier post avait été édité pour me laisser un message, ni qu'on pouvait utiliser cette balise. Encore toutes mes excuses Bonne fin de journée à toutes et tous
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant