Discussion:
isset
(trop ancien pour répondre)
y***@invalid.fr
2007-09-19 20:37:06 UTC
Permalink
Bonjour,

lors d'un formulaire via une méthode post on doit vérifier que les
variables du formulaire on bien été posté et stocker le résultat dans une
variable.

je me demandais si c'était obligatoire car si on fait un formulaire avec
beaucoup de post cela devient lourd.
Olivier Miakinen
2007-09-19 21:37:01 UTC
Permalink
Post by y***@invalid.fr
lors d'un formulaire via une méthode post on doit vérifier que les
variables du formulaire on bien été posté et stocker le résultat dans une
variable.
je me demandais si c'était obligatoire car si on fait un formulaire avec
beaucoup de post cela devient lourd.
De vérifier que $_REQUEST['cequetuveux'] existe et est correct, oui
cela me semble indispensable (tu peux faire la même chose avec $_POST
si tu préfères). Mais le mettre dans une autre variable, ce n'est pas
forcément obligatoire, dans le cas où tu ne prévois pas de valeur par
défaut et que la sanction d'un paramètre manquant est toujours la sortie
immédiate du script.

Donc, tu peux très bien avoir :
if (!isset($_REQUEST['foobar'])) die('Paramètre manquant');
if ($_REQUEST['foobar'] < 250) die('Paramètre trop petit');
if ($_REQUEST['foobar'] > 500) die('Paramètre trop grand');
... etc. ...
Puis :
$calcul = 3 * $_REQUEST['foobar'] + 27;
... etc. ...

Mais tu peux avoir besoin de :
$foobar = 300; /* valeur par défaut */
if (isset($_REQUEST['foobar'])) {
if (($_REQUEST['foobar'] >= 250) && ($_REQUEST['foobar'] <= 500)) {
$foobar = $_REQUEST['foobar'];
}
}
... etc. ...
Puis :
$calcul = 3 * $foobar + 27;
... etc. ...
Mickael Wolff
2007-09-20 05:30:08 UTC
Permalink
Post by y***@invalid.fr
je me demandais si c'était obligatoire car si on fait un formulaire avec
beaucoup de post cela devient lourd.
Bien venue dans le monde de la programmation ;) Bien évidemment, tu
peux automatiser les traitements. Personnellement, j'utilise un fichier
XML qui décrit le formulaire, comme ça je fabriques le formulaire à
l'aide de cet XML, et la vérification se fait automatiquement à partir
de cette description.

Mais peut-être que d'autres ont des méthodes moins lourdes que
d'utiliser un DOMDocument juste pour ça ;)

++
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
y***@invalid.fr
2007-09-20 14:15:36 UTC
Permalink
Post by Mickael Wolff
Post by y***@invalid.fr
je me demandais si c'était obligatoire car si on fait un formulaire avec
beaucoup de post cela devient lourd.
Bien venue dans le monde de la programmation ;) Bien évidemment, tu
peux automatiser les traitements. Personnellement, j'utilise un fichier
XML qui décrit le formulaire, comme ça je fabriques le formulaire à
l'aide de cet XML, et la vérification se fait automatiquement à partir
de cette description.
Mais peut-être que d'autres ont des méthodes moins lourdes que
d'utiliser un DOMDocument juste pour ça ;)
++
j'en suis pas encore là!!!!

j'utilise isset pour les scripts de sessions, mais dans le cadre d'un
formulaire normal a quoi ça sert réellement de tester si la variable
existe.

finalement le seul controle indispensable d'un formulaire c'est de vérifier
qu'il soit pas envoyé vide et de verifier que les élements saisie soit
cohérant avec ce qui est demandé.
Mickael Wolff
2007-09-20 18:42:23 UTC
Permalink
Post by y***@invalid.fr
finalement le seul controle indispensable d'un formulaire c'est de vérifier
qu'il soit pas envoyé vide et de verifier que les élements saisie soit
cohérant avec ce qui est demandé.
Avant de savoir s'il est vide, il faut savoir s'il existe, et s'il est
nécessaire de traiter l'absence, voir de générer une erreur. Parce que
si tu tente d'accéder à un élément d'un tableau qui n'existe pas, tu
dois avoir un Warning (sur ta machine de développement).

