Recherche multicriteres a partir d'un formulaire [Résolu]

Signaler
Messages postés
37
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
24 janvier 2006
-
Messages postés
5
Date d'inscription
mardi 9 décembre 2008
Statut
Membre
Dernière intervention
9 janvier 2009
-
salut ........... je viens de debuter en php et malheuresement ça se sent .



bon , passons a ma question pour ne pas vous faire perdre votre precieux temps.



je souhaite effectuer une recherche dans une base de donnees mysql (
enfin bon en utilisant phpmyadmin ) plius precisement dans une table
contenant comme champs : nom , prenom , region . le probleme
c'est que le racherche s'effectue a partir d'un formulaire
contenant des zones de textes "nom" "prenom" et "region" ........ et si
je tape seulement le nom les enregistrements contenant le nom en
question s'affiche , mais si je tape le nom et le prenom seuls les
enregistrements qui comportent le nom ET le prenom qui s'affichent et
ainsi de suite ( cas ou je tape la region , ou bien la region et le
prenom ,..... )



voila j'espere que j'etais assez clair ........ merci d'avance .

19 réponses

Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
bah un truc dans le genre :

$i = 0;
$sql = "SELECT xxx FROM ta_table WHERE ";

if ( isset($_POST['nom']) ) { $sql ."nom '".$_POST['nom']."'";
$i++;
}

if ( isset($_POST['prenom']) ) {
if ( $i > 0 ) $sql .= ' AND '; $sql ."prenom '".$_POST['prenom']."'";
$i++;
}

if ( isset($_POST['region']) ) {
if ( $i > 0 ) $sql .= ' AND '; $sql ."region '".$_POST['region']."' ";
$i++;
}

mysql_query($sql) or die (mysql_error());

quelque chose comme ca quoi... voila l'idée de base !
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
15
Franchement, je sais pas si je suis mal réveillé, mais je capte pas un mot de ta question !
Tu veux chercher quoi? Si jamais tu peux directement faire des requêtes
SQL dans phpmyadmin, au lieu de passer par l'interface graphique.


*****
THINK -> SEEK -> ASK
Messages postés
392
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
26 septembre 2009

Bonjour, je suis désoler, mais je n'ai pas super bien compris.
"et si je tape seulement le nom les enregistrements contenant le nom en
question s'affiche , mais si je tape le nom et le prenom seuls les
enregistrements qui comportent le nom ET le prenom qui s'affichent et
ainsi de suite ( cas ou je tape la region , ou bien la region et le
prenom ,..... )"
tu me trouveras peut être un peu bête mais ca est ce que c'est ce que tu veux ?
A++
<hr size="2" width="100%">Si un des membres à poster une reponse qui convient, accepter là !
Messages postés
392
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
26 septembre 2009

Lol, on a écrit presque en même temps ...

<hr size="2" width="100%">Si un des membres à poster une reponse qui convient, accepter là !
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
4
en fait

tu dois vouloir construire une chaine sql concaténée en fonction des criteres

demandés ??
Messages postés
105
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
14 février 2013
2
$sql = "SELECT ton_champ FROM ta_table WHERE";



if(champ1 remplis){

$champ1rempli=true;

$sql .=" champs_table = ".$champs1_formulaire;

}else{

$champ1rempli=false;

}

