null ou " " ?

4 réponses
Avatar
alainL
Bonsoir,
Mon formulaire contient une liste (dont je suppose que la première
option est sélectionnée par défaut)

Le traitement récupère cette option $origine et l'intègre dans $message
qui m'est envoyé par mail...
$message="Origine : ,$origine,..."
En général, ça marche :-)
Mais il m'arrive de recevoir un mail dans lequel le champ prévu pour
$option est vide : "Origine : "

Comment se fait-ce ?? mais surtout comment tester cette "chaîne" ?
est-elle null, =="",==" " ???
Merci
alain

4 réponses

Avatar
Olivier Miakinen
Bonjour,

Le 26/06/2010 10:18, alainL a écrit :

Mon formulaire contient une liste (dont je suppose que la première
option est sélectionnée par défaut)



Ne rien supposer à priori de ce qui te vient de l'extérieur (même si
c'est censé ne provenir que d'une page web à toi).

Le traitement récupère cette option $origine et l'intègre dans $message
qui m'est envoyé par mail...
$message="Origine : ,$origine,..."
En général, ça marche :-)



Sauf quand ce sont des spammeurs qui t'écrivent.

Mais il m'arrive de recevoir un mail dans lequel le champ prévu pour
$option est vide : "Origine : "

Comment se fait-ce ??



Très certainement, c'est un pirate qui essaye d'utiliser ton script pour
spammer.

mais surtout comment tester cette "chaîne" ?
est-elle null, =="",==" " ???



C'est forcément une chaîne de caractères, comme tout ce qui transite
dans une requête HTTP. À toi de vérifier que cette chaîne est correcte
avant de faire tout autre traitement. Et bien sûr tu ne dois pas tester
les valeurs hypothétiques que peuvent t'envoyer tous les spammeurs de la
terre, mais seulement les valeurs exactes que tu as toi-même prévues.

--
Olivier Miakinen
Avatar
alainL
Le 26/06/2010 14:47, Olivier Miakinen a écrit :
.....
mais surtout comment tester cette "chaîne" ?
est-elle null, =="",==" " ???



C'est forcément une chaîne de caractères, comme tout ce qui transite
dans une requête HTTP. À toi de vérifier que cette chaîne est correcte
avant de faire tout autre traitement. Et bien sûr tu ne dois pas tester
les valeurs hypothétiques que peuvent t'envoyer tous les spammeurs de la
terre, mais seulement les valeurs exactes que tu as toi-même prévues.




Merci.
Voilà ce que j'ai essayé:

if ((stristr($souhait,"http://"))||(stristr($souhait,"[link]"))) {
$to="adresse bidon";
}
else if ($origine!=="option1" && $origine!=="option2" &&
$origine!=="option3" && $origine!=="option4"){
$to="adresse bidon";
}
else $to="bonne adresse";

Ca semble marcher mais je voulais utiliser !=== qui est refusé.
D'autre part, mon code qui reprend une par une les 4 options doit
pouvoir se simplifier ? (pour le cas où il y aurait plus d'options !)
Avatar
Olivier Miakinen
Le 26/06/2010 23:13, alainL a écrit :

[...]
else if ($origine!=="option1" && $origine!=="option2" &&
$origine!=="option3" && $origine!=="option4"){
[...]

Ca semble marcher mais je voulais utiliser !=== qui est refusé.



Hahaha ! Tu as essayé !==== ou !===== ? :-D

La doc, la doc, la doc, toujours la doc...
<http://fr.php.net/manual/fr/language.operators.comparison.php>

D'autre part, mon code qui reprend une par une les 4 options doit
pouvoir se simplifier ? (pour le cas où il y aurait plus d'options !)



Comment dirai-je... euh... la doc ?
<http://fr.php.net/manual/fr/control-structures.switch.php>

switch ($origine) {
case "option1":
case "option2":
case "option3":
case "option4":
$to="bonne adresse";
break;
default:
$to="adresse bidon"; /* mieux : exit() ou die() */
break;
}

--
Olivier Miakinen
Avatar
Pascal
Olivier Miakinen a écrit :
switch ($origine) {
case "option1":
case "option2":
case "option3":
case "option4":
$to="bonne adresse";
break;
default:
$to="adresse bidon"; /* mieux : exit() ou die() */
break;
}



J'ajouterais une alternative à cette réponse, l'utilisation d'un tableau
d'options et le test de la valeur retournée du formulaire par rapport à
celles déclarées possibles.
D'autant que ce tableau a des chances de pré-exister pour automatiser la
construction des options dans la liste du formulaire.

<?php
$options = array('opt1', 'opt2', ...); // ou résultat requête BDD
$is_option = in_array($origine, $options); // test d'existence
if ($is_option) { // traitements selon résultat du test
// confirmation + envoi mail
} else {
// alerte + sortie
}
?>

Cordialement,
Pascal