Formulaire en GET

Julien_37
Invité n'ayant pas de compte PHPfrance

24 sept. 2010, 12:55

Bonjour,

j'ai un problème que je comprends bien mais que je n'arrive pas à interpréter via php.

Via une base de données, je liste tous mes articles avec leur valeurs de champs, jusqu'ici rien de méchant.
Ensuite je crée un formulaire sur cette même page en méthod GET afin d'appliquer des filtres de recherche qui vont agir sur la requête initiale. ("SELECT * FROM articles").
Mes filtres sont des menus déroulant, SELECT et OPTION. Je rajoute un bouton submit pour valider ma recherche (pour l'ensemble des filtres, pas de bouton pour chaque filtre)

Mon problème est le suivant, quand la valeur d'un filtre est nulle (le titre du filtre en option n°1), la valeur apparait dans l'url , admin_article.php?type='0' par exemple.

moi je ne veux pas de cette valeur dans l'url puisqu'elle est nulle, et du coup ma requête est faussée. Comment dois-je procéder pour que l'url s'incrémente automatiquement suivant la valeur des filtres? Sachant que j'incrémente ma requête suivant le filtre.
A titre d'exemple, voici une url finale qui du coup ne donne rien, normal... :
http://localhost/admin_prod.php?f_type= ... _status='0'

En vous remerciant, Julien.

Mammouth du PHP | 19672 Messages

24 sept. 2010, 13:26

Peut-être qu'il serait opportun de valider la donnée avant de l'injecter dans une requête SQL. En interceptant ton paramètre, vérifie que sa valeur soit valide pour la requête et si elle ne l'est pas, tu ré-affiches la page sans exécuter la requête et éventuellement tu affiches un message du genre "Vous devez sélectionner un des titres" ou quelque chose d'approchant.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 314 Messages

24 sept. 2010, 13:40

Peut-être qu'il serait opportun de valider la donnée avant de l'injecter dans une requête SQL.
J'enlèverai même le peut-être, il faut toujours vérifier !

NEVER TRUST USER INPUT
Cordialement,
Julien - http://laravel.fr/

Julien_37
Invité n'ayant pas de compte PHPfrance

25 sept. 2010, 10:31

Ok, j'ai bien vérifié les valeurs effectivement, maintenant ayant 4 filtres, j'ai donc 16 possibilités, mais je ne pense pas qu'il soit utile de les écrire une par une...
J'ai écrit la premiere, cad si toutes les variables sont nulles, soit 'xx'. Je ne sais comment concatener ma requête suivant le résultat des autres valeurs valeurs... je ne m'y prend peut-être pas comme il faut.
Quelqu'un pourrait m'aiguiller?
Merci, Julien

Code : Tout sélectionner

if (isset($_GET['f_designation'])) { $f_designation = $_GET['f_designation']; } else { $f_designation = 'xx'; } if (isset($_GET['f_univers'])) { $f_univers = $_GET['f_univers']; } else { $f_univers = 'xx'; } if (isset($_GET['f_destination'])) { $f_destination = $_GET['f_destination']; } else { $f_destination = 'xx'; } if (isset($_GET['f_status'])) { $f_status = $_GET['f_status']; } else { $f_status = 'xx'; } $requete = "SELECT * FROM produits"; if ($f_designation == 'xx' && $f_univers == 'xx' && $f_destination == 'xx' && $f_status == 'xx') { $requete = "SELECT * FROM produits"; }

Julien_37
Invité n'ayant pas de compte PHPfrance

26 sept. 2010, 18:24

Hello,
je n'ai toujours pas résolu mon problème, voici une page de test :

Code : Tout sélectionner

if(isset($_GET['choix1'])) { $choix1 = $_GET['choix1']; } if(isset($_GET['choix2'])) { $choix2 = $_GET['choix1']; } echo '<center>'.$choix1.' / '.$choix2.'</center>'; ?> <HTML> <HEAD> <TITLE> GET </TITLE> </HEAD> <BODY> <br><br> <center> <FORM name='test' method='get' action='index.php'> <SELECT name='choix1'> <option value='0'>choix 1</option> <option value='A1'>A1</option> <option value='A2'>A2</option> </SELECT>&nbsp;&nbsp; <SELECT name='choix2'> <option value='0'>choix 2</option> <option value='B1'>A1</option> <option value='B2'>A2</option> </SELECT>&nbsp;&nbsp; <br><br> <input type='submit' value='valider'> </FORM> </center> </BODY> </HTML>
Est-ce que quelqu'un peut m'expliquer pourquoi quand je ne fais aucun choix (valeurs nulles), j'obtiens une url du type index.php?choix1=0&choix2=0 et non pas index.php ? Je ne comprend pas comment ne pas incrémenter l'url si une valeur du formulaire est nulle.

Merci pour vos réponses.

Mammouth du PHP | 19672 Messages

26 sept. 2010, 20:27

Parce que la valeur zéro est différente de null. Null, c'est l'absence de valeur, même pas une chaine vide.
Donc si tu laisses l'affichage de base, ce sont les premières balises option qio sont affichées et elles ont pour valeur zéro dans les deux cas. L'url est donc logiquement avec choix1=0 et choix2 = 0.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Julien_37
Invité n'ayant pas de compte PHPfrance

26 sept. 2010, 22:49

Okééé

il considere 0 comme une valeur existante, je dois donc écrire:

Code : Tout sélectionner

else { $choix1 = NULL; } quand je check mes variables ?