[PHP] recherche BDD

EXTREME FATIMA -  
 EXTREME FATIMA -
Bonjour,


Voila j'ai crée un formulaire qui fait une recherche dans ma base de données.
Lorsque que je clique sur "VALIDER" les résultats s'affichent sans probleme.

L'ennui c'est que je dois remplir tous les champs de mon formulaire pour que la recherche me sorte un résultat.

Comment faire pour que les champs laissés vide du formulaire ne soient pas pris en compte???


Mon code si vous en avez besoin pour mmieux comprendre
<?php
// On commence par récupérer les champs
if(isset($_POST['rech_raison_sociale'])) $rech_raison_sociale=$_POST['rech_raison_sociale'];
else $rech_raison_sociale="";

//if(isset($_POST['rech_num_cont'])) $rech_num_cont=$_POST['rech_num_cont'];
//else $rech_num_cont="";

if(isset($_POST['rech_date_dem'])) $rech_date_dem=$_POST['rech_date_dem'];
else $rech_date_dem="";

//if(isset($_POST['rech_numseqcour'])) $rech_numseqcour=$_POST['rech_numseqcour'];
//else $rech_numseqcour="";

//if(isset($_POST['rech_re_num'])) $rech_re_num=$_POST['rech_re_num'];
//else $rech_re_num="";

//if(isset($_POST['rech_pa'])) $rech_pa=$_POST['rech_pa'];
//else $rech_pa="";

//if(isset($_POST['rech_fr'])) $rech_fr=$_POST['rech_fr'];
//else $rech_fr="";

//if(isset($_POST['rech_etat'])) $rech_etat=$_POST['rech_etat'];
//else $rech_etat="";

// on se connecte à MySQL
$db = mysql_connect('localhost', 'root', '');

// on sélectionne la base
mysql_select_db('strateo',$db);

// on crée la requête SQL
$sql = "SELECT ent_adresse,ent_ville FROM cpt_entreprise WHERE ent_raison_sociale LIKE '".$rech_raison_sociale."' AND ent_date_dem LIKE '".$rech_date_dem."'";

// on envoie la requête
$req = mysql_query($sql) or die(mysql_error());

// on fait une boucle qui va faire un tour pour chaque enregistrement
while($data = mysql_fetch_assoc($req))
{
// on affiche les informations de l'enregistrement en cours


'
echo 'Adresse : '.$data['ent_adresse'].' <br />';
echo 'ville : '.$data['ent_ville'].' <br />';
}

// on ferme la connexion à mysql
mysql_close();
A voir également:

5 réponses

mindslight Messages postés 87 Date d'inscription   Statut Membre Dernière intervention   12
 
Bonjour,

tu peux tester si un champ a ete rempli de cette maniere:

if (isset($_POST['mon_champ']) && trim($_POST['rech_pa']) != '')
{
// je prend en compte le champ
}
0
EXTREME FATIMA
 
Oui mais justement comment le prendre en compte ou non?

C'est la que je coince en fait
0
mindslight Messages postés 87 Date d'inscription   Statut Membre Dernière intervention   12
 
attention au probleme de securite! car un hacker peu scupuleux
aura aucun mal a casser ta base de donnee a coup d'injection SQL

rajoute des addslashees() autour des donnees de type string et cast
les valeurs en int pour les entiers. sans oublier les back-quote autour des noms de colonnes.

ta requette deviens donc:

$sql = 'SELECT `ent_adresse`, `ent_ville`
FROM `cpt_entreprise`
WHERE `ent_raison_sociale` LIKE \''. addslashees($rech_raison_sociale) . '\'
AND `ent_date_dem` LIKE \'' . addslashees($rech_date_dem) . '\'';

si un seul champ est retourne, oublie pas le "LIMIT 1" a la fin de ta requette.

bon courrage.
0
mindslight Messages postés 87 Date d'inscription   Statut Membre Dernière intervention   12
 
re,

dans le cas ou la condition :
if (isset($_POST['mon_champ']) && trim($_POST['rech_pa']) != '')
n'est pas vrai donc attribu une valeur par defaut ou
tu sort de ta fonction
0
EXTREME FATIMA
 
Okay je comprends ce que vous voulez dire mais comment faire varier ma requete en fonction de ce que contiendra la variable.

En gros ce que je veux dire c'est que si le champ est vide alors il ne faut pas l'integrer dans la requete SQL.


PS : JE sis une newbie en php , j'ai que 5 jours dans les doigts xD!
0

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

Posez votre question
mindslight Messages postés 87 Date d'inscription   Statut Membre Dernière intervention   12
 
ok,

tu peux proceder comme ca:
-------------------------------------------------------------------------------------------------------------------------
$sql = 'SELECT `ent_adresse`, `ent_ville`
FROM `cpt_entreprise`
'WHERE `ent_raison_sociale` LIKE \''. addslashees($rech_raison_sociale) . '\'';

if (...)
$sql .= ' AND `col1` LIKE \'' . addslashees($var1) . '\'';
else if (...)
$sql .= ' AND `col2` LIKE \'' . addslashees($var2) . '\'';
else
$sql .= ' AND `col3` = ' . (int)$var3;

-------------------------------------------------------------------------------------------------------------------------

en clair, utiliser la concatenation (.=) et des tests afin de modifier la requette.
0
EXTREME FATIMA
 
OKay je comprends mieux comme ça


Merci de m'avoir aidée!
0