Problème formulaire recherche multi-critères - Page 2

Résolu
Précédent
  • 1
  • 2
  1. louis1984 Messages postés 344 Statut Membre 6
     
    svp aide moi!!!
    0
  2. Alain_42 Messages postés 5413 Statut Membre 904
     
    donnes nous déjà le code de ta page contenant le formulaire dans lequel on saisit les mots à rechercher
    0
  3. louis1984 Messages postés 344 Statut Membre 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
  4. JessayeDeTrouver Messages postés 300 Statut Membre 47
     
    ah oui, c'est parce que tu n'utilise pas les variable $_POST[]
    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
     
    snif... je comprends rien...
    0
  7. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
  8. louis1984 Messages postés 344 Statut Membre 6
     
    Super ALain ca fonctionne!

    Merci beaucoup pour ton aide ;)

    A plus!
    0
  9. louis1984 Messages postés 344 Statut Membre 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
  10. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
  11. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
  12. louis1984 Messages postés 344 Statut Membre 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
  13. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
  14. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
  15. louis1984 Messages postés 344 Statut Membre 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
  16. louis1984 Messages postés 344 Statut Membre 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
  17. louis1984 Messages postés 344 Statut Membre 6
     
    Ca marche!!

    NIKEL !!

    Aucun bug, aucun probleme c'est juste parfait!

    Un grand merci ;)
    0
Précédent
  • 1
  • 2