Le danger des listes déroulantes
le 18/02/2011 à 22:37
elisa
Bonsoir :)
Je reviens vers vous car je me pose une question sur la sécurité concernant les listes déroulantes.
j'améliore petit à petit mon site, j'ai réussi au bout de quelques jours, à installer le mail de validation à l'inscription, des checkboxs à choix multiples, listes déroulantes ...
Ce matin, en parcourant le profil des nouveaux membres, j'ai eu une drôle de surprise : le profil d'un membre affichait un pays qui ne fait pas parti de ma liste déroulante pays ?????
Toute la journée, j'ai changé l'écriture de toutes mes listes déroulantes avec un tableau array pour sécurisée les listes mais es-ce suffisant ?
Que faut il faire pour bien sécurisée une liste déroulante en php ?
Merci :)
Bonne soirée.
salut,
il faut vérifier la valeurs choisie a la validation du formulaire, suivant d'où provient l'info avec un in_array ou une requête select si cela vient du sgbd.
@+
Il en faut peu pour être heureux !!!!!
le 19/02/2011 à 14:55
elisa
Bonjour.
Très bien, alors je reprends mon array pays :
<?php
pays = array("France","Canada","Espagne","Italie","Maroc","Suisse");
//c'est ici que je pose la fonction in_array
$verif= "France","Canada","Espagne","Italie","Maroc","Suisse";
if(in_array($verif,$pays))
{
echo $verif." se trouve dans la liste des pays proposés.";
}
else
{
echo $verif." ne se trouve pas dans la liste des pays proposés.";
}
// suite du traitement de la liste déroulante
php ?>
Le code est t-il correct ? Dans in_array, je vérifie tous le pays en une seule commande, es-ce bon ?
Merci :)
ce serait plutot
<?php
pays = array("France","Canada","Espagne","Italie","Maroc","Suisse");
//c'est ici que je pose la fonction in_array
if(in_array($_POST['champ liste deroulante'],$pays))
{
echo $verif." se trouve dans la liste des pays proposés.";
}
else
{
echo $verif." ne se trouve pas dans la liste des pays proposés.";
}
// suite du traitement de la liste déroulante
?>
ceci, bien entendu, dans le cas où tu est une liste simple :) dans le cas d'une liste multiple tu fait pareil en passant le tableau du choix de l'utilisateur en 1er paramètre ;)
@+
Il en faut peu pour être heureux !!!!!
le 19/02/2011 à 17:33
elisa
En effet, in_array ne fonctionne pas avec tous les pays inclus comme dans mon code. Merci pour la correction, je vais appliquer ceci sur toutes les listes déroulantes simples, un souci de moins :)
Bon week-end :)
le 28/02/2011 à 15:02
elisa
Bonjour :)
Je souhaite conserver la valeur choisie (de la liste déroulante) par le membre lors de la modification de son profil et j'y arrive pas.
J'ai tenté pleins de choses mais cela ne fonctionne pas.
Voilà le code de la liste déroulante pays :
<?php
$pays=array('France','Belgique','Canada','Espagne','Italie','Monaco','Maroc','Portugal','Suisse','Autre');
if(in_array($_POST['pays'],$pays))
{
echo $verif." se trouve dans la liste des pays proposés.";
}
else
{
echo $verif." ne se trouve pas dans la liste des pays proposés.";
}
for($i=0;$i<=9;$i++)
{
echo"
<option value=\"".$pays[$i]."\" selected=\"selected\">".$pays[$i]."</option>";
}
php ?>
Le selected=\"selected\" ne fonctionne pas.
Merci de votre aide :)
salut,
pour le selected si tu le fait à chaque option c'est inutile )
il faut tester la valeur de $pays[$i] pour savoir si oui ou non tu doit mettre le selected ;)
Pour sauvegarder la valeur il faut modifier le profile :)
@+
Il en faut peu pour être heureux !!!!!
le 01/03/2011 à 14:34
elisa
Bonjour ;)
Alors voilà, j'ai changé mon code d'après un bouquin php et j'aimerais avoir votre avis.
Code liste déroulante pays :
<?php
echo'<select name="pays" id="pays">';
if(is_array($_POST['pays'])==false || count($_POST['pays'])<=1) {
$erreur .=" le pays n'est pas correct<br />";
}
else {
$pays = array('France','Belgique','Canada','Espagne','Italie','Monaco','Maroc','Portugal','Suisse','Autre');
foreach ($_POST['pays'] as $tmp) {
if (in_array($tmp,$pays)==false)
$erreur .=" le pays n'est pas correct<br />";
}
}
// fin du code php, ici j'affiche les options
<option<?php if($pays == "France") { echo 'selected'; } ?>>France</option>
<option <?php if($pays == "Belgique") { echo 'selected'; } ?>>Belgique</option>
<option <?php if($pays == "Canada") { echo 'selected'; } ?>>Canada</option>
<option <?php if($pays == "Espagne") { echo 'selected'; } ?>>Espagne</option>
<option <?php if($pays == "Italie") { echo 'selected'; } ?>>Italie</option>
<option <?php if($pays == "Monaco") { echo 'selected'; } ?>>Monaco</option>
<option <?php if($pays == "Maroc") { echo 'selected'; } ?>>Maroc</option>
<option <?php if($pays == "Portugal") { echo 'selected'; } ?>>Portugal</option>
<option <?php if($pays == "Suisse") { echo 'selected'; } ?>>Suisse</option>
<option <?php if($pays == "Autre") { echo 'selected'; } ?>>Autre</option>
</select>
php ?>
Après la modification du profil, le pays sélectionné par le membre est bien conserver mais que pensez-vous du code ? la sécurité est t-elle correcte ? Je sais que j'insiste mais j' essais de comprendre :-)
Merci.
alors je pige pas le foreach sur le $_POST et pas besoin de mettre toutes ces lignes d'options c'est le foreach qui le fait ;)
tu doit vérifier la valeur de $_POST['pays'] avec une liste pré définie, que tu avais avant, pourquoi l'avoir mis plus bas ?
le code devrait plutot être ainsi
<?php
$pays = array('France','Belgique','Canada','Espagne','Italie','Monaco','Maroc','Portugal','Suisse','Autre');
$erreur = '';
echo'<select name="pays" id="pays">';
if( (is_array($_POST['pays') === true) && (in_array($_POST['pays'],$pays) === true)) {
$erreur .=" le pays n'est pas correct<br />";
}
else {
foreach ($pays as $p) {
echo '<option value="'.$p.'"';
if ($_POST['pays'] == $p) {
echo ' selected="selected"';
}
echo '>'.$p.'</option>'."\r\n";
}
}
// fin du code php, ici j'affiche les options
?>
</select>
@+
Il en faut peu pour être heureux !!!!!
le 02/03/2011 à 12:53
elisa
Bonjour :)
En fait, je veux absolument conserver le choix du membre dans la liste déroulante. Le code ci dessus ne conserve pas les infos :(
Merci et bonne journée.