[PHP] recherche BDD

Fermé
EXTREME FATIMA - 6 juin 2008 à 10:08
 EXTREME FATIMA - 6 juin 2008 à 11:06
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 mercredi 1 juin 2005 Statut Membre Dernière intervention 29 octobre 2009 12
6 juin 2008 à 10:20
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
6 juin 2008 à 10:29
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 mercredi 1 juin 2005 Statut Membre Dernière intervention 29 octobre 2009 12
6 juin 2008 à 10:27
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 mercredi 1 juin 2005 Statut Membre Dernière intervention 29 octobre 2009 12
6 juin 2008 à 10:33
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
6 juin 2008 à 10:51
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 mercredi 1 juin 2005 Statut Membre Dernière intervention 29 octobre 2009 12
6 juin 2008 à 10:58
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
6 juin 2008 à 11:06
OKay je comprends mieux comme ça


Merci de m'avoir aidée!
0