if(champ2 remplis){

if($champ1rempli==true){

$sql .=" AND champs_table = ".$champs2_formulaire;

}else{

$sql .="champs_table = ".$champs2_formulaire;

}





ensuite je te laisse faire... desolé je repond ausi clairement que la
question mais j'ai pas trop compris la question... enfin tu connai le
principe, tu devrais pouvoir t'en sortir avec ca !
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Salut,

y'a pas une option dans PhpMyadmin qui te permette de faire une recherche "OU" (du genre "tous les mots" ou encore "chacun des mots") ?

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
105
Date d'inscription
lundi 13 décembre 2004
Statut
Membre
Dernière intervention
14 février 2013
2
manuelement il y a un outil de recherche dans phpmyadmin... mais pour ton site, il faut apprendre le langage SQL
Messages postés
37
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
24 janvier 2006

desolée ......... j'ai ecrit trop vite et j'ai meme pas verifié si j'etais clair .



en fait j'ai un formulaire ( <form></form>) qui comprend 3
zones de textes : ( copier/coller ce code html et vous allez comprendre
)



<form name="form_chercher" method="post" action="afficher_recherche.php">


Formulaire de
recherche,

----

Nom :,

,

----

Prenom :,

,

----

Region :,

,

----



</form>



la recherche s'effectue dans une table qui a 3 champs "nom" "prenom" "region"



bon ce que je n'arrive pas a faire c'est que si je remplie seulement la
zone de texte dediée au nom la recherche s'effectue seulement dans le
champ "nom" de la table et affiche le resultat mais si je remplie la
zone de texte dediée au nom ET aussi le prenom la recherche s'effectue
cette fois ci dans les deux champs "nom" ET "prenom" de la table et
affiche le resultat .



voila .............. cette
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
Pense juste aux failles de SQL injection avec cette méthode (vérifie les caratères et applique la fonction préférée de FhX (lol) : mysql_real_escape_string()) (mdr je vais pas te lâcher avec ça ^^)

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
Arf, une fonction qui va me suivre jusqu'à la fin :p

Jusqu'au jour où on utilisera plus MySQL d'office avec PHP :D

De toute facon, avec ma méthode tu peux le faire aussi via une boucle et un tableau associatif, à coup de foreach et de $i++; c'est aussi faisable tout en étant aussi propre (voir plus !) :)
Messages postés
37
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
24 janvier 2006

merci les gars vous me sauvez la vie
Messages postés
37
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
24 janvier 2006

oups j'ai oublier de signaler une chose c'est que le code qui proposé
par FhX marche mieux si on utilise : if ( $_POST['nom']!=='' ) au lieu
de : if ( isset($_POST['nom']) ) ....mais ne me demandez pas pourquoi
parce que j'en ai aucune idée !



voila c'est tout et encore merci
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
8
non non faut pas changer ça car t'auras des erreurs de "undefined variable"

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
"if ( $_POST['nom']!=='' ) au lieu de : if ( isset($_POST['nom']) )
....mais ne me demandez pas pourquoi parce que j'en ai aucune idée !"
Nononon, si tu veux utiliser ta méthode correctement, tu dois faire :
if ( isset($_POST['nom']) && !empty($_POST['nom']) ) { // }

La c'est correct :)
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
Avec un tableau, ca donne ca :

$array = array('nom', 'prenom', 'region');
$i = 0;
$sql = 'SELECT xxxx FROM table WHERE ';
foreach ( $array as $key ) {
if ( isset($_POST[$key]) && !empty($_POST[$key]) ) {
if ( $i > 0 ) $sql .= ' AND '; $sql .$key." '".$_POST[$key]."' ";
$i++;
}
}
mysql_query($sql);

C'est plus court et aussi lisible je trouve :)
Messages postés
37
Date d'inscription
dimanche 8 mai 2005
Statut
Membre
Dernière intervention
24 janvier 2006

ah oui thanks (pour ne pas repeter "merci" encore une fois ) .......
c'est vrai que maintenant c'est beaucoup plus stable ........ merci !
Messages postés
5
Date d'inscription
mardi 9 décembre 2008
Statut
Membre
Dernière intervention
9 janvier 2009

Bonsoir,

j'ai essayer le code de Fhx pour mon formulaire de recherche :

?php
mysql_connect("localhost", "root", "");
mysql_select_db("frs_db"); // Sélection de la base
$i = 0;
$sql = "SELECT * FROM fournisseurs WHERE ";

if ( isset($_POST['denomination']) ) {     $sql ."denomination '".$_POST['denomination']."'";
     $i++;
}

if ( isset($_POST['activite']) ) {
     if ( $i > 0 ) $sql .= ' AND ';     $sql ."activite '".$_POST['activite']."'";
     $i++;
}

if ( isset($_POST['localite']) ) {
     if ( $i > 0 ) $sql .= ' AND ';     $sql ."localite '".$_POST['localite']."' ";
     $i++;
}

mysql_query($sql) or die (mysql_error());
 
while ($donnees = mysql_fetch_array($sql) )
{
?>
   
    Fournisseur : <?php echo $donnees['denomination']; ?>

    Son activité : <?php echo $donnees['activite']; ?>

    Sa localité : <?php echo $donnees['localite']; ?>

  

<?php
}
 
mysql_close(); // Déconnexion de MySQL

?>

Mais ça me renvoie cette erreur :

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\xxx\result.php on line 65

la ligne 65 est celle là :

while ($donnees = mysql_fetch_array($sql) )

Merci de m'éclaircir l'erreur :)
Messages postés
5
Date d'inscription
mardi 9 décembre 2008
Statut
Membre
Dernière intervention
9 janvier 2009

Je coince :s

SVP une réponse.

Merci.