Ça évite aussi d'user d'une expression régulière alors qu'il n'y a pas
besoin ;)
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Olivier Masson
2007-09-26 16:19:10 UTC
Permalink
Post by Mickael Wolff
Avant de savoir s'il est vide, il faut savoir s'il existe, et s'il est
nécessaire de traiter l'absence, voir de générer une erreur. Parce que
si tu tente d'accéder à un élément d'un tableau qui n'existe pas, tu
dois avoir un Warning (sur ta machine de développement).
Est-ce vraiment gênant de supprimer la vérif isset ?
Si lors de la vérif des valeurs on utilise @, quel est le soucis ?
Personnellement (ce qui est donc tout sauf un gage de qualité :)),
j'utilise foreach ou array_map soit sur toutes les valeurs, soit sur un
tableau qui contient toutes les valeurs que je souhaite vérifier.
Mickael Wolff
2007-09-27 05:49:54 UTC
Permalink
Post by Olivier Masson
Est-ce vraiment gênant de supprimer la vérif isset ?
Ça dépend de ta psychorigidité ^^; Mais personnellement, je n'utilises
jamais isset, mais array_key_exists. Ça vient du fait que je ne
comprends pas pourquoi isset($toto['tata']) ne lève pas une exception si
la clé tata n'existe pas.
Je n'aime pas ignorer les erreurs, warnings ou notices. C'est le
meilleurs moyen de tourner en rond pendant des heures autour d'un
problème résolvable en 30 s. Mais chacun ces passions ;)
Post by Olivier Masson
Personnellement (ce qui est donc tout sauf un gage de qualité :)),
j'utilise foreach ou array_map soit sur toutes les valeurs, soit sur un
tableau qui contient toutes les valeurs que je souhaite vérifier.
Comme toujours, ça dépend comment tu gères derrière.
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Dominique Ottello
2007-09-27 10:49:21 UTC
Permalink
Post by Mickael Wolff
Je n'aime pas ignorer les erreurs, warnings ou notices. C'est le
meilleurs moyen de tourner en rond pendant des heures autour d'un
problème résolvable en 30 s. Mais chacun ces passions ;)
Chez certains hébergeurs, à partir d'un certain nombre d'erreurs ou
warning masqués par @, il y a blocage du ou des scripts litigieux.
C'est ce qui se passe chez Free.
--
Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Technologie aéronautique : http://aviatechno.free.fr (http://ottello.net)
Concorde dans la presse de 1965 à 2003 : http://le.pointu.free.fr
Olivier Masson
2007-09-28 09:25:28 UTC
Permalink
Post by Dominique Ottello
Chez certains hébergeurs, à partir d'un certain nombre d'erreurs ou
C'est ce qui se passe chez Free.
C'est-à-dire ? Ce n'est pas le blocage qui m'intéresse (j'utilise peu le
@ et pas free) mais la façon dont c'est détecté : ils parsent les
scripts ou c'est php qui peut renvoyer en silent les erreurs ignorées
par le @ ?
Dominique Ottello
2007-09-28 19:53:54 UTC
Permalink
Post by Olivier Masson
Post by Dominique Ottello
Chez certains hébergeurs, à partir d'un certain nombre d'erreurs ou
C'est ce qui se passe chez Free.
C'est-à-dire ? Ce n'est pas le blocage qui m'intéresse (j'utilise peu le
@ et pas free) mais la façon dont c'est détecté : ils parsent les
scripts ou c'est php qui peut renvoyer en silent les erreurs ignorées
Je ne sais pas comment le filtrage est effectué ; il faudrait demander à
l'administrateur des pages persos.

Trente « warnings » dans le même script donne une erreur fatale et le
blocage du script. Ceci pour éviter des charges trop fortes pour de
l'hébergement mutualisé.
--
Il vaut mieux ignorer où l'on est, et savoir qu'on l'ignore, que de se
croire avec confiance où l'on n'est pas. Jean Dominique Cassini.
Technologie aéronautique - http://ottello.net - Les anciens de Vilgénis
y***@invalid.fr
2007-10-05 22:12:15 UTC
Permalink
Post by Mickael Wolff
Post by y***@invalid.fr
finalement le seul controle indispensable d'un formulaire c'est de
vérifier qu'il soit pas envoyé vide et de verifier que les élements
saisie soit cohérant avec ce qui est demandé.
Avant de savoir s'il est vide, il faut savoir s'il existe, et s'il est
justement est ce que si une variable esst vide est ce qu'elle existe dans la
cas ou l'internaute validerait un post vide.
Post by Mickael Wolff
nécessaire de traiter l'absence, voir de générer une erreur. Parce que
si tu tente d'accéder à un élément d'un tableau qui n'existe pas, tu
dois avoir un Warning (sur ta machine de développement).
Ça évite aussi d'user d'une expression régulière alors qu'il n'y a pas
besoin ;)
Olivier Miakinen
2007-10-05 22:23:25 UTC
Permalink
Post by y***@invalid.fr
Post by Mickael Wolff
Post by y***@invalid.fr
finalement le seul controle indispensable d'un formulaire c'est de
vérifier qu'il soit pas envoyé vide et de verifier que les élements
saisie soit cohérant avec ce qui est demandé.
Avant de savoir s'il est vide, il faut savoir s'il existe, et s'il est
justement est ce que si une variable esst vide est ce qu'elle existe dans la
cas ou l'internaute validerait un post vide.
Je viens de me torturer l'esprit pendant 5 bonnes minutes en essayant de
comprendre ta phrase, mais je n'y arrive pas. Dans le doute, je vais
répondre quelque chose en espérant que ce sera la réponse à ta question.

1) La première chose à faire est de vérifier par isset si le tableau
$_REQUEST contient bien une entrée du nom qui t'intéresse.

2) Si le premier résultat est positif, la seconde chose à faire *peut*
être de regarder si la valeur est une chaîne vide, mais ce n'est pas
forcément obligatoire. Vérifier directement que la valeur est bien
de la forme que tu attends peut suffire (par exemple, pour un entier
positif, vérifier qu'elle contient un chiffre ou plus et aucun autre
caractère).


