Filtre de données

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Filtre de données

par Ryle » 26 avr. 2007, 23:49

C'est pour ça qu'il y a un " WHERE ... " au préalable. Si ce n'est pas le cas, il faut adapter bien évidement à son code et tester s'il y a eu une condition pour savoir si l'on doit mettre un AND ou un WHERE :)
Ton exemple ne fonctionnera pas plus si 'champX' n'est pas renseigné, tu vas zapper le WHERE et attaquer directement avec le AND du 'champY'.

A chacun sa façon de faire après, on peut tester à chaque fois :
$sql = "SELECT .. FROM .. "; 
$sqlCritere = "";
if($_POST['champX'] != '') {
  $sqlCritere .= ($sqlCritere=='') ? 'WHERE' : 'AND';
  $sqlCritere " champX = '".$_POST['champX']."'";  
}
if($_POST['champY'] != '')  {
  $sqlCritere .= ($sqlCritere=='') ? 'WHERE' : 'AND';
  $sqlCritere .= " champY LIKE '".$_POST['champY']."'%"; 
}
...
$sql .= $sqlCritere;
Ou bien tout rassembler à la fin :
$sql = "SELECT .. FROM .. "; 

$critere = array();
if($_POST['champX'] != '')  
  $critere[] = " champX = '".$_POST['champX']."'";  
if($_POST['champY'] != '')  
  $critere[] = " champY LIKE '".$_POST['champY']."'%"; 
...
$sql .= " WHERE " . implode(' AND ', $critere);
Quelque soit la façon de faire, ce qui compte de toute façon c'est de générer une chaine de caractère qui correspondra à la requête SQL que l'on souhaite jouer :)

par orgerix » 26 avr. 2007, 21:27

Non, il ne marche pas.

La solution de Ryle ne marche que s'il y avait déjà un filtrage. Sinon, il faut faire ca :
$sql = "SELECT .. FROM .. ";
if($_POST['champX'] != '') 
  $sql.= " WHERE champX = '".$_POST['champX']."'"; 
if($_POST['champY'] != '') 
  $sql.= " AND champY LIKE '".$_POST['champY']."'%";
[...]

par Mikayé » 26 avr. 2007, 21:23

OK merci ! Je test et je vois si ca marche ... parce-que je ne savait pas que dans la requete sql les AND fonctionnait sans autres champs de recherche avant ...

par Ryle » 26 avr. 2007, 20:12

Oui c'est possible, il te suffit de récupérer les valeurs des champs qui ont été renseignés et de construire ta requête en filtrant en fonction de ces valeurs...

Et pour l'exemple, on va faire simple car comprendre te sera toujours plus pofitable que recopier ;)
$sql = "SELECT .. FROM .. WHERE ..";
if($_POST['champX'] != '')
  $sql.= " AND champX = '".$_POST['champX']."'";
if($_POST['champY'] != '')
  $sql.= " AND champY LIKE '".$_POST['champY']."'%";
...
Voilà, tu as la marche à suivre et l'exemple.. y a plus qu'à :)

Filtre de données

par Mikayé » 26 avr. 2007, 18:23

Bonjour,
Voici ma situation : j'ai un petit site (pour l'instant) en php (j'ai débuté il y a une semaine). Les données sont dans une base Mysql (version 5 je crois ...) et je voudrais faire un formlaire pour filtrer l'affichage des données avec 16 champs sachant que tout les champs ne sont pas forcément remplis. Ma question : est-ce réalisable en php et si oui comment ?

Sachant que pour pouvoir programmer je me sert d'exemple par-ci par-là (donc me donner des exemples plutot que la marche à suivre SVP)
Merci d'avance !