PHP - faire plusieurs recherches a la suite .

Résolu/Fermé
Maskk Messages postés 89 Date d'inscription mercredi 1 juillet 2009 Statut Membre Dernière intervention 23 décembre 2010 - 30 sept. 2010 à 08:59
Maskk Messages postés 89 Date d'inscription mercredi 1 juillet 2009 Statut Membre Dernière intervention 23 décembre 2010 - 22 oct. 2010 à 12:25
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

A voir également:

6 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
Modifié par Alain_42 le 30/09/2010 à 09:40
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
Maskk Messages postés 89 Date d'inscription mercredi 1 juillet 2009 Statut Membre Dernière intervention 23 décembre 2010 2
30 sept. 2010 à 10:04
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
Maskk Messages postés 89 Date d'inscription mercredi 1 juillet 2009 Statut Membre Dernière intervention 23 décembre 2010 2
30 sept. 2010 à 11:21
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
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par Alain_42 le 30/09/2010 à 13:36
$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
Maskk Messages postés 89 Date d'inscription mercredi 1 juillet 2009 Statut Membre Dernière intervention 23 décembre 2010 2
30 sept. 2010 à 13:49
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
Maskk Messages postés 89 Date d'inscription mercredi 1 juillet 2009 Statut Membre Dernière intervention 23 décembre 2010 2
30 sept. 2010 à 14:07
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
Maskk Messages postés 89 Date d'inscription mercredi 1 juillet 2009 Statut Membre Dernière intervention 23 décembre 2010 2
Modifié par Maskk le 30/09/2010 à 14:45
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
Maskk Messages postés 89 Date d'inscription mercredi 1 juillet 2009 Statut Membre Dernière intervention 23 décembre 2010 2
5 oct. 2010 à 08:58
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
5 oct. 2010 à 18:38
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
Maskk Messages postés 89 Date d'inscription mercredi 1 juillet 2009 Statut Membre Dernière intervention 23 décembre 2010 2
22 oct. 2010 à 12:25
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