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

Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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++;
}
2
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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&egrave;res !";
	}
}
?>
1
louis1984 Messages postés 341 Date d'inscription   Statut Membre Dernière intervention   6
 
Personne?
0
JessayeDeTrouver Messages postés 270 Date d'inscription   Statut Membre Dernière intervention   47
 
on fait des requetes APRES la connection avec la base de donnees, pas AVANT
=> donc mes de l ordre dans ton code
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
 
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
0
louis1984 Messages postés 341 Date d'inscription   Statut Membre Dernière intervention   6
 
Aidez moi SVP
0
graffx Messages postés 6506 Date d'inscription   Statut Contributeur Dernière intervention   1 975
 
il faut faire tes SELECT apres ton mysql_connect
0
louis1984 Messages postés 341 Date d'inscription   Statut Membre Dernière intervention   6
 
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...
0
JessayeDeTrouver Messages postés 270 Date d'inscription   Statut Membre Dernière intervention   47
 
<?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 != "")
?>
0
graffx Messages postés 6506 Date d'inscription   Statut Contributeur Dernière intervention   1 975
 
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.
0
louis1984 Messages postés 341 Date d'inscription   Statut Membre Dernière intervention   6
 
Non tout le code est indiquer ci-dessus.. pourrais tu m'aider?

Merci par avance
0
graffx Messages postés 6506 Date d'inscription   Statut Contributeur Dernière intervention   1 975
 
$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
0
louis1984 Messages postés 341 Date d'inscription   Statut Membre Dernière intervention   6
 
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?
0
louis1984 Messages postés 341 Date d'inscription   Statut Membre Dernière intervention   6
 
Aidez moi SVPPP
0
louis1984 Messages postés 341 Date d'inscription   Statut Membre Dernière intervention   6
 
Personne?
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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");

....
0
graffx Messages postés 6506 Date d'inscription   Statut Contributeur Dernière intervention   1 975
 
j' aurai du le voir :/

Mais si ca ne marche pas, dis nous quelle est l' erreur.
0
louis1984 Messages postés 341 Date d'inscription   Statut Membre Dernière intervention   6
 
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.
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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>";
}
?> 
0
louis1984 Messages postés 341 Date d'inscription   Statut Membre Dernière intervention   6
 
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
0