Recherche multicriteres a partir d'un formulaire

Résolu
bakchlada Messages postés 37 Date d'inscription dimanche 8 mai 2005 Statut Membre Dernière intervention 24 janvier 2006 - 14 janv. 2006 à 04:00
chillnout Messages postés 5 Date d'inscription mardi 9 décembre 2008 Statut Membre Dernière intervention 9 janvier 2009 - 12 déc. 2008 à 12:18
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

FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
14 janv. 2006 à 18:16
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 !
3
malik7934 Messages postés 1154 Date d'inscription mardi 9 septembre 2003 Statut Membre Dernière intervention 15 août 2009 17
14 janv. 2006 à 09:29
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
0
cs_Arnauti Messages postés 392 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 26 septembre 2009
14 janv. 2006 à 09:30
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à !
0
cs_Arnauti Messages postés 392 Date d'inscription mercredi 24 novembre 2004 Statut Membre Dernière intervention 26 septembre 2009
14 janv. 2006 à 09:32
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à !
0

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

Posez votre question
sidf Messages postés 1216 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 18 octobre 2012 5
14 janv. 2006 à 12:08
en fait

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

demandés ??
0
mictif Messages postés 105 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 14 février 2013 2
14 janv. 2006 à 12:58
$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 !
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
14 janv. 2006 à 13:04
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>
0
mictif Messages postés 105 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 14 février 2013 2
14 janv. 2006 à 13:05
manuelement il y a un outil de recherche dans phpmyadmin... mais pour ton site, il faut apprendre le langage SQL
0
bakchlada Messages postés 37 Date d'inscription dimanche 8 mai 2005 Statut Membre Dernière intervention 24 janvier 2006
14 janv. 2006 à 16:17
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
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
14 janv. 2006 à 18:31
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>
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
14 janv. 2006 à 19:47
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 !) :)
0
bakchlada Messages postés 37 Date d'inscription dimanche 8 mai 2005 Statut Membre Dernière intervention 24 janvier 2006
15 janv. 2006 à 02:31
merci les gars vous me sauvez la vie
0
bakchlada Messages postés 37 Date d'inscription dimanche 8 mai 2005 Statut Membre Dernière intervention 24 janvier 2006
15 janv. 2006 à 04:51
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
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
15 janv. 2006 à 09:48
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>
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
15 janv. 2006 à 13:15
"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 :)
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
15 janv. 2006 à 13:55
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 :)
0
bakchlada Messages postés 37 Date d'inscription dimanche 8 mai 2005 Statut Membre Dernière intervention 24 janvier 2006
15 janv. 2006 à 19:48
ah oui thanks (pour ne pas repeter "merci" encore une fois ) .......
c'est vrai que maintenant c'est beaucoup plus stable ........ merci !
0
chillnout Messages postés 5 Date d'inscription mardi 9 décembre 2008 Statut Membre Dernière intervention 9 janvier 2009
12 déc. 2008 à 03:07
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 :)
0
chillnout Messages postés 5 Date d'inscription mardi 9 décembre 2008 Statut Membre Dernière intervention 9 janvier 2009
12 déc. 2008 à 12:18
Je coince :s

SVP une réponse.

Merci.
0
Rejoignez-nous