P.-S. : Ton adresse n'est toujours pas conforme aux recommandations pour
les adresses invalides. Ça t'ennuie de mettre le .invalid à la fin ?
y***@invalid.news.free.fr
2007-10-06 12:21:34 UTC
Permalink
Post by Olivier Miakinen
Post by y***@invalid.fr
Post by Mickael Wolff
Post by y***@invalid.fr
finalement le seul controle indispensable d'un formulaire c'est de
vérifier qu'il soit pas envoyé vide et de verifier que les élements
saisie soit cohérant avec ce qui est demandé.
Avant de savoir s'il est vide, il faut savoir s'il existe, et s'il est
justement est ce que si une variable esst vide est ce qu'elle existe dans
la cas ou l'internaute validerait un post vide.
Je viens de me torturer l'esprit pendant 5 bonnes minutes en essayant de
comprendre ta phrase, mais je n'y arrive pas. Dans le doute, je vais
répondre quelque chose en espérant que ce sera la réponse à ta question.
1) La première chose à faire est de vérifier par isset si le tableau
$_REQUEST contient bien une entrée du nom qui t'intéresse.
2) Si le premier résultat est positif, la seconde chose à faire *peut*
être de regarder si la valeur est une chaîne vide, mais ce n'est pas
forcément obligatoire. Vérifier directement que la valeur est bien
de la forme que tu attends peut suffire (par exemple, pour un entier
positif, vérifier qu'elle contient un chiffre ou plus et aucun autre
caractère).
P.-S. : Ton adresse n'est toujours pas conforme aux recommandations pour
les adresses invalides. Ça t'ennuie de mettre le .invalid à la fin ?
désolé je me suis peux être mal exprimé.

j'ai eu le cas sur un script ou j'ai essayé de faire une isset suivi d'un
empty imbriqué dans le premier if.

je me demandais si le formulaire est posté vide est ce que les variables
testé par isset existe quand même,

ci joint un exemple de code.

