TRUC

cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009 - 21 févr. 2007 à 01:59
hood42 Messages postés 2 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 22 février 2007 - 22 févr. 2007 à 17:03
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/41560-truc

hood42 Messages postés 2 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 22 février 2007
22 févr. 2007 à 17:03
Faut que je me calme moi...
Désolé mais ça m'a un peu énervé de voir ça.
Bon sinon je me suis aperçu que je n'avais pas posté le bon formulaire (j'ai 2 versions), je met l'autre.
Utilisateur anonyme
21 févr. 2007 à 22:41
No stress HOOD42 !
La prochaine fois post sur le forum avant histoire d'améliorer tout ca et de post une source comme on les aime ^^
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
21 févr. 2007 à 18:57
Salut,

> Kankrelune
:$ un trou de mémoire mais merci pour le lien ;-)
J' ai lu la doc et je suis tombé sur un passage :

Pour explicitement convertir une valeur en booléen, utilisez les opérateurs de transtypage (bool) ou (boolean). Cependant, dans la plupart des cas, vous n'avez pas besoin d'utiliser ces opérateurs de transtypage, car une valeur sera automatiquement convertie si un opérateur, une fonction ou une structure de contrôle requièrent un argument de type booléen.

Donc dans le cas de cette source on peut usé de cette technique.

> Hood42
Calme toi !
On ne t 'insulte pas on te dit juste que ta source est trop "pauvre" et que tu as quelques progrès à faire.

Je t' ai envoyé ton formulaire remanié de la bonne façon pour te montrer comme écrire, pas pour t' insulter.

@+
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
21 févr. 2007 à 18:56
Hood42 merci de te calmer !

- 1 - ce n'est pas en polluant les sources de cs que l'on progresse... à la limite si tu voulais des avis pour progresser tu pouvais poster sur le forum en demandant les avis et critiques

- 2 - si tu relis les commentaires précédents tu verra qu'il y a de quoi progresser... critiques sur ton code... code exemple d'ImmortalPC et les amélioration que l'on peut y faire

- 3 - personne ne t'a engueulé... si recevoir des critique c'est se faire engueuler je vois mal comment tu compte progresser... tu t'attendait peut être à des applaudissements... franchement... ton code est pas mal pour un débutant cependant les remarques faites précédemment restent d'actualité...

A bon entendeur... .. !

@ tchaOo°
hood42 Messages postés 2 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 22 février 2007
21 févr. 2007 à 18:24
Allez vous faire f..... si j'ai mis ce formulaire c'est pour progresser alors c'est pas la peine de m'engueuler !
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
21 févr. 2007 à 16:53
Rooooooooooo... ImmortalPC voyons... .. .

http://fr3.php.net/manual/fr/language.types.php

^_


@ tchaOo°
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
21 févr. 2007 à 16:46
Re,

chaines, booléen c' est quoi la différance ?

@+
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
21 févr. 2007 à 16:42
On peut aussi faire :
if($_POST['email'] && $_POST['sujet'] && $_POST['message'])

Ca marche effectivement mais au niveau syntaxe ce n'est pas bon ces données étant des chaines et non pas des booléen... qui plus est si mon message est "0" ça ne passera pas... bon c'est con de poster juste un zéro mais sait on jamais... .. . ;o)

@ tchaOo°
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
21 févr. 2007 à 16:24
<form action="?"
le enctype est inutile mais tout comme pour le action c'est du détail... .. . ^_^

>> Pour "action" et "enctype", je trouve ma façon de faire plus précise.


