Problème formulaire recherche multi-critères

Résolu
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.
Configuration: Windows XP Internet Explorer 7.0

36 réponses

  • 1
  • 2
Résumé de la discussion

Une erreur apparaît lors de l'affichage des résultats d'un formulaire de recherche multi‑critères, affichant Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource lorsque la requête échoue. Des réponses identifient des causes fréquentes telles que l'utilisation d'un opérateur d'égalité '=' au lieu de '==' dans les tests, des noms de champs incohérents et une construction de requête qui produit une chaîne invalide. Pour corriger, récupérer correctement les valeurs POST, construire la clause WHERE via un tableau de critères, vérifier la validité de la requête avant l'exécution et aligner les noms de variables et champs.

Bobot (l'IA à votre service)
  1. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
  2. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
  3. louis1984 Messages postés 344 Statut Membre 6
     
    Personne?
    0
  4. JessayeDeTrouver Messages postés 300 Statut Membre 47
     
    on fait des requetes APRES la connection avec la base de donnees, pas AVANT
    => donc mes de l ordre dans ton code
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. louis1984 Messages postés 344 Statut Membre 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
  7. louis1984 Messages postés 344 Statut Membre 6
     
    Aidez moi SVP
    0
  8. graffx Messages postés 120 Date d'inscription   Statut Contributeur Dernière intervention   2 031
     
    il faut faire tes SELECT apres ton mysql_connect
    0
  9. louis1984 Messages postés 344 Statut Membre 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
  10. JessayeDeTrouver Messages postés 300 Statut Membre 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
  11. graffx Messages postés 120 Date d'inscription   Statut Contributeur Dernière intervention   2 031
     
    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
  12. louis1984 Messages postés 344 Statut Membre 6
     
    Non tout le code est indiquer ci-dessus.. pourrais tu m'aider?

    Merci par avance
    0
  13. graffx Messages postés 120 Date d'inscription   Statut Contributeur Dernière intervention   2 031
     
    $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
  14. louis1984 Messages postés 344 Statut Membre 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
  15. louis1984 Messages postés 344 Statut Membre 6
     
    Aidez moi SVPPP
    0
  16. louis1984 Messages postés 344 Statut Membre 6
     
    Personne?
    0
  17. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
  18. graffx Messages postés 120 Date d'inscription   Statut Contributeur Dernière intervention   2 031
     
    j' aurai du le voir :/

    Mais si ca ne marche pas, dis nous quelle est l' erreur.
    0
  19. louis1984 Messages postés 344 Statut Membre 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
  20. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
  21. louis1984 Messages postés 344 Statut Membre 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
  • 1
  • 2