Problème formulaire recherche multi-critères
Résolu
louis1984
Messages postés
344
Statut
Membre
-
louis1984 Messages postés 344 Statut Membre -
louis1984 Messages postés 344 Statut Membre -
Bonjour,
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.
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
Suivant
-
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
Suivant