if(isset($_POST['sexe']) && (isset($_POST['nom'])) &&
(isset($_POST['prenom'])) && (isset($_POST['code_postal']))
&&(isset($_POST['adresse'])) && (isset ($_POST['ville'])) &&(
isset($_POST['telephone'])) &&(isset($_POST['courriel'])) &&
(isset($_POST['message']))){
$sexe=$_POST['sexe'];
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$cp=$_POST['code_postal'];
$adresse=$_POST['adresse'];
$ville=$_POST['ville'];
$telephone=$_POST['telephone'];
$mail=$_POST['courriel'];
$demande=$_POST['message'];



$erreur = 0;
$message_erreur="Veuillez compléter";

if (empty($_POST['nom']))
{
echo "<br/><p style= \"color:red;\"> $message_erreur votre nom <br>";
$erreur = 1;
}

if (empty($_POST['prenom']))
{
echo "<br/><p style= \"color:red;\"> $message_erreur votre prénom
<br> ";
$erreur = 1;
}

if (empty($_POST['adresse']))
{
echo "<br/><p style= \"color:red;\"> $message_erreur votre adresse
<br>";
$erreur = 1;
}

if (empty($_POST['code_postal']))
{
echo "<br/><p style= \"color:red;\"> $message_erreur votre code postal
<br>" ;
$erreur = 1;
}else
if(!preg_match("!^[0-9]{5}$!",$_POST['code_postal']))
{
echo "<br/>veuillez saisir un Code Postal correct <br>";
$erreur = 1;
}

if (empty($_POST['ville']))
{
echo "<br/><p style= \"color:red;\"> $message_erreur votre ville <br>";
$erreur = 1;
}


if (empty($_POST['telephone']))
{
echo "<br/><p style= \"color:red;\"> $message_erreur votre téléphone
<br>";
$erreur = 1;
}
else
if (!preg_match("!^0[1-48][0-9]{8}$!", $_POST['telephone']))
{
echo "<br/>veuillez saisir un numéro téléphone correct <br>";
$erreur = 1;
}

if(empty($_POST['courriel']))
{

echo "<br/><p style= \"color:red;\"> $message_erreur votre mail <br>";
$erreur = 1;
}else
/*if (!preg_match("!^[a-z0-9.-_]+@[a-z.]+.[a-z]{2,3}$!"
$_POST['mail']))
{
echo "<br/>veuillez saisir une adresse email correct <br>";
$erreur = 1;
}*/



if ($erreur == 0){

erreur == 0){



$sql=pg_query($conn, "INSERT INTO contact(sexe, nom, prenom, adresse,
code_postal, ville, telephone, courriel, message)

VALUES('$sexe', '$nom', '$prenom', '$adresse', '$cp','$ville', '$telephone', '$mail','$demande')");


//echo "\n \n".$sexe.' ' .$nom.' ' .$prenom . ' '. "Votre demande a
bien été enregistrer nous la traiterons avec le plus grand soin";


}
}
Mickael Wolff
2007-10-06 20:25:30 UTC
Permalink
Post by y***@invalid.news.free.fr
j'ai eu le cas sur un script ou j'ai essayé de faire une isset suivi d'un
empty imbriqué dans le premier if.
Ça n'a aucun intérêt. Parce qu'en PHP, une chaîne vide
Post by y***@invalid.news.free.fr
je me demandais si le formulaire est posté vide est ce que les variables
testé par isset existe quand même,
Normalement oui.
Post by y***@invalid.news.free.fr
ci joint un exemple de code.
if(isset($_POST['sexe']) && (isset($_POST['nom'])) &&
(isset($_POST['prenom'])) && (isset($_POST['code_postal']))
&&(isset($_POST['adresse'])) && (isset ($_POST['ville'])) &&(
isset($_POST['telephone'])) &&(isset($_POST['courriel'])) &&
(isset($_POST['message']))){
C'est pas très lisible tout ça, avec des parenthèses en trop, on se
croirait en LISP ;) Tu devrais faire une fonction qui teste la présence
de toutes ces clés dans le tableau $_POST. Et ne pas mettre des
parenthèses inutiles.
Post by y***@invalid.news.free.fr
$sexe=$_POST['sexe'];
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$cp=$_POST['code_postal'];
$adresse=$_POST['adresse'];
$ville=$_POST['ville'];
$telephone=$_POST['telephone'];
$mail=$_POST['courriel'];
$demande=$_POST['message'];
À quoi ça sert de supprimer une fonctionnalité si les utilisateurs
s'empressent de jeter les variables HTTP dans le scope global comme tu
le fais ?
Post by y***@invalid.news.free.fr
if (!preg_match("!^0[1-48][0-9]{8}$!", $_POST['telephone']))
{
echo "<br/>veuillez saisir un numéro téléphone correct <br>";
$erreur = 1;
}
Un numéro de téléphone est une suite indéterminée de chiffres ;) À
moins qu'il n'y ait une norme internationale ?
Post by y***@invalid.news.free.fr
if(empty($_POST['courriel']))
{
echo "<br/><p style= \"color:red;\"> $message_erreur votre mail <br>";
$erreur = 1;
}else
$_POST['mail']))
Les adresses en .info n'ont pas le droit de citer chez toi ? Et quid
de ceux qui ont un courriel du type toto.nom.fr ? J'avais essayé de
faire une Regex qui match les adresses courantes, mais elle n'est
malheureusement pas universelle :
<http://lupusmic.org/pro/docs/regex.php>. Son amélioration est dans ma
TODO List ;)
Post by y***@invalid.news.free.fr
$sql=pg_query($conn, "INSERT INTO contact(sexe, nom, prenom, adresse,
code_postal, ville, telephone, courriel, message)
VALUES('$sexe', '$nom', '$prenom', '$adresse', '$cp','$ville', '$telephone', '$mail','$demande')");
XSS détectée !
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Olivier Miakinen
2007-10-06 21:20:11 UTC
Permalink
Post by Mickael Wolff
Post by y***@invalid.news.free.fr
$_POST['mail']))
Les adresses en .info n'ont pas le droit de citer chez toi ? Et quid
de ceux qui ont un courriel du type toto.nom.fr ?
Et quid de mon adresse om+***@miakinen.net ? Elle sera aussi refusée
par le test de yoyo, alors qu'elle est valide (elle).
Post by Mickael Wolff
J'avais essayé de
faire une Regex qui match les adresses courantes, mais elle n'est
Ça sert à quoi que bibi il se décarcasse ? ;-)

