Filtrage d'une table sql a l'aide de listes déroulantes

saltwater08 Messages postés 8 Date d'inscription lundi 6 octobre 2008 Statut Membre Dernière intervention 20 novembre 2008 - 8 oct. 2008 à 12:05
saltwater08 Messages postés 8 Date d'inscription lundi 6 octobre 2008 Statut Membre Dernière intervention 20 novembre 2008 - 8 oct. 2008 à 15:02
Bonjour, je vais essayer d'etre bref et precis
Voila j'ai une table Table1 avec des champs : champ1,champ2,champ3,date
le but est de récuperer les différantes valeur possible des champs dans une liste déroulante et avoir deux zone de texte ou je peu metre des dates a fin de pouvoir filtrer les valeurs des champs qui m'interessent enntre deux dates:
Exemple1: la liste déroulante champ1 récupere les différantes valeurs possible de champ1, une fois que je selectionne la valeur qui m'interesse et que je fait soumetre
j'ai une variable $requete =  ' champ1="valeur selectionné"'
la requete finale ressemblera a "Select  * from table1 where.$requete"
Exemple2: la liste champ2 récupere les différantes valeurs possible, une fois que je selectionne la valeur qui m'interesse je saisi deux dates et je fait soumetre,
ma variable $requete = ' champ2="valeur selectionn" and date between "datechoisi1" and "datechoisi2"'
pareil la requete finale ressemblera a "Select  * from table1 where.$requet"  donc la requete finale sera Select * from table1 where 'champ2="valeur selection" and date between "datechoisi1" and "datechoisi2"'

jusqu'a present j'ai réussi a récuperer les différante valeurs des champs mais quand je click sur soumetre ma variable y'a que les champs dates qui envoi leur valeur voila mon code
dans mon code les champs sont kind, state, period  (ici je ne vais afficher que la partie qui recupere les valeurs de kind puisque pour state et period c pareil)

//requet pour récuperer les différent valeur de kind avec mysqli
$result_kind=$mysqli->query("Select distinct kind FROM $table ");

//recuperation des valeurs pour les metre dans ma liste (ici pour le champ kind)
echo "Filtrage de la table";
echo "<form action='Admin_test.php' method='POST' name="frm">";
echo "Kind : ";
echo "<select name='Kind'>";
echo'<option selected="selected">Null</option>';
while ($row = $result_kind->fetch_object()) {
echo"<option >$row->kind</option>";
}
echo"</select>, \";

//champ pour enter les dates et le bouton soumetre

echo\"Date debut : ";
echo ', ';
echo\"Date fin : ";
echo ', ';
// soumetre le formulaire
echo ', ';
echo"
</form>";

//recuperation des valeur des differente listes déroulantes
$whereClause = "";
if(isset($_POST["Kind"]) && $_POST['kind']!="Null")$whereClause.=' and kind="'.$_POST["kind"].'"';
if(isset($_POST["states"])&& $_POST['state']!="Null")$whereClause.=' and state="'.$_POST["state"].'"';
if(isset($_POST["periodes"])&& $_POST['period']!="Null")$whereClause.=' and period="'.$_POST["period"].'"';
if(isset($_POST["date1"]) && (!isset($_POST["date2"])))$whereClause.=' and date1 >="'.$_POST["date1"].'"';
if(isset($_POST["date2"]) && (!isset($_POST["date1"])))$whereClause.=' and date2 <="'.$_POST["date2"].'"';
if(isset($_POST["date1"]) && (isset($_POST["date2"])))$whereClause.=' and date_crea between '.$_POST["date1"].' and '.$_POST["date2"].'';

$requete_filtre ="SELECT * from $table  ".($whereClause?' WHERE '.$whereClause:'');

//test de la variable $whereclause
echo $whereclause
ca marche que pour les dates ca ne recupere pas le valeur de kind

2 réponses

nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
8 oct. 2008 à 13:58
Salut,

Il semble que ta requete generée est fausse

j'ai l'impression que ta requete resemble à WHERE AND KIND

Pour éviter cela je mettrais

$requete_filtre ="SELECT * from $table  ".($whereClause?' WHERE 1=1 '.$whereClause:'');
Dans ton code à la place de
$requete_filtre ="SELECT * from $table  ".($whereClause?' WHERE '.$whereClause:'');
0
saltwater08 Messages postés 8 Date d'inscription lundi 6 octobre 2008 Statut Membre Dernière intervention 20 novembre 2008
8 oct. 2008 à 15:02
Merci pour ta réponse j'ai fait
$requete_filtre ="SELECT * from $table  ".($whereClause?' WHERE '.substr($whereClause,5):''); ce qui enleve sistématiquement les 5 premier caractere de la chaie $whereClause;
pour le problem c'etait juste une erreur dans les variables j'ai oublier les "s" a la fin lol des fois c'est tout bete. et j'avai pas mi de else if dans les dates
//nouveau code

whereClause = "";
if(isset($_POST["Kind"]) && $_POST['Kind'])$whereClause.=' and kind="'.$_POST["Kind"].'"';
if(isset($_POST["States"])&& $_POST['States'])$whereClause.=' and state="'.$_POST["States"].'"';
if(isset($_POST["Periodes"])&& $_POST['Periodes'])$whereClause.=' and period="'.$_POST["Periodes"].'"';
if($_POST["date1"] && !$_POST["date2"])$whereClause.=' and date_crea >= "'.profil::_cleanDate($_POST["date1"]).'"';
elseif($_POST["date2"] && !$_POST["date1"])$whereClause.=' and date_crea <= "'.profil::_cleanDate($_POST["date2"]).'"';
elseif($_POST["date1"] && $_POST["date2"])$whereClause.=' and date_crea between "'.profil::_cleanDate($_POST["date1"]).'" and "'.profil::_cleanDate($_POST["date2"]).'"';

j'aurai besoin d'une fonction qui filtre une chaine de caractere pour la transformer en date lisible pour une requete sql. j'utilise une class que j'avai mais elle ne fait pas bien le boulo pour les seconde elle ne formate que les jours mois et année, mais j'ai besoin de plus de précision si quelqu'un connais une fonction qui formate tout en employant les seconde genre "2008 04 30 20 18 05" - 2008-04-30 20:18:05
ou bien une fonction qui separe la date en deux partie les jour mois année seron traité par ma classe et le reste par une fonction qui va faire la convertion pour je concat le resultat,
Merci encor
0
Rejoignez-nous