-------------------
if(trim($_POST['email']) !== '' && trim($_POST['sujet']) !== '' && trim($_POST['message'] !== ''))
ou à la limite
if(!empty($_POST['email']) && !empty($_POST['sujet']) && !empty($_POST['message'])

>> Très juste l' ami ;-)
On peut aussi faire :
if($_POST['email'] && $_POST['sujet'] && $_POST['message'])


--------------------
if(preg_match(
plus souple et surtout plus rapide

>> Oups, désolé je savais pas. Merci pour l' info :D


--------------------------
alors là il y a peut être un hic... c'est à vérifier avec le preg_match mais on peut peut être faire une injection de header... si c'est le cas...
if(strpos($_POST['email'],"\n") !== false || strpos($_POST['email'],"\r") !== false)
// erreur
else
// ok
et si c'est pas le cas j'ais rien dis... aïe... non... aïe... pô taper... .. . ;o)
sinon
if(@mail($webmaster, $_POST['sujet'], $_POST['message'], 'From: '.$_POST['email']))
le @ evitera à php de lacher un warning si error_reporting n'est pas à 0 et s'il y a un problème lors de l'envoi... j'aurais tendance aussi à faire un htmlentities() sur le sujet et le message... .. .

>> - Pour l' injection dans le head c' est impossible (j' ai déjà essayé ^^) car il y a le (anciennement eregi) preg_match qui vérifit la chaine $_POST['email'] du début à la fin ;-)

- Pour le @ j' ai hésité à le mettre car c' est un code de débutant et les débutants en général ne config pas le php.ini

- Ensuite on doit bien faire un htmlentities sur le sujet, (oublis de ma part :S)
mais pas sur le message car le mail est par défaut est en mode txt.


----------------------------
" />
et
" />
Ca peut paraitre con mais si je poste un message contenant "pwet > plop" comme sujet ça risque de défigurer la page... .. .

>> Absolument on peut même faire bien plus :
" /><script>alert('une faille');</script><input type="text" value="

Il ne faut pas oublié de décodé les données en traitement
car s' il y a une erreur et que par exemple le sujet soit : il y a une érreur dans votre site
en encodé ça donne :
il y a une érreur dans votre site
puis
il y a une &eacute;rreur dans votre site
ect...

@+
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
21 févr. 2007 à 15:36
Tout comme les post précédents... je rajouterais juste quelques corrections au code d'ImmortalPc...

<form action="<?php echo $_SERVER['REQUEST_URI']; ?>"

=>

<form action="?"

le enctype est inutile mais tout comme pour le action c'est du détail... .. . ^_^

-------------------

if($_POST['email'] !== '' && $_POST['sujet'] !== '' && $_POST['message'] !== '')

=>

if(trim($_POST['email']) !== '' && trim($_POST['sujet']) !== '' && trim($_POST['message'] !== ''))

ou à la limite

if(!empty($_POST['email']) && !empty($_POST['sujet']) && !empty($_POST['message'])

--------------------

if(eregi(

=>

if(preg_match(

plus souple et surtout plus rapide

--------------------------

if(mail($webmaster, $_POST['sujet'], $_POST['message'], 'From: '.$_POST['email']))

=>

alors là il y a peut être un hic... c'est à vérifier avec le preg_match mais on peut peut être faire une injection de header... si c'est le cas...

if(strpos($_POST['email'],"\n") !== false || strpos($_POST['email'],"\r") !== false)
// erreur
else
// ok

et si c'est pas le cas j'ais rien dis... aïe... non... aïe... pô taper... .. . ;o)

sinon


if(@mail($webmaster, $_POST['sujet'], $_POST['message'], 'From: '.$_POST['email']))

le @ evitera à php de lacher un warning si error_reporting n'est pas à 0 et s'il y a un problème lors de l'envoi... j'aurais tendance aussi à faire un htmlentities() sur le sujet et le message... .. .

----------------------------

" />

et

" />

=>

" />

et

" />

Ca peut paraitre con mais si je poste un message contenant "pwet > plop" comme sujet ça risque de défigurer la page... .. .

@ tchaOo°
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
21 févr. 2007 à 13:35
Salut,

voilà un bon formulaire :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" dir="ltr"><head>
<meta http-equiv="Content-type" content="text/html; charset=iso-8859-1" />
<title>Formulaire de contact</title>
<style type="text/css" media="screen">
<!--
p {
margin: 0px;
padding: 0px;
}

.error {
width: 80%;
margin : auto;
background-color: #FFB3B3;
border: 1px solid #BF0000;
text-align: center;
color: #FF0000;
}

.valid {
width: 80%;
margin : auto;
background-color: #CCFFCC;
border: 1px solid #006231;
text-align: center;
color: #008000;
}
//-->
</style>
</head>


<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post" enctype="application/x-www-form-urlencoded" style="width:40%; border:1px solid #000000; margin:auto; padding:5px;">
<?php
$webmaster = 'www.immortalpc@free.fr';


// On vérifit si l' on a reçut des données
if(IsSet($_POST['email'],$_POST['sujet'],$_POST['message'])){
$_POST['message'] = html_entity_decode($_POST['message']);

// On vérifit que les données ne sont pas vide
if($_POST['email'] !== '' && $_POST['sujet'] !== '' && $_POST['message'] !== ''){
// On vérifit si l' adresse e-mail est valide
if(eregi('^[[:alpha:]]{1}[[:alnum:]]*((\.|_|-)[[:alnum:]]+)*@[[:alpha:]]{1}[[:alnum:]]*((\.|-)[[:alnum:]]+)*(\.[[:alpha:]]{2,})$', $_POST['email'])){

// On envoie le mail puis on vérifit s' il a été envoyé
if(mail($webmaster, $_POST['sujet'], $_POST['message'], 'From: '.$_POST['email'])){
echo 'Votre message a bien été envoyé.
Nous vous répondrons dans les plus pref délai.

',"\r\n";
}else{
echo 'L' e-mail n' a pas pu être envoyé.
Veuillez réessayer plus tard.
Merci.

',"\r\n";
}

}else{
echo 'Veuillez entrer une adresse e-mail valide.
Merci.

',"\r\n";
}
}else{
echo 'Veuillez remplir tout les champs.
Merci.

',"\r\n";
}
}else{
$_POST['email'] = '';
$_POST['sujet'] = '';
$_POST['message'] = '';
}
?>

<label for="email">Votre adresse email :</label>

" />



<label for="sujet">Sujet :</label>

" />



<label for="message">Message :</label>

<textarea name="message" id="message" cols="30" rows="5"><?php echo htmlentities($_POST['message']); ?></textarea>







</form>

</html>
Optitech Messages postés 134 Date d'inscription samedi 19 octobre 2002 Statut Membre Dernière intervention 3 janvier 2009
21 févr. 2007 à 11:28
Moi je rajoutreais un truc :

<? <= pas bon !

<?php <= Ok :)

C'est tout ;)
cs_putch Messages postés 624 Date d'inscription mardi 6 mai 2003 Statut Membre Dernière intervention 14 décembre 2009 1
21 févr. 2007 à 10:16
salut !

+1 jdalton42

1) pourquoi as-tu poster cette "source" ?
2) pourquoi considère-tu cette "source" comme de niveau "initié"

sinon pour allez plus loin dans la critique
Les +
un ereg pour tester l'email
Les -
if (!$_POST) : pas terrible comme test j'aurai mis if ( isset($_POST['submit']) )
trop de if else à mon gout
tu ne teste pas si la fonction mail() renvoi false

++
jdalton42 Messages postés 200 Date d'inscription samedi 25 décembre 2004 Statut Membre Dernière intervention 19 août 2009
21 févr. 2007 à 10:01
Salut !

alors déjà je suis entièrement d'accord avec les commentaires de jean84 mais surtout, c'est qu'il existe des dixaines de codes identiques sur ce site, sa ne sert absolument a rien d'en reposter un surtout aussi mal fait!

je demande à l'admin de désactiver ce code, y en a marre d'avoir des dixaines de sources identique sur ce site!
cs_jean84 Messages postés 449 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 5 mars 2009
21 févr. 2007 à 01:59
Hello

Desole mais la je vais pas etre tendre car franchement y a des trucs a redire :
- le niveau de la source n'a rien a faire en inite, debutant et encore ...
- vue le nombre d'editeurs gratuits sur le net, il est impensable de trouver encore de nos jours des sources non indentes ! C'est une horreur ton code au niveau de la presentation !
- ta fonction form() est completement inutile, surtout que tu inseres des saut de lignes en plein dans tes guillemets ! PHP considere que des sauts de lignes sont des caracteres donc il va prendre du temps pour les afficher. En gros, il va afficher des caracteres qui ne servent a rien, a modifier donc !
- la fonction mail() renvoi une valeur indiquant si tout s'ets bien passe ou pas. Tu ne verifies pas et lorsque je teste chez moi, sa me marque message envoye alors que mon sevreur de mail m'a renvoye une erreur que php signale egalement (warning)... pense-y

Ne prend pas mal ce que je viens de te dire, c'ets juste pour ton bien ;-)

@++
Rejoignez-nous