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