Problème formulaire recherche multi-critères

Résolu/Fermé
louis1984 Messages postés 341 Date d'inscription jeudi 29 mai 2008 Statut Membre Dernière intervention 10 mars 2016 - 27 déc. 2009 à 17:06
louis1984 Messages postés 341 Date d'inscription jeudi 29 mai 2008 Statut Membre Dernière intervention 10 mars 2016 - 4 janv. 2010 à 21:00
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.
A voir également:

36 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
3 janv. 2010 à 21:06
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 dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
4 janv. 2010 à 10:38
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 jeudi 29 mai 2008 Statut Membre Dernière intervention 10 mars 2016 6
27 déc. 2009 à 18:05
Personne?
0
JessayeDeTrouver Messages postés 270 Date d'inscription mercredi 9 septembre 2009 Statut Membre Dernière intervention 4 mai 2012 47
27 déc. 2009 à 18:24
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 jeudi 29 mai 2008 Statut Membre Dernière intervention 10 mars 2016 6
27 déc. 2009 à 19:03
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 jeudi 29 mai 2008 Statut Membre Dernière intervention 10 mars 2016 6
27 déc. 2009 à 22:10
Aidez moi SVP
0
graffx Messages postés 6506 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 24 mars 2019 1 973
27 déc. 2009 à 22:25
il faut faire tes SELECT apres ton mysql_connect
0
louis1984 Messages postés 341 Date d'inscription jeudi 29 mai 2008 Statut Membre Dernière intervention 10 mars 2016 6
27 déc. 2009 à 22:34
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 mercredi 9 septembre 2009 Statut Membre Dernière intervention 4 mai 2012 47
28 déc. 2009 à 11:49
<?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 jeudi 22 mars 2007 Statut Contributeur Dernière intervention 24 mars 2019 1 973
28 déc. 2009 à 11:52
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 jeudi 29 mai 2008 Statut Membre Dernière intervention 10 mars 2016 6
28 déc. 2009 à 20:53
Non tout le code est indiquer ci-dessus.. pourrais tu m'aider?

Merci par avance
0
graffx Messages postés 6506 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 24 mars 2019 1 973
28 déc. 2009 à 21:05
$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 jeudi 29 mai 2008 Statut Membre Dernière intervention 10 mars 2016 6
29 déc. 2009 à 23:22
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 jeudi 29 mai 2008 Statut Membre Dernière intervention 10 mars 2016 6
30 déc. 2009 à 12:07
Aidez moi SVPPP
0
louis1984 Messages postés 341 Date d'inscription jeudi 29 mai 2008 Statut Membre Dernière intervention 10 mars 2016 6
30 déc. 2009 à 18:51
Personne?
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
30 déc. 2009 à 19:13
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 jeudi 22 mars 2007 Statut Contributeur Dernière intervention 24 mars 2019 1 973
30 déc. 2009 à 19:20
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 jeudi 29 mai 2008 Statut Membre Dernière intervention 10 mars 2016 6
30 déc. 2009 à 19:25
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 dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
30 déc. 2009 à 20:38
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 jeudi 29 mai 2008 Statut Membre Dernière intervention 10 mars 2016 6
31 déc. 2009 à 11:53
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