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   -
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.

36 réponses

louis1984 Messages postés 341 Date d'inscription   Statut Membre Dernière intervention   6
 
svp aide moi!!!
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
donnes nous déjà le code de ta page contenant le formulaire dans lequel on saisit les mots à rechercher
0
louis1984 Messages postés 341 Date d'inscription   Statut Membre Dernière intervention   6
 
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.
0
JessayeDeTrouver Messages postés 270 Date d'inscription   Statut Membre Dernière intervention   47
 
ah oui, c'est parce que tu n'utilise pas les variable $_POST[]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
louis1984 Messages postés 341 Date d'inscription   Statut Membre Dernière intervention   6
 
snif... je comprends rien...
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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>';
?> 
0
louis1984 Messages postés 341 Date d'inscription   Statut Membre Dernière intervention   6
 
Super ALain ca fonctionne!

Merci beaucoup pour ton aide ;)

A plus!
0
louis1984 Messages postés 341 Date d'inscription   Statut Membre Dernière intervention   6
 
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?
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
remplaces:

$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
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
attention

$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
0
louis1984 Messages postés 341 Date d'inscription   Statut Membre Dernière intervention   6
 
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?
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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&egrave;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 ?
0
louis1984 Messages postés 341 Date d'inscription   Statut Membre Dernière intervention   6
 
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?
0
louis1984 Messages postés 341 Date d'inscription   Statut Membre Dernière intervention   6
 
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?
0
louis1984 Messages postés 341 Date d'inscription   Statut Membre Dernière intervention   6
 
Ca marche!!

NIKEL !!

Aucun bug, aucun probleme c'est juste parfait!

Un grand merci ;)
0