Problème formulaire recherche multi-critères
Résolu
louis1984
Messages postés
341
Date d'inscription
Statut
Membre
Dernière intervention
-
louis1984 Messages postés 341 Date d'inscription Statut Membre Dernière intervention -
louis1984 Messages postés 341 Date d'inscription Statut Membre Dernière intervention -
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.
A voir également:
- Problème formulaire recherche multi-critères
- Whatsapp formulaire opposition - Guide
- Formulaire de réclamation facebook - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Formulaire de reclamation instagram - Guide
- Rechercher ou entrer l'adresse mm - recherche google - Guide
36 réponses
donnes nous déjà le code de ta page contenant le formulaire dans lequel on saisit les mots à rechercher
Voici le code de la page "moteur_de_recherche.php":
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<form method="post" action="resultat.php">
<table align="center">
<tr>
<td>ID : </td><td><input type="text" name="ID"></td>
</tr>
<tr>
<td>Nom : </td><td><input type="text" name="Nom"></td>
</tr>
<tr>
<td valign="top">Prix : </td><td><input type="text" name="Prix"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="recherche" value="Cherche"></td>
</tr>
<tr>
<td colspan="2" align="center"><small><input type="checkbox" name="allcriteres" value="oui">Obligatoirement tous les critères</td>
</tr>
</table>
</form>
</body>
</html>
Et voici le code de la page "resultat.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 != "")
?>
<?php
$cnx = mysql_connect("80.248.217.58", "izimo109416", "16461646");
$db=mysql_select_db('izimo109416');
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 votre aide.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<form method="post" action="resultat.php">
<table align="center">
<tr>
<td>ID : </td><td><input type="text" name="ID"></td>
</tr>
<tr>
<td>Nom : </td><td><input type="text" name="Nom"></td>
</tr>
<tr>
<td valign="top">Prix : </td><td><input type="text" name="Prix"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="recherche" value="Cherche"></td>
</tr>
<tr>
<td colspan="2" align="center"><small><input type="checkbox" name="allcriteres" value="oui">Obligatoirement tous les critères</td>
</tr>
</table>
</form>
</body>
</html>
Et voici le code de la page "resultat.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 != "")
?>
<?php
$cnx = mysql_connect("80.248.217.58", "izimo109416", "16461646");
$db=mysql_select_db('izimo109416');
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 votre aide.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
voir commentaires:
<?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']; } //que vient faire cette variable $acteur alors que partout tu as $nom ? if ( $allcriteres == "oui"){ $operateur="AND"; }else{ $operateur="OR"; } if ($ID != "") $finrequete .= " ID LIKE '%$ID%'"; if ($nom != "") $finrequete .= " $operateur NOM LIKE '%$nom%'"; if ($prix != "") if ($finrequete != ""){ $finrequete .= " $operateur PRIX LIKE '%$prix%'"; }else{ $finrequete .= " PRIX LIKE '%$PRIX%'"; } //if ($finrequete != "") //on va rajouter une trace d'erruer en cas de pb de connexion BDD $cnx = mysql_connect("80.248.217.58", "izimo109416", "16461646") 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); echo '<table>'; //il faut les balise <table> pour faire un tableau 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>"; } echo '</table>'; ?>
Rebonjour,
Encore un petit probleme..
J'ai creer la base de donnees suivante:
ID NOM PRIX
1 AAA 100
2 BBB 200
3 CCC 300
Si j'indique uniquement "1" dans le champ ID lorsque je fais une recherche j'obtiens bien:
1 AAA 100
Si j'indique uniquement "200" dans le champ PRIX lorsque je fais une recherche j'obtiens bien:
2 BBB 200
Par contre si j'indique uniquement "AAA" dans le champ NOM lorsque je fais une recherche j'obtiens:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /var/www/izimo.eu/htdocs/brokers/resultat.php on line 40
Probleme visible ici: http://www.izimo.eu
Je pense que le probleme vient d'ici:
if ( $allcriteres = "oui"){
$operateur="AND";
}else{
$operateur="OR";
}
if ($ID != "")
$finrequete .= " ID LIKE '%$ID%'";
if ($nom != "")
$finrequete .= " $operateur NOM LIKE '%$nom%'";
if ($prix != "")
if ($finrequete != ""){
$finrequete .= " $operateur PRIX LIKE '%$prix%'";
}else{
$finrequete .= " PRIX LIKE '%$PRIX%'";
}
Mais comme je ne sais pas programmer... je sais pas comment faire..
Comment puis-je corriger ce probleme?
Encore un petit probleme..
J'ai creer la base de donnees suivante:
ID NOM PRIX
1 AAA 100
2 BBB 200
3 CCC 300
Si j'indique uniquement "1" dans le champ ID lorsque je fais une recherche j'obtiens bien:
1 AAA 100
Si j'indique uniquement "200" dans le champ PRIX lorsque je fais une recherche j'obtiens bien:
2 BBB 200
Par contre si j'indique uniquement "AAA" dans le champ NOM lorsque je fais une recherche j'obtiens:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /var/www/izimo.eu/htdocs/brokers/resultat.php on line 40
Probleme visible ici: http://www.izimo.eu
Je pense que le probleme vient d'ici:
if ( $allcriteres = "oui"){
$operateur="AND";
}else{
$operateur="OR";
}
if ($ID != "")
$finrequete .= " ID LIKE '%$ID%'";
if ($nom != "")
$finrequete .= " $operateur NOM LIKE '%$nom%'";
if ($prix != "")
if ($finrequete != ""){
$finrequete .= " $operateur PRIX LIKE '%$prix%'";
}else{
$finrequete .= " PRIX LIKE '%$PRIX%'";
}
Mais comme je ne sais pas programmer... je sais pas comment faire..
Comment puis-je corriger ce probleme?
remplaces:
$res=mysql_query($sql);
par
si c'est la requette qui coince tu vas avoir l'affichage de ta requette telle qu'elle est soumise et un mesage d'erreur
tu vas ainsi voir si $nom contient ce que tu as saisi
$res=mysql_query($sql);
par
$res=mysql_query($sql) or die("Pb requette :".$sql."<br>".mysql_error());
si c'est la requette qui coince tu vas avoir l'affichage de ta requette telle qu'elle est soumise et un mesage d'erreur
tu vas ainsi voir si $nom contient ce que tu as saisi
attention
les noms entre crochets [' '] doivent correspondre au name du champ <input>
avec la même casse => NOM c'est pas pareil que Nom
toi tu as mis dans ton formulaire <input type="text" name="NOM">
donc $nom=$_POST['Nom']; ne correspond pas
soit tu mets tout en majuscules soit tout en minuscules
prends l'habitude toujours tout mettre en minuscules ça t'évitera des erreurs
$ID=$_POST['ID']; $nom=$_POST['Nom']; $prix=$_POST['Prix'];
les noms entre crochets [' '] doivent correspondre au name du champ <input>
avec la même casse => NOM c'est pas pareil que Nom
toi tu as mis dans ton formulaire <input type="text" name="NOM">
donc $nom=$_POST['Nom']; ne correspond pas
soit tu mets tout en majuscules soit tout en minuscules
prends l'habitude toujours tout mettre en minuscules ça t'évitera des erreurs
Bonjour Alain,
Tu ne dors jamais!!
J'ai modifié toutes les majuscules en minuscules. Et le probleme persiste.
C'est etrange car tout fonctionne si je met uniquement l'ID ou uniquement le PRIX mais ca ne fonctionne pas si je met uniquement le nom...
Je suis pas un expert mais je pense que le probleme vient plutot de la:
if ( $allcriteres ="oui"){
$operateur="AND";
}else{
$operateur="OR";
}
if ($id != "")
$finrequete .= " id LIKE '%$id%'";
if ($nom != "")
$finrequete .= " $operateur nom LIKE '%$nom%'";
if ($prix != "")
if ($finrequete != ""){
$finrequete .= " $operateur prix LIKE '%$prix%'";
}else{
$finrequete .= " prix LIKE '%$prix%'";
}
Tout te parait correct dans le code ci-dessus?
Tu ne dors jamais!!
J'ai modifié toutes les majuscules en minuscules. Et le probleme persiste.
C'est etrange car tout fonctionne si je met uniquement l'ID ou uniquement le PRIX mais ca ne fonctionne pas si je met uniquement le nom...
Je suis pas un expert mais je pense que le probleme vient plutot de la:
if ( $allcriteres ="oui"){
$operateur="AND";
}else{
$operateur="OR";
}
if ($id != "")
$finrequete .= " id LIKE '%$id%'";
if ($nom != "")
$finrequete .= " $operateur nom LIKE '%$nom%'";
if ($prix != "")
if ($finrequete != ""){
$finrequete .= " $operateur prix LIKE '%$prix%'";
}else{
$finrequete .= " prix LIKE '%$prix%'";
}
Tout te parait correct dans le code ci-dessus?
suite à ce que je t'ai fait rajouter quel message as tu ?
sinon donnes moi le code complet du formulaire et de la partie php
sinon donnes moi le code complet du formulaire et de la partie php
j'ai regardé de plus près effectivement en procédant ainsi tu ne traites pas tous les cas de figure esayes:
if ( $allcriteres ="oui"){ $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++; } }else{ echo "Veuillez saisir au moins un des critères !"; } //j'ai remplacé LIKE % par = car avec LIKE ça te sort tous les champs qui contiennet en partie la valeur //ex pour ID ça te sortira 1001 1101 etc.. pour 01 recherché est ce que tu veux ?
Je viens d'essayer et... probleme..
Voici le message d'erreur:
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /var/www/izimo.eu/htdocs/brokers/resultat.php on line 29
Ligne 29 correspond a ca:
}else{
$finrequete .=" ".$operateur." ".$champ." = '".$critere'"; //pour les criteres suivants : AND ou OR
}
Voici tout le code de ma page resultat.php:
<?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'];
}
//que vient faire cette variable $acteur alors que partout tu as $nom ?
if ( $allcriteres ="oui"){
$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++;
}
}else{
echo "Veuillez saisir au moins un des critères !";
}
//if ($finrequete != "")
//on va rajouter une trace d'erruer 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);
echo '<table>'; //il faut les balise <table> pour faire un tableau
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>";
}
echo '</table>';
?>
Une idee?
Voici le message d'erreur:
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /var/www/izimo.eu/htdocs/brokers/resultat.php on line 29
Ligne 29 correspond a ca:
}else{
$finrequete .=" ".$operateur." ".$champ." = '".$critere'"; //pour les criteres suivants : AND ou OR
}
Voici tout le code de ma page resultat.php:
<?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'];
}
//que vient faire cette variable $acteur alors que partout tu as $nom ?
if ( $allcriteres ="oui"){
$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++;
}
}else{
echo "Veuillez saisir au moins un des critères !";
}
//if ($finrequete != "")
//on va rajouter une trace d'erruer 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);
echo '<table>'; //il faut les balise <table> pour faire un tableau
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>";
}
echo '</table>';
?>
Une idee?
Cette fois... ca marche!!
Par contre une petite chose, lorsque je n'indique rien dans les champs, il m'affiche ceci:
Veuillez saisir au moins un des critères:
1 AAA 100
2 BBB 200
3 CCC 300
Comment je peux faire pour qu'il y ai juste le message d'erreur et pas le contenu de la base de données en dessous du message d'erreur?
Autre chose, si je mets par exemple
ID = 1
NOM = BBB
et que je coche "obligatoirement tous les critères"
Il devrait m'afficher aucun résultat.. au lieu de ca il m'affiche:
1 AAA 100
2 BBB 200
Et si je décoche la case "obligatoirement tous les critères", j'obtiens le meme résultat.. en fait j'ai l'impression que cette case n'a pas d'effet sur le résultat..
Une idée?
Par contre une petite chose, lorsque je n'indique rien dans les champs, il m'affiche ceci:
Veuillez saisir au moins un des critères:
1 AAA 100
2 BBB 200
3 CCC 300
Comment je peux faire pour qu'il y ai juste le message d'erreur et pas le contenu de la base de données en dessous du message d'erreur?
Autre chose, si je mets par exemple
ID = 1
NOM = BBB
et que je coche "obligatoirement tous les critères"
Il devrait m'afficher aucun résultat.. au lieu de ca il m'affiche:
1 AAA 100
2 BBB 200
Et si je décoche la case "obligatoirement tous les critères", j'obtiens le meme résultat.. en fait j'ai l'impression que cette case n'a pas d'effet sur le résultat..
Une idée?