Aller au contenu

souci php+mysql


Sujets conseillés

Posté (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 70
artiste(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';>
<?php

if (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 :smartass:

Modifié par Monique
Merci d'utiliser la balise CODEBOX pour plus de 10 lignes de code
Posté

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

Posté (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é par fplus39
Posté

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

Posté

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?

Posté

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."%'";
}

Posté

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

Posté
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).

Posté

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

Posté
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 :hypocrite: )

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 :smartass:

Posté

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.

Posté
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)

Posté

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.

Posté (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';>
<?php

if (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é par Dan
Comme signalé dans ton premier post, merci d'utiliser CODEBOX pour les codes de plus de 10 lignes !!!
Posté
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 :)

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...