PHP - faire plusieurs recherches a la suite .

Résolu
Maskk Messages postés 89 Statut Membre -  
Maskk Messages postés 89 Statut Membre -
Bonjour,

Je viens de créer une page recherche pour mon intranet ... (sous mssql par lien ODBC)
je fais un <select> pour prososer les champs et in <input> pour entrer le nom $requete .

Je vous montre une partie de mon code ;
$champ=$_POST['champ'];
$champ_add=$_POST['champ_add'];
$requete=$_POST['requete'];

$globale="WHERE $champ LIKE '%$requete%'";
$globale_add=$_POST['globale_add'];
$requete_add = htmlspecialchars($_POST['requete_add']);

if (isset($_POST['globale_add']))
{$globale=$globale." AND $champ_add LIKE '%$requete_add%'"};

$query = odbc_do($connexion,"SELECT patati patata... $globale ") or die (odbc_error());

Je m'etais dirigé dans ce sens ... malheuresement des qu'il prend en compte le 'globale_add' (qui est mon deuxieme bouton submit...) il ecrasera a chaque fois mon " AND $champ_add LIKE '%$requete_add% de plus j'ai l'impression qu'il perd le contenu exact de ma variable globale...

Je ne suis pas expert auriez vous une solution? Merci

6 réponses

  1. Alain_42 Messages postés 5413 Statut Membre 904
     
    tiens un petit exemple: (remplaces champ1_bdd par les noms de tes champs de ta table)

    <?php 
    //si tu veux proposer plusieurs fois de suite la recherche, le plus simple est de traiter dans la même page 
    // par le value="... on conserve le choix pre cedent au réaffichage 
     //init 
     $choix_champ=array(); 
        //connexion BDD 
        $cnx=mysql_connect("host","login","passw"); 
        $db=mysql_select_db('ta_bdd'); 
         
    if(isset($_POST['rechercher'])){ 
        //recup des valeurs postées 
        //les champs selectionnées sont dans un array dont l'index est le nom du champ_bdd 
        $choix_champ=$_POST['champ']; 
         
        //construction de la requette en fonctions des choix 
        $req_rech="SELECT * FROM ta_table WHERE "; 
        if(sizeof($choix_champ)>0){ 
            $i=0; 
            foreach($choix_champ as $champ=>$value){ 
                if($i==0){ 
                    $req_rech.=" ".$champ."='".mysql_real_escape_string($value)."' ";             
                }else{ 
                    $req_rech.=" AND ".$champ."='".mysql_real_escape_string($value)."' ";             
                } 
                $i++; 
            } 
    
                //la tu fais ta requette dans la BDD et l'affichage 
        }else{ 
            echo 'Vous devez choisir au moins un champ'; 
         
        } 
    } 
    ?> 
    <html> 
    <body> 
    <?php 
    
    $req="SELECT DISTINCT champ1_bdd FROM ta_table"; 
    $result=mysql_query($req); 
    ?> 
    <select name="champ['champ1_bdd']" > 
        <?php 
        while($donnees=musql_fetc_assoc($result)){ 
            echo '<option value="'.$donnees['champ1_bdd'].''; 
            if(in_array($donnees['champ1_bdd'],$choix_champ['champ1_bdd']){ echo selected="selected";} //ça c'est pour conserver le choix au réaffichage 
            echo '">'.$donnees['champ1_bdd']..'</option>'; 
        } 
        ?> 
    </select> 
    
    <select name="champ['champ2_bdd']" > 
        <?php 
        while($donnees=musql_fetc_assoc($result)){ 
            echo '<option value="'.$donnees['champ2_bdd'].''; 
            if(in_array($donnees['champ2_bdd'],$choix_champ['champ2_bdd']){ echo selected="selected";} //ça c'est pour conserver le choix au réaffichage 
            echo '">'.$donnees['champ2_bdd']..'</option>'; 
        } 
        ?> 
    </select> 
    
    <select name="champ['champ3_bdd']" > 
        <?php 
        while($donnees=musql_fetc_assoc($result)){ 
            echo '<option value="'.$donnees['champ3_bdd'].''; 
            if(in_array($donnees['champ3_bdd'],$choix_champ['champ3_bdd']){ echo selected="selected";} //ça c'est pour conserver le choix au réaffichage 
            echo '">'.$donnees['champ3_bdd']..'</option>'; 
        } 
        ?> 
    </select> 
    
    <input type="submit" name="rechercher" value="rechercher" /> 
    
    </body> 
    </html>
    1
    1. Maskk Messages postés 89 Statut Membre 2
       
      Ecoute je te remercie c'est super clair , je vais regarder a quoi servent in_array() et sizeof() je pense ^^ apres je te dirais si ca marche .
      En revanche," $champ=>$value " si j'ai une connexion a ma base par ODBC puis je quand meme faire par objet?
      (Tu repondras a une bien grosse question que je me posais ...)
      En tout cas merci beaucoup a toi !
      0
    2. Maskk Messages postés 89 Statut Membre 2
       
      Desolé Alain mais

      if(in_array($donnees['champ1_bdd'],$choix_champ['champ1_bdd']){ echo selected="selected";} //ça c'est pour conserver le choix au réaffichage

      Quand je met ton code j'ai une erreur de page.
      De plus $req="SELECT DISTINCT champ1_bdd FROM ta_table"; je dois dans ton cas mettre $champ_choix non ?
      0
  2. Alain_42 Messages postés 5413 Statut Membre 904
     
    $champ=>$value

    ce n'est pas par objet, c'est une fonctionnalité de la boucle foreach pour parcourir un array

    foreach parcours l'array en mettant l'index (ou clef) dans la première $champ et la valeur correspondante à cet index dans $value

    if(in_array($donnees['champ1_bdd'],$choix_champ['champ1_bdd']){ echo selected="selected";} //ça c'est pour conserver le choix au réaffichage

    if(in_array($donnees['champ1_bdd'],$choix_champ){ echo selected="selected";} 

    Quand je met ton code j'ai une erreur de page.


    si cette modif ne marche pas, qu'elle erreur ? et as tu bien remplacé 'champ1_bdd' par le nom réel du champ de ta bdd ?

    $req="SELECT DISTINCT champ1_bdd FROM ta_table"; je dois dans ton cas mettre $champ_choix non ?

    NON c'est pour afficher dans la liste select toutes les valeurs du champ (DISTINCT pour les avoir une seule fois si il y en a plusieurs), pareil remplaces champ1_bdd et ta_table par tes noms à toi
    1
    1. Maskk Messages postés 89 Statut Membre 2
       
      oua super en 2 commentaires de ta part je crois qui ya pas mal de questions que j'avais qui sont claires maintenant merci
      0
  3. Maskk Messages postés 89 Statut Membre 2
     
    Alors voila j'ai pas mal testé deja pour le <select>

    En fait une parenthese n'etait pas fermée
    <?php
    while($donnees=odbc_fetch_array($result)){
    echo "<option value='".$donnees['titre']."";
    if(in_array($donnees['titre'],$choix_champ)){ echo "selected='selected'";} //ça c'est pour conserver le choix au réaffichage
    echo "'>".$donnees['nommat']."</option>";
    }
    ?>
    0
    1. Maskk Messages postés 89 Statut Membre 2
       
      par contre je n'arrive pas a joindre ma BDD avec les <select> rajouté apres celui la ... je cherche de mon coté pourquoi....J'ai copié ma requete je l'ai rename , et la tout fonctionne ^^
      0
  4. Maskk Messages postés 89 Statut Membre 2
     
    Bonjour,
    $req="SELECT DISTINCT champ1_bdd FROM ta_table";
    ne marche que pour le premier <select> par contre les autres ne s'affichent pas derriere , en revanche si je met 3 requettes differentes cela marche...
    Alain qu'en penses tu ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Alain_42 Messages postés 5413 Statut Membre 904
     
    si tu veux afficher 3 listes différentes il te faut bien 3 requettes non

    car je suppose que les trois listes n'affichent pas le même champ de ta BDD
    0
  7. Maskk Messages postés 89 Statut Membre 2
     
    Merci grâce a toi , et des dizaines heures de prises de tête.... j'ai enfin trouvé

    <?php
    function crit($ch){
    echo "<input tye=text name='requete' size=10>";
    echo "<select type='text' name='champ'>";
    echo "<option value='ref'>N° demande</option>" ;
    echo "<option value='nomsite'>Site</option>" ;
    echo "<option value='nomserv'>Service</option>" ;
    echo "<option value='utilisateur'>Utilisateur</option>" ;
    echo "<option value='intitule'>Priorité</option>" ;
    echo "<option value='nommat'>Probleme</option>" ;
    echo "<option value='corrige'>Traité</option>" ;
    echo "<option value='date'>Date</option>" ;
    echo "</select>" ;
    echo "<input type='button' value='reset' onclick='location.replace('rechercher.php')'>";
    echo " <input type='submit' name='envoyer' value='ok'>";
    }

    INCLUDE ('./includes/connexion_bdd.inc.php'); //connexion à ma bdd

    $requete =$_POST['requete'];
    $champ = $_POST['champ'];
    crit('$champ'); // je renvoies ma fonction

    if(isset($_POST['envoyer'])){

    $filtre = $_POST['filtre'];

    $filtre .= " and ".$champ." LIKE '%".$requete."%'";

    $query ="SELECT .... WHERE ...(id par ex) <> 0".$filtre;

    $query_env=odbc_do($connexion,$query);
    0