http://faqfclphp.free.fr/#rub5.3
Post by Mickael Wolff
<http://lupusmic.org/pro/docs/regex.php>.
Aaargh ! Tu arrives à lire du texte en violet foncé (ou peut-être en
bleu) sur une image en nuances de violet clair ?
Mickael Wolff
2007-10-06 22:58:58 UTC
Permalink
Post by Olivier Miakinen
par le test de yoyo, alors qu'elle est valide (elle).
J'avais commencé à utiliser des adresses avec le délimiteur '+'. Mais
j'ai arrêté le jour où une personne m'a dis que c'est compliqué (ben
ouais, un point c'est facile, un '+' c'est compliqué, trivial... non ?)
Post by Olivier Miakinen
Ça sert à quoi que bibi il se décarcasse ? ;-)
http://faqfclphp.free.fr/#rub5.3
Effectivement, je note :)
Post by Olivier Miakinen
Aaargh ! Tu arrives à lire du texte en violet foncé (ou peut-être en
bleu) sur une image en nuances de violet clair ?
Bleu marine sur violet voilé. Ben sur mon écran ça passe bien... mais
je conçois que sur d'autres ça peut mal passé. J'ai bien une CSS que je
préfère, mais elle est moins attrayante (les gens aiment les couleurs
flashies et pas le noir, alors que le clair sur le noir, c'est bien plus
visible). Tu peux changer la CSS si tu veux, je les ai mises en
alternatives ;)
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
y***@invalid.fr
2007-10-07 21:46:17 UTC
Permalink
Post by Mickael Wolff
Post by y***@invalid.news.free.fr
j'ai eu le cas sur un script ou j'ai essayé de faire une isset suivi d'un
empty imbriqué dans le premier if.
Ça n'a aucun intérêt. Parce qu'en PHP, une chaîne vide
Post by y***@invalid.news.free.fr
je me demandais si le formulaire est posté vide est ce que les variables
testé par isset existe quand même,
Normalement oui.
Post by y***@invalid.news.free.fr
ci joint un exemple de code.
if(isset($_POST['sexe']) && (isset($_POST['nom'])) &&
(isset($_POST['prenom'])) && (isset($_POST['code_postal']))
&&(isset($_POST['adresse'])) && (isset ($_POST['ville'])) &&(
isset($_POST['telephone'])) &&(isset($_POST['courriel'])) &&
(isset($_POST['message']))){
C'est pas très lisible tout ça, avec des parenthèses en trop, on se
croirait en LISP ;)
ha bon une parenthese en trop laquelle ?
Post by Mickael Wolff
Tu devrais faire une fonction qui teste la présence
de toutes ces clés dans le tableau $_POST. Et ne pas mettre des
parenthèses inutiles.
c'est a dire....
Post by Mickael Wolff
Post by y***@invalid.news.free.fr
$sexe=$_POST['sexe'];
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$cp=$_POST['code_postal'];
$adresse=$_POST['adresse'];
$ville=$_POST['ville'];
$telephone=$_POST['telephone'];
$mail=$_POST['courriel'];
$demande=$_POST['message'];
À quoi ça sert de supprimer une fonctionnalité si les utilisateurs
s'empressent de jeter les variables HTTP dans le scope global comme tu
le fais ?
que veux tu dire parle scope global.
Post by Mickael Wolff
Post by y***@invalid.news.free.fr
if
(!preg_match("!^0[1-48][0-9
{8}$!",
Post by Mickael Wolff
Post by y***@invalid.news.free.fr
$_POST['telephone']))
{
echo "<br/>veuillez
saisir un numéro
téléphone correct <br>";
$erreur = 1;
}
Un numéro de téléphone est une suite indéterminée de chiffres ;) À
moins qu'il n'y ait une norme internationale ?
Post by y***@invalid.news.free.fr
if(empty($_POST['courriel']))
{
echo "<br/><p style=
\"color:red;\"> $message_erreur
votre mail <br>"; $erreur = 1;
}else
/*if
$_POST['mail']))
Les adresses en .info n'ont pas le droit de citer chez toi ? Et quid
de ceux qui ont un courriel du type toto.nom.fr ?
oais en effet je n'y avais pas pensé,
Post by Mickael Wolff
J'avais essayé de
faire une Regex qui match les adresses courantes, mais elle n'est
<http://lupusmic.org/pro/docs/regex.php>. Son amélioration est dans ma
TODO List ;)
Post by y***@invalid.news.free.fr
$sql=pg_query($conn, "INSERT INTO
contact(sexe, nom, prenom,
adresse,
code_postal, ville, telephone, courriel, message)
VALUES('$sexe', '$nom', '$prenom', '$adresse', '$cp','$ville',
'$telephone', '$mail','$demande')");
XSS détectée !
Mickael Wolff
2007-10-08 07:19:54 UTC
Permalink
Post by y***@invalid.fr
Post by Mickael Wolff
Post by y***@invalid.news.free.fr
if(isset($_POST['sexe']) && (isset($_POST['nom'])) &&
(isset($_POST['prenom'])) && (isset($_POST['code_postal']))
&&(isset($_POST['adresse'])) && (isset ($_POST['ville'])) &&(
isset($_POST['telephone'])) &&(isset($_POST['courriel'])) &&
(isset($_POST['message']))){
ha bon une parenthese en trop laquelle ?
J'en vois... huit paires, celles qui englobent les isset.
Post by y***@invalid.fr
Post by Mickael Wolff
Tu devrais faire une fonction qui teste la présence
de toutes ces clés dans le tableau $_POST. Et ne pas mettre des
parenthèses inutiles.
c'est a dire....
Si tu ne sais pas ce qu'est une fonction, je t'encourage à l'apprendre :
<http://fr2.php.net/manual/fr/language.functions.php>. Ça te fera gagner
du temps.
Post by y***@invalid.fr
Post by Mickael Wolff
À quoi ça sert de supprimer une fonctionnalité si les utilisateurs
s'empressent de jeter les variables HTTP dans le scope global comme tu
le fais ?
que veux tu dire parle scope global.
En programmation on parle de portée (scope) des variables. C'est
grosso modo l'espace dans lequel elle sera accessible par son nom dans
le programme. La portée globale, c'est par définition l'espace des
variables accessibles par leur nom depuis partout dans le programme.
Post by y***@invalid.fr
Post by Mickael Wolff
XSS détectée !
Je crois que tu n'as pas compris cette dernière remarque. Je t'invites
à t'en inquiéter sérieusement. Ton script peut être la cible d'une
attaque par injection SQL, voir de cross-site scripting (XSS). Mais
c'est moins évident à faire dans ce cas. Il y a plein de site qui
parlent de ça sur l'Intenet.
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
y***@invalid.fr
2007-10-08 14:25:48 UTC
Permalink
Post by Mickael Wolff
Post by y***@invalid.fr
Post by Mickael Wolff
Post by y***@invalid.news.free.fr
if(isset($_POST['sexe']) && (isset($_POST['nom'])) &&
(isset($_POST['prenom'])) && (isset($_POST['code_postal']))
&&(isset($_POST['adresse'])) && (isset ($_POST['ville'])) &&(
isset($_POST['telephone'])) &&(isset($_POST['courriel'])) &&
(isset($_POST['message']))){
ha bon une parenthese en trop laquelle ?
J'en vois... huit paires, celles qui englobent les isset.
Post by y***@invalid.fr
Post by Mickael Wolff
Tu devrais faire une fonction qui teste la présence
de toutes ces clés dans le tableau $_POST. Et ne pas mettre des
parenthèses inutiles.
c'est a dire....
<http://fr2.php.net/manual/fr/language.functions.php>. Ça te fera gagner
du temps.
je sais ce que c'est une fonction, mais c'est vrai que je ne les aient pas
utilisé, je pensais finir le site le mettre en ligne et après amélioré mon
code via les fonctions.
Post by Mickael Wolff
Post by y***@invalid.fr
Post by Mickael Wolff
À quoi ça sert de supprimer une fonctionnalité si les utilisateurs
s'empressent de jeter les variables HTTP dans le scope global comme tu
le fais ?
que veux tu dire parle scope global.
En programmation on parle de portée (scope) des variables. C'est
grosso modo l'espace dans lequel elle sera accessible par son nom dans
le programme. La portée globale, c'est par définition l'espace des
variables accessibles par leur nom depuis partout dans le programme.
en effet sous le nom global je connaissais, effectivement en passant en par
les fonction je n'utiliserait que des variable locale.

est-ce que c'est judicieux de stocker tout ces fonction ou code php dans un
fichier comme le css.
Post by Mickael Wolff
Post by y***@invalid.fr
Post by Mickael Wolff
XSS détectée !
Je crois que tu n'as pas compris cette dernière remarque. Je t'invites
à t'en inquiéter sérieusement. Ton script peut être la cible d'une
attaque par injection SQL, voir de cross-site scripting (XSS). Mais
c'est moins évident à faire dans ce cas. Il y a plein de site qui
parlent de ça sur l'Intenet.
xss non j'ai pas compris, et jamais entendu parler
Bruno Desthuilliers
2007-10-08 20:23:02 UTC
Permalink
Post by y***@invalid.fr
Post by Mickael Wolff
Post by y***@invalid.fr
Post by Mickael Wolff
Post by y***@invalid.news.free.fr
if(isset($_POST['sexe']) && (isset($_POST['nom'])) &&
(isset($_POST['prenom'])) && (isset($_POST['code_postal']))
&&(isset($_POST['adresse'])) && (isset ($_POST['ville'])) &&(
isset($_POST['telephone'])) &&(isset($_POST['courriel'])) &&
(isset($_POST['message']))){
ha bon une parenthese en trop laquelle ?
J'en vois... huit paires, celles qui englobent les isset.
Post by y***@invalid.fr
Post by Mickael Wolff
Tu devrais faire une fonction qui teste la présence
de toutes ces clés dans le tableau $_POST. Et ne pas mettre des
parenthèses inutiles.
c'est a dire....
<http://fr2.php.net/manual/fr/language.functions.php>. Ça te fera gagner
du temps.
je sais ce que c'est une fonction, mais c'est vrai que je ne les aient pas
utilisé, je pensais finir le site le mettre en ligne et après amélioré mon
code via les fonctions.
Heu... Je sais bien que PHP est avant tout un (vrai) langage de script,
donc pas un exemple en matière de bonnes pratiques, mais bon, comment
dire... Les fonction, ce n'est pas de "l'amélioration", c'est le B.A.BA.
Post by y***@invalid.fr
est-ce que c'est judicieux de stocker tout ces fonction ou code php dans un
fichier comme le css.
Of course. En fait, les quelques scripts directement appelé dans une
appli php ne devraient pas faire grand chose de plus que d'appeler ces
fonctions.
Post by y***@invalid.fr
Post by Mickael Wolff
Post by y***@invalid.fr
Post by Mickael Wolff
XSS détectée !
Je crois que tu n'as pas compris cette dernière remarque. Je t'invites
à t'en inquiéter sérieusement. Ton script peut être la cible d'une
attaque par injection SQL, voir de cross-site scripting (XSS). Mais
c'est moins évident à faire dans ce cas. Il y a plein de site qui
parlent de ça sur l'Intenet.
xss non j'ai pas compris, et jamais entendu parler
Cross Site Scripting. Mais bon, dans ton cas (où tu construit ta requête
SQL directement avec les données balancées par l'utilisateur, sans les
valider (ce qui requiert plus que de vérifier qu'il y a quelque chose de
posté...), tu risque surtout une injection SQL.
Mickael Wolff
2007-10-09 21:32:03 UTC
Permalink
Post by y***@invalid.fr
je sais ce que c'est une fonction, mais c'est vrai que je ne les aient pas
utilisé, je pensais finir le site le mettre en ligne et après amélioré mon
code via les fonctions.
Fais relire ton source par un gars qui a de la bouteille avant de publier.
Post by y***@invalid.fr
est-ce que c'est judicieux de stocker tout ces fonction ou code php dans un
fichier comme le css.
Personnellement, je considère que le PHP doit polluer le moins
possible le HTML, pour éviter les interminables recherches du bogue qui
va mal ;)
Post by y***@invalid.fr
xss non j'ai pas compris, et jamais entendu parler
C'est un ensemble de techniques permettant d'exploiter des manques de
contrôles des données soumises. Vu que dans ton script tu ne contrôle
rien, que tu ne protèges rien, on peut aisément détourner le
fonctionnement du script. C'est une technique utilisée couramment pour
envoyer massivement du Spam, ou utiliser le serveur comme zombie.
--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Bruno Desthuilliers
2007-10-06 20:25:30 UTC
Permalink
Post by y***@invalid.news.free.fr
Post by y***@invalid.fr
Post by Mickael Wolff
Avant de savoir s'il est vide, il faut savoir s'il existe, et s'il est
justement est ce que si une variable esst vide est ce qu'elle existe dans
la cas ou l'internaute validerait un post vide.
(snip)
Post by y***@invalid.news.free.fr
désolé je me suis peux être mal exprimé.
j'ai eu le cas sur un script ou j'ai essayé de faire une isset suivi d'un
empty imbriqué dans le premier if.
je me demandais si le formulaire est posté vide est ce que les variables
testé par isset existe quand même,
C'est dans la spec HTTP, tout ça. Et la réponse est non. S'il n'y a
aucune valeur positionnée pour un champ de formulaire, ce champ
n'apparaitra pas dans la requête.
Post by y***@invalid.news.free.fr
ci joint un exemple de code.
if(isset($_POST['sexe']) && (isset($_POST['nom'])) &&
(isset($_POST['prenom'])) && (isset($_POST['code_postal']))
&&(isset($_POST['adresse'])) && (isset ($_POST['ville'])) &&(
isset($_POST['telephone'])) &&(isset($_POST['courriel'])) &&
(isset($_POST['message']))){
$sexe=$_POST['sexe'];
$nom=$_POST['nom'];
$prenom=$_POST['prenom'];
$cp=$_POST['code_postal'];
$adresse=$_POST['adresse'];
$ville=$_POST['ville'];
$telephone=$_POST['telephone'];
$mail=$_POST['courriel'];
$demande=$_POST['message'];
$erreur = 0;
$message_erreur="Veuillez compléter";
if (empty($_POST['nom']))
{
echo "<br/><p style= \"color:red;\"> $message_erreur votre nom <br>";
$erreur = 1;
}
if (empty($_POST['prenom']))
{
echo "<br/><p style= \"color:red;\"> $message_erreur votre prénom
<br> ";
$erreur = 1;
}
(snip)

Doux Jésus...

Tu connais les notions de boucles, de tableau associatifs et de fonction
de rappel ? Parce que franchement, ça te simplifierait la vie...

principe:
1/ tu stockes dans tableau associatif les paires nom_du_champ =>
[nom_fonction_validation, valeur_defaut]. Les fonctions de validation
prennent en entrée un nom de champ, un tableau ($_POST dans ce cas), et
une valeur de défaut optionnelle (NULL par defaut)) et retournent une
paire [valeur, message_erreur].

2/ au retour du post, tu itères sur ces paires, et pour chacune tu
appelle la fonction de validation avec les données qui vont bien, et tu
stocke les résultat dans deux tableaux associatifs 'valeurs' et
'erreurs', ie:

$valeurs = array();
$erreurs = array();
foreach($champs as $nom=>$definition) {
list($valider, $defaut) = $definition;
list($val, $err) = $valider($nom, $_POST, $defaut);
$valeurs[$nom] = $val;
$erreurs[$nom] = $err;
}

2/bis : évidemment, il y a des cas où tu dois faire des validation plus
complexes. Il suffit alors de les ajouter *après* cette boucle - au
moins, le plus gros est fait.

3/ après ça, il suffit de tester le tableau $erreurs pour savoir si le
formulaire est valide.

Si oui, tu n'a plus qu'à soit insérer/mettre à jour tes données d'après
le tableau $valeurs (la construction de la requête SQL qui va bien étant
assez triviale grâces aux fonctions de traitement des tableaux).

Sinon, tu rappelles le fichier 'template' (ie: mélange de php et html)
qui défini ton formulaire en lui passant les deux tableaux, et tu
affiches le resultat.
Bruno Desthuilliers
2007-10-08 20:23:02 UTC
Permalink
Post by Bruno Desthuilliers
Post by y***@invalid.news.free.fr
Post by y***@invalid.fr
Post by Mickael Wolff
Avant de savoir s'il est vide, il faut savoir s'il existe, et s'il est
justement est ce que si une variable esst vide est ce qu'elle existe dans
la cas ou l'internaute validerait un post vide.
(snip)
Post by y***@invalid.news.free.fr
désolé je me suis peux être mal exprimé.
j'ai eu le cas sur un script ou j'ai essayé de faire une isset suivi d'un
empty imbriqué dans le premier if.
je me demandais si le formulaire est posté vide est ce que les variables
testé par isset existe quand même,
C'est dans la spec HTTP, tout ça. Et la réponse est non. S'il n'y a
aucune valeur positionnée pour un champ de formulaire, ce champ
n'apparaitra pas dans la requête.
Au temps pour moi - au moins pour les inputs de type text et les select
(pour les inputs type radio et - of course - submit, seul ce qui est
utilisé apparaît dans la requête...)
Olivier Miakinen
2007-10-06 21:20:11 UTC
Permalink
Le 06/10/2007 14:21, ***@invalid.news.free.fr a écrit :

Euh... raté.

Tu peux mettre ***@fr.invalid ou ***@news.free.fr.invalid mais
l'essentiel est d'avoir le .invalid à la fin. Comme je le disais,
c'est un nom de domaine réservé spécialement pour ça, ce qui permet
aux logiciels comme aux humains de savoir du premier coup d'œil
qu'il est inutile d'écrire à une telle adresse, ou d'y relayer un message.

Voir <http://groups.google.fr/group/fr.usenet.reponses/msg/2bf2905def1f1bf3>
Post by y***@invalid.news.free.fr
[ citation intégrale ]
Merci aussi de ne pas citer l'intégralité des articles auxquels tu ne
réponds qu'en partie. Si tu l'as fait sur toutes les réponses qui t'ont
été faites, il est probable que certains de tes articles aient été
refusés (sans que tu le saches, because adresse invalide).

Voir <http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html>
Post by y***@invalid.news.free.fr
désolé je me suis peux être mal exprimé.
j'ai eu le cas sur un script ou j'ai essayé de faire une isset suivi d'un
empty imbriqué dans le premier if.
je me demandais si le formulaire est posté vide est ce que les variables
testé par isset existe quand même,
Ça doit dépendre du type de contrôle : pour un champ de type texte, il y
a probablement une chaîne vide, tandis que pour un choix multiple ce ne
sera pas rempli. Mais à la limite ça n'a pas d'importance : ce qui
compte c'est de savoir quelles sont les valeurs que tu peux attendre
quand la réponse est correcte, et comment réagir aux valeurs absentes ou
incorrectes.
Post by y***@invalid.news.free.fr
ci joint un exemple de code.
if(isset($_POST['sexe']) && (isset($_POST['nom'])) [...]
if (empty($_POST['nom']))
{
[...]
Si isset() a répondu VRAI, alors la variable contient forcément une
chaîne de caractères. D'après la doc, ce que tu testes avec empty()
revient à regarder si la chaîne est égale à "" ou à "0", ce qui
correspond assez peu à l'intuition. Je te conseille d'abandonner
empty() et de faire un test correspondant vraiment à ce que tu veux
accepter ou refuser.

Voir <http://fr3.php.net/empty>
Bruno Desthuilliers
2007-09-20 20:27:48 UTC
Permalink
***@invalid.fr a écrit :
(snip)
Post by y***@invalid.fr
j'utilise isset pour les scripts de sessions, mais dans le cadre d'un
formulaire normal a quoi ça sert réellement de tester si la variable
existe.
A vérifier qu'elle a été positionnée, et éventuellement que sa valeur
est correcte. Valider les entrées utilisateurs est une part
non-négligeable et *indispensable* de l'implémentation d'un programme.
Si tu laisses entrer n'importe quoi, tu vas au devant de sérieux ennuis.
Post by y***@invalid.fr
finalement le seul controle indispensable d'un formulaire c'est de vérifier
qu'il soit pas envoyé vide et de verifier que les élements saisie soit
cohérant avec ce qui est demandé.
Et que ce ne soit pas une tentative d'attaque de ton système,
accessoirement... Maintenant, quelque chose m'échappe : comment veux-tu
vérifier que le formulaire n'est pas posté vide et que les éléments
saisis sont cohérents avec ce qui est demandé *sans* vérifier que les
"variables" du formulaires ont bien été renseignées ???
Mihamina (R12y) Rakotomandimby
2007-09-21 06:35:28 UTC
Permalink
Post by Bruno Desthuilliers
Et que ce ne soit pas une tentative d'attaque de ton système,
accessoirement... Maintenant, quelque chose m'échappe : comment veux-tu
vérifier que le formulaire n'est pas posté vide et que les éléments
saisis sont cohérents avec ce qui est demandé *sans* vérifier que les
"variables" du formulaires ont bien été renseignées ???
Quand on a une page "multi formulaire" mal foutue, c'est à dire ou l'on
a plusieurs groupes de champs mais seul un groupe porte des données
utiles, alors il veut pouvoir ne considérer que les champs du groupe en
question.
C'est un exemple d'usage qui m'est venu comme ça, on the fly.
Mais pour ça il faut que le formulaire soit mal foutu.
Continuer la lecture sur narkive:
Loading...