Problème formulaire recherche multi-critères
Résolulouis1984 Messages postés 344 Statut Membre -
J'ai inséré un petit formulaire de recherche multi-critères (que j'ai trouvé sur internet) et j'ai ce message d'erreur lorsque j'essaie d'afficher les résultats:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in D:\www\izimo.eu\htdocs\Brokers\resultat.php on line 24
Voici un lien vers le moteur de recherche: http://www.izimo.eu
Voici le code de la pages "résultat.php":
<?php
if ( $allcriteres == "oui")
$operateur="AND";
else
$operateur="OR";
if ($ID != "")
$finrequete .= " ID LIKE '%$ID%'";
if ($acteur != "")
$finrequete .= " $operateur nom LIKE '%$nom%'";
if ($prix != "")
if ($finrequete != "")
$finrequete .= " $operateur prix LIKE '%$prix%'";
else
$finrequete .= " prix LIKE '%$prix%'";
if ($finrequete != "")
$sql="SELECT * FROM brokers WHERE $finrequete";
else
$sql="SELECT * FROM brokers";
?>
<?php
$db = mysql_connect("123.123.123", "XXXXX", "XXXXX");
$res=mysql_query($sql, $db);
while ($ligne = mysql_fetch_object ($res))
{
print "<tr>";
print "<td>$ligne->ID</td>";
print "<td>$ligne->nom</td>";
print "<td>$ligne->prix";
print "</td>";
print "</tr>";
}
?>
Quelqu'un aurait-il la solution à mon problème?
Merci par avance pour votre aide.
Configuration: Windows XP Internet Explorer 7.0
36 réponses
- 1
- 2
Une erreur apparaît lors de l'affichage des résultats d'un formulaire de recherche multi‑critères, affichant Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource lorsque la requête échoue. Des réponses identifient des causes fréquentes telles que l'utilisation d'un opérateur d'égalité '=' au lieu de '==' dans les tests, des noms de champs incohérents et une construction de requête qui produit une chaîne invalide. Pour corriger, récupérer correctement les valeurs POST, construire la clause WHERE via un tableau de critères, vérifier la validité de la requête avant l'exécution et aligner les noms de variables et champs.
-
oui deux petites erreurs au moment du copier coller
//on parcours l'array $champ=index=Nom champ table $critere=valeur cherchée foreach($array_criteres as $champ=>$critere){ if($i==1){ $finrequete .=" ".$champ." = '".$critere."'"; //au premier critere on ne doit pas avoir de AND ou OR }else{ $finrequete .=" ".$operateur." ".$champ." = '".$critere."'"; //pour les criteres suivants : AND ou OR } $i++; } -
j'ai trouvé l'erreur et en même temps réorganisé tout le script, pour que chaque test soit pris en compte pour les instructions correspondantes
<?php //il faut recuperer les valeurs postées pour chaque champ if(isset($_POST['recherche'])){//le formulaire a été posté $allcriteres=$_POST['allcriteres']; $id=$_POST['id']; $nom=$_POST['nom']; $prix=$_POST['prix']; if ( $allcriteres == "oui"){ //l'erreur était là, le test d'égalité c'est == et pas = $operateur="AND"; }else{ $operateur="OR"; } $array_criteres=array(); //on empile les valeurs dans un array seulement si elles existent if ($id != "") $array_criteres['id']=$id; //on met dans un array dont l'index correspond au champ de la table et la valeur= valeur cherchée if ($nom != "") $array_criteres['nom']=$nom; if ($prix != "") $array_criteres['prix']=$prix; if(sizeof($array_criteres)>0){ $i=1; //on parcours l'array $champ=index=Nom champ table $critere=valeur cherchée foreach($array_criteres as $champ=>$critere){ if($i==1){ $finrequete .=" ".$champ." = '".$critere."'"; //au premier critere on ne doit pas avoir de AND ou OR }else{ $finrequete .=" ".$operateur." ".$champ." = '".$critere."'"; //pour les criteres suivants : AND ou OR } $i++; } //on va rajouter une trace d'erreur en cas de pb de connexion BDD $cnx = mysql_connect("123.123.123", "izimoahahah", "12345") or die("pb connexion serveur: ".mysql_error()); $db=mysql_select_db('izimo109416') or die("pb selection base: ".mysql_error()); if (!empty($finrequete)){ $sql="SELECT * FROM brokers WHERE $finrequete"; }else{ $sql="SELECT * FROM brokers"; } $res=mysql_query($sql)or die("pb avec la requette: ".mysql_error()); echo '<table>'; while ($ligne = mysql_fetch_object ($res)){ print "<tr>"; print "<td>$ligne->id</td>"; print "<td>$ligne->nom</td>"; print "<td>$ligne->prix</td>"; print "</tr>"; } echo '</table>'; }else{ echo "Veuillez saisir au moins un des critères !"; } } ?> -
-
on fait des requetes APRES la connection avec la base de donnees, pas AVANT
=> donc mes de l ordre dans ton code -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Merci JessayeDeTrouver,
Le problème c'est que je n'y comprends rien.. j'ai trouvé ce code sur internet et je ne sais pas comment modifier le code..
Pourrais-tu m'aider?
Merci -
-
il faut faire tes SELECT apres ton mysql_connect
-
Si je mets le SELECT après mysql_connect j'obtiens le message d'erreur suivant:
Parse error: parse error in D:\www\izimo.eu\htdocs\Brokers\resultat.php on line 4
Le code que j'ai donc maintenant est:
<?php
$db = mysql_connect("XXXXXXX", "XXXXXX", "XXXXXXX");
$sql="SELECT * FROM brokers WHERE $finrequete";
else
$sql="SELECT * FROM brokers";
$res=mysql_query($sql, $db);
while ($ligne = mysql_fetch_object ($res))
{
print "<tr>";
print "<td>$ligne->ID</td>";
print "<td>$ligne->NOM</td>";
print "<td>$ligne->PRIX</td>";
print "</td>";
print "</tr>";
}
?>
<?php
if ( $allcriteres == "oui")
$operateur="AND";
else
$operateur="OR";
if ($ID != "")
$finrequete .= " ID LIKE '%$ID%'";
if ($acteur != "")
$finrequete .= " $operateur NOM LIKE '%$nom%'";
if ($prix != "")
if ($finrequete != "")
$finrequete .= " $operateur PRIX LIKE '%$prix%'";
else
$finrequete .= " PRIX LIKE '%$PRIX%'";
if ($finrequete != "")
?>
Que dois-je faire, je comprends rien... -
<?php
$db = mysql_connect("XXXXXXX", "XXXXXX", "XXXXXXX");
$sql="SELECT * FROM brokers WHERE $finrequete";
else{
$sql="SELECT * FROM brokers";
$res=mysql_query($sql, $db);
while ($ligne = mysql_fetch_object ($res))
{
echo"<tr>";
echo"<td>$ligne->ID</td>";
echo "<td>$ligne->NOM</td>";
echo "<td>$ligne->PRIX</td>";
echo "</td>";
echo "</tr>";
}
}
?>
<?php
if ( $allcriteres == "oui")
{$operateur="AND";}
else
{
$operateur="OR";}
if ($ID != "")
{$finrequete .= " ID LIKE '%$ID%'";}
if ($acteur != "")
$finrequete .= " $operateur NOM LIKE '%$nom%'";
if ($prix != "")
if ($finrequete != "")
{$finrequete .= " $operateur PRIX LIKE '%$prix%'";}
else
{$finrequete .= " PRIX LIKE '%$PRIX%'";}
if ($finrequete != "")
?> -
tout ton code est la ou il y en a avant? si y' en a pas avant, dis le moi, je vais essayer de te corriger, y' a plein de choses qui ne vont pas.
-
Non tout le code est indiquer ci-dessus.. pourrais tu m'aider?
Merci par avance -
$db = mysql_connect("XXXXXXX", "XXXXXX", "XXXXXXX");
if (!empty($finrequete))
{
$sql="SELECT * FROM brokers WHERE $finrequete";
}
else
{
$sql="SELECT * FROM brokers";
}
$res=mysql_query($sql, $db);
while ($ligne = mysql_fetch_object ($res))
ca serait plutot ca mais je l' ai fait vite fait sans verifier -
salut graffx et merci pour ton aide.
Malheureusement je viens d'essayer ton code et ca marche pas..
Donc pour le moment le code de ma page "resultat.php" est:
<?php
$db = mysql_connect("XXXXXXXXX", "XXXXXXXXX", "XXXXXXXXX");
if (!empty($finrequete))
{
$sql="SELECT * FROM brokers WHERE $finrequete";
}
else
{
$sql="SELECT * FROM brokers";
}
$res=mysql_query($sql, $db);
while ($ligne = mysql_fetch_object ($res))
{
print "<tr>";
print "<td>$ligne->ID</td>";
print "<td>$ligne->NOM</td>";
print "<td>$ligne->PRIX</td>";
print "</td>";
print "</tr>";
}
?>
<?php
if ( $allcriteres == "oui")
$operateur="AND";
else
$operateur="OR";
if ($ID != "")
$finrequete .= " ID LIKE '%$ID%'";
if ($acteur != "")
$finrequete .= " $operateur NOM LIKE '%$nom%'";
if ($prix != "")
if ($finrequete != "")
$finrequete .= " $operateur PRIX LIKE '%$prix%'";
else
$finrequete .= " PRIX LIKE '%$PRIX%'";
if ($finrequete != "")
?>
Le message d'erreur est: Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in D:\www\izimo.eu\htdocs\Brokers\resultat.php on line 13
La ligne 13 correspond a: while ($ligne = mysql_fetch_object ($res))
Une idee? -
-
-
il manque une chose très importante à ton code: la sélection de la base !
$cnx= mysql_connect("XXXXXXX", "XXXXXX", "XXXXXXX");
$db=mysql_select_db('le_nom_de_ta_base');
et ensuite tu as mis :if (!empty($finrequete))
hors cette variable $finrequette tu la charges plus bas dans ton code c'est pas bon !!
le php s'exécute dans l'ordre des lignes
donc il faut que la deuxième partie :
<?php
if ( $allcriteres == "oui")
$operateur="AND";
else
$operateur="OR";
.... soit avant
<?php
$db = mysql_connect("XXXXXXXXX", "XXXXXXXXX", "XXXXXXXXX");
.... -
j' aurai du le voir :/
Mais si ca ne marche pas, dis nous quelle est l' erreur. -
Merci Alain,
Juste pour etre sur (car je debute) pourrais-tu valider mon code ci-dessous:
<?php
if ( $allcriteres == "oui")
$operateur="AND";
else
$operateur="OR";
if ($ID != "")
$finrequete .= " ID LIKE '%$ID%'";
if ($acteur != "")
$finrequete .= " $operateur NOM LIKE '%$nom%'";
if ($prix != "")
if ($finrequete != "")
$finrequete .= " $operateur PRIX LIKE '%$prix%'";
else
$finrequete .= " PRIX LIKE '%$PRIX%'";
if ($finrequete != "")
?>
<?php
$cnx = mysql_connect("XXXXXXXXX", "XXXXXXXXX", "XXXXXXXX");
$db=mysql_select_db('nom de ma base mysql');
if (!empty($finrequete))
{
$sql="SELECT * FROM brokers WHERE $finrequete";
}
else
{
$sql="SELECT * FROM brokers";
}
$res=mysql_query($sql, $db);
while ($ligne = mysql_fetch_object ($res))
{
print "<tr>";
print "<td>$ligne->ID</td>";
print "<td>$ligne->NOM</td>";
print "<td>$ligne->PRIX</td>";
print "</td>";
print "</tr>";
}
?>
Merci pour ton aide. -
Fais l'essai:
<?php //j'espère que tu as du code avant ça pour récupérer les $allcriteres $ID etc.. if ( $allcriteres == "oui"){ $operateur="AND"; }else{ $operateur="OR"; } if ($ID != ""){ $finrequete .= " ID LIKE '%$ID%'"; } if ($acteur != ""){ $finrequete .= " $operateur NOM LIKE '%$nom%'"; } if ($prix != ""){ if ($finrequete != ""){ $finrequete .= " $operateur PRIX LIKE '%$prix%'"; }else{ $finrequete .= " PRIX LIKE '%$PRIX%'"; } // if ($finrequete != "") //celui la a quoi il sert ? $cnx = mysql_connect("XXXXXXXXX", "XXXXXXXXX", "XXXXXXXX"); $db=mysql_select_db('nom de ma base mysql'); if (!empty($finrequete)) { $sql="SELECT * FROM brokers WHERE $finrequete"; } else { $sql="SELECT * FROM brokers"; } $res=mysql_query($sql); //attention la j'ai enlevé $db while ($ligne = mysql_fetch_object ($res)) { print "<tr>"; print "<td>$ligne->ID</td>"; print "<td>$ligne->NOM</td>"; print "<td>$ligne->PRIX</td>"; print "</td>"; print "</tr>"; } ?> -
Merci Alain,
Euh... juste pour info je n'ai pas de code avant ça pour récupérer les $allcriteres $ID etc..
Le code que j'ai indiquer, c'est TOUT le code de ma page resultat.php il n'y a rien avant, rien apres...
Pourrais-tu m'aider car je comprends rien du tout..
Merci
- 1
- 2