PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > fr.comp.lang.php > isset
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
isset

Réponse
 
LinkBack Outils de la discussion
Vieux 06/10/2007, 21h25   #26
Bruno Desthuilliers
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: isset

yoyo@invalid.news.free.fr a écrit :
>> Le 06/10/2007 00:12, yoyo@invalid.fr a écrit :
>>>> 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)
>
> 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.


> 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.
  Réponse avec citation
Vieux 06/10/2007, 21h25   #27
Mickael Wolff
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: isset

yoyo@invalid.news.free.fr a écrit :

> 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

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


Normalement oui.

> 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.

> $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 ?

> 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 ?

> 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']))


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

> $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
  Réponse avec citation
Vieux 06/10/2007, 21h25   #28
Mickael Wolff
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: isset

yoyo@invalid.news.free.fr a écrit :

> 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

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


Normalement oui.

> 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.

> $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 ?

> 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 ?

> 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']))


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

> $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
  Réponse avec citation
Vieux 06/10/2007, 22h20   #29
Olivier Miakinen
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: isset

Le 06/10/2007 14:21, yoyo@invalid.news.free.fr a écrit :

Euh... raté.

Tu peux mettre yoyo@fr.invalid ou yoyo@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>

> Olivier Miakinen wrote:
>
>> [ 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>

> 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.

> 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>
  Réponse avec citation
Vieux 06/10/2007, 22h20   #30
Olivier Miakinen
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: isset

Le 06/10/2007 22:25, Mickael Wolff répondait à yoyo :
>> /*if (!preg_match("!^[a-z0-9.-_]+@[a-z.]+.[a-z]{2,3}$!"
>> $_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+news@miakinen.net ? Elle sera aussi refusée
par le test de yoyo, alors qu'elle est valide (elle).

> J'avais essayé de
> faire une Regex qui match les adresses courantes, mais elle n'est
> malheureusement pas universelle :


Ça sert à quoi que bibi il se décarcasse ? ;-)

http://faqfclphp.free.fr/#rub5.3

> <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 ?
  Réponse avec citation
Vieux 06/10/2007, 22h20   #31
Olivier Miakinen
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: isset

Le 06/10/2007 14:21, yoyo@invalid.news.free.fr a écrit :

Euh... raté.

Tu peux mettre yoyo@fr.invalid ou yoyo@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>

> Olivier Miakinen wrote:
>
>> [ 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>

> 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.

> 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>
  Réponse avec citation
Vieux 06/10/2007, 22h20   #32
Olivier Miakinen
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: isset

Le 06/10/2007 22:25, Mickael Wolff répondait à yoyo :
>> /*if (!preg_match("!^[a-z0-9.-_]+@[a-z.]+.[a-z]{2,3}$!"
>> $_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+news@miakinen.net ? Elle sera aussi refusée
par le test de yoyo, alors qu'elle est valide (elle).

> J'avais essayé de
> faire une Regex qui match les adresses courantes, mais elle n'est
> malheureusement pas universelle :


Ça sert à quoi que bibi il se décarcasse ? ;-)

http://faqfclphp.free.fr/#rub5.3

> <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 ?
  Réponse avec citation
Vieux 06/10/2007, 23h58   #33
Mickael Wolff
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: isset

Olivier Miakinen a écrit :

> Et quid de mon adresse om+news@miakinen.net ? Elle sera aussi refusée
> 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 ?)

> Ça sert à quoi que bibi il se décarcasse ? ;-)
> http://faqfclphp.free.fr/#rub5.3


Effectivement, je note

> 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
  Réponse avec citation
Vieux 06/10/2007, 23h58   #34
Mickael Wolff
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: isset

Olivier Miakinen a écrit :

> Et quid de mon adresse om+news@miakinen.net ? Elle sera aussi refusée
> 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 ?)

> Ça sert à quoi que bibi il se décarcasse ? ;-)
> http://faqfclphp.free.fr/#rub5.3


Effectivement, je note

> 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
  Réponse avec citation
Vieux 07/10/2007, 22h46   #35
yoyo@invalid.fr
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: isset

Mickael Wolff wrote:

> yoyo@invalid.news.free.fr a écrit :
>
>> 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
>
>> je me demandais si le formulaire est posté vide est ce que les variables
>> testé par isset existe quand même,

>
> Normalement oui.
>
>> 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 ?

> 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....

>
>> $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.


>
>> 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 ?
>
>> 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']))

>
> 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é,

> 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
>
>> $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 !
>

  Réponse avec citation
Vieux 07/10/2007, 22h46   #36
yoyo@invalid.fr
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: isset

Mickael Wolff wrote:

> yoyo@invalid.news.free.fr a écrit :
>
>> 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
>
>> je me demandais si le formulaire est posté vide est ce que les variables
>> testé par isset existe quand même,

>
> Normalement oui.
>
>> 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 ?

> 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....

>
>> $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.


>
>> 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 ?
>
>> 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']))

>
> 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é,

> 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
>
>> $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 !
>

  Réponse avec citation
Vieux 08/10/2007, 08h19   #37
Mickael Wolff
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: isset

yoyo@invalid.fr a écrit :

>>> 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.


>> 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.

>> À 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.


>> 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
  Réponse avec citation
Vieux 08/10/2007, 08h19   #38
Mickael Wolff
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: isset

yoyo@invalid.fr a écrit :

>>> 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.


>> 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.

>> À 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.


>> 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
  Réponse avec citation
Vieux 08/10/2007, 15h25   #39
yoyo@invalid.fr
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: isset

Mickael Wolff wrote:

> yoyo@invalid.fr a écrit :
>
>>>> 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.
>
>
>>> 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.


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.


>>> À 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.

>
>>> 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
  Réponse avec citation
Vieux 08/10/2007, 15h25   #40
yoyo@invalid.fr
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: isset

Mickael Wolff wrote:

> yoyo@invalid.fr a écrit :
>
>>>> 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.
>
>
>>> 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.


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.


>>> À 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.

>
>>> 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
  Réponse avec citation
Vieux 08/10/2007, 21h23   #41
Bruno Desthuilliers
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: isset

Bruno Desthuilliers a écrit :
> yoyo@invalid.news.free.fr a écrit :
>
>>> Le 06/10/2007 00:12, yoyo@invalid.fr a écrit :
>>>
>>>>> 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)
>
>>
>> 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...)
  Réponse avec citation
Vieux 08/10/2007, 21h23   #42
Bruno Desthuilliers
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: isset

yoyo@invalid.fr a écrit :
> Mickael Wolff wrote:
>
>
>>yoyo@invalid.fr a écrit :
>>
>>
>>>>>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.
>>
>>
>>
>>>>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.

>
>
> 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.

> 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.

>
>>>> 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.
  Réponse avec citation
Vieux 08/10/2007, 21h23   #43
Bruno Desthuilliers
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: isset

Bruno Desthuilliers a écrit :
> yoyo@invalid.news.free.fr a écrit :
>
>>> Le 06/10/2007 00:12, yoyo@invalid.fr a écrit :
>>>
>>>>> 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)
>
>>
>> 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...)
  Réponse avec citation
Vieux 08/10/2007, 21h23   #44
Bruno Desthuilliers
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: isset

yoyo@invalid.fr a écrit :
> Mickael Wolff wrote:
>
>
>>yoyo@invalid.fr a écrit :
>>
>>
>>>>>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.
>>
>>
>>
>>>>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.

>
>
> 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.

> 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.

>
>>>> 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.
  Réponse avec citation
Vieux 09/10/2007, 22h32   #45
Mickael Wolff
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: isset

yoyo@invalid.fr a écrit :

> 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.

> 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

> 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
fonctionnemen