| ||||||||
Petit astucien | Bonjour à tous,
Bojour à tous,
Je désire faire sur mon site une page contact.php
Voici ce que j'ai codé:
Contact.php:
<?php
//----Etape1-----
//Si un message est envoyé, on l'enregistre
//-----------------
if (!empty($_POST['nom']) AND !empty($_POST['prenom']) AND !empty($_POST['message']) AND !empty($_POST['mail'])
AND (trim($nom) != '') AND (trim($prenom) != '') AND (trim($mail) != '') AND (trim($message) != ''))
{
$nom=htmlentities($_POST['nom'], ENT_QUOTES);//On utilise htlmentities par mesure desécurité.UO
$prenom=htmlentities($_POST['prenom'], ENT_QUOTES);
$mail=htmlentities($_POST['mail'], ENT_QUOTES);
$message=htmlentities($_POST['message'], ENT_QUOTES);//De même pour le message
$message=nl2br($message);//Pour le message, comme on utilise un textarea, il faut remplacer les Entrées par des <br/>
//On peut enfin enregistrer
mysql_query("INSERT INTO contact VALUES('', '" . $nom . "', '".$prenom."', '" . $message . "', '". $mail ."')");
include("contact/contactrep.php");
}
Else
{
include("contact/contactnon.php");
}
//----Etape 2-----
//Envoyer vers mail
//-----------------
$to='alonzo80@hotmail.com'
mail($to,$_POST['sujet'], $_POST['message']);
?>
Avec ceci normalement je dois recevoir des mails lorsque quelqu'un a poster un message.
Avec l'adresse alonzo80@hotmail.com sa fonctione trés bien
Avec l'adresse geoffrey.carpentier@wanadoo.fr sa ne fonctionne pas du tous
Avec l'adresse scmoreuil@free.fr sa ne fonctionne pas mais je recois ce mail plus tard dans la journée avec une pièce jointe et dedans ya le mail que je devrai recevoir:
Citation : De:Mail Delivery System Sujet:Undelivered Mail Returned to Sender
This is the Postfix program at host perso0.free.fr.
I'm sorry to have to inform you that your message could not be
be delivered to one or more recipients. It's attached below.
For further assistance, please send mail to <postmaster>
If you do so, please include this problem report. You can
delete your own text from the attached returned message.
The Postfix program
<scmoreuil@free.fr>: delivery temporarily suspended: connect to
mx2.free.fr[212.27.42.43]: Connection refused
Pourquoi sa fonctionne sur certaine adrese et pas sur d'autre??
merci d'avance
Edité le 11/08/2006 | |||||||
Publicité | ||||||||
| ||||||||
Astucien | Salut,
DÚjÓ, meme si ce n'est qu'un dÚtail (mais qui t'Úvitera sans doute pas mal de dÚconvenue), tu as pris la peine de sÚcuriser le rÚsultat de ton formulaire pour l'insÚrer dans une base de donnÚes, c'est dÚjÓ pas mal, mais tu "prend le risque" de t'envoyer le formulaire sans aucune sÚcurisationà
Pourquoi diable, ne pas profiter de ce que tu as quand meme une "certaine" sÚcurisation sous la forme des variables $nom, $prenom, $mail et $message, ne pas utiliser ces variables lÓ lors de l'envoi de l'E-mail [question]
Au passage: la concatÚnation de chaines prend beaucoup plus de ressources que la simple Úvalutation de valeurs au sein d'une chaineà
Et, comble de bonheur, les guillemets doubles (double quotes ") permettent l'Úvaluation de variablesà
Il serait intÚressant de modifier ton
mysql_query("INSERT INTO contact VALUES('', '" . $nom . "', '".$prenom."', '" . $message . "', '". $mail ."')");
en
mysql_query("INSERT INTO contact VALUES('', '$nom ', '$prenom', '$message', '$mail')");
voire, mÛme (je chicane, lÓ hein [clindoeil] [rougir]) en
$sql="INSERT INTO contact VALUES('', '$nom', '$prenom', '$message', '$mail')";
mysql_query($sql);
ou, fin du fin;, en
$sql=sprintf("INSERT INTO contact VALUES('', '%s', '%s', '%s', '%s')",$nom,$prenom,$message,$mail);
mysql_query($sql);
Au passage (bis), prend tu la prÚcaution de vÚrifier que l'adresse introduite soit, au minimum au format normal d'une adresse Email [question] (une arobase @ qui ne soit ni en premiÞre position ni en derniÞre position, et un point . APRES l'arobase, mais ni tout de suite aprÞs, ni en derniÞre position)Modifié par koala01 le 13/08/2006 23:30 | |||||||
Petit astucien | d'accord merci.
mais comment je dois faire pour sÚcurisÚ l'envoide mail??
merci d'avance | |||||||
Astucien | Il s'agirait, dans un premier temps, de sÚcuriser le contenu de $_POST[sujet] exactement de la meme manÞre que ce qui est fait pour le contenu de $_POST[message] (dans une variable $sujet, par exemple [clindoeil])
Une fois cette sÚcurisation effectuÚe, au lieu d'utiliser le contenu des champs de formulaires sous la forme (actuelle) de
mail($to,$_POST['sujet'], $_POST['message']);
utilise les variables qui contiennent ces valeurs "sÚcurisÚes" sous la forme de
mail($to,$sujet,$message)
Il semblerait en outre judicieux de rajouter un champs "sujet" dans ta table et d'insÚrer la variable sÚcurisÚe sujet en meme temps que le reste de l'enregistrement
Enfin, selon moi, du moins, l'envoi de l'E-mail et l'insertion dans ta table ne doivent tous les deux avoir lieu que si le formulaire a ÚtÚ correctement rempli…
La fonction mail serait donc bien plus Ó sa place juste aprÞs l'inclusion de contact/contactrep.php, dans la partie "if" de ton test [clindoeil]
Voici donc ton code avec les modifications telles que je te le conseillerais…
<?php
//----Etape1-----
//Si un message est envoyÚ, on l'enregistre et on envoie l'E-mail
//-----------------
if (!empty($_POST['nom']) AND !empty($_POST['prenom']) AND !empty($_POST['message']) AND !empty($_POST['mail'])
AND (trim($nom) != '') AND (trim($prenom) != '') AND (trim($mail) != '') AND (trim($message) != ''))
{
$mail=$_POST['mail'], ENT_QUOTES;
$nom=htmlentities($_POST['nom'], ENT_QUOTES);//On utilise htlmentities par mesure desÚcuritÚ.UO
$prenom=htmlentities($_POST['prenom'], ENT_QUOTES);
$message=htmlentities($_POST['message'], ENT_QUOTES);//De mÛme pour le message
$sujet=htmlentities($_POST['sujet'], ENT_QUOTES);//et pour le sujet
$message=nl2br($message);//Pour le message, comme on utilise un textarea, il faut remplacer les EntrÚes par des <br/>
//on ne peut enregistrer que si l'adresse E-mail est au bon format
//les expression rÚguliÞres viennent Ó notre secours sur ce coup lÓ
if(!ereg ("^[^@ ]+@[^@ ]+\.[^@ \.]+$", $mail))
{
//On peut enfin enregistrer
$sql=sprintf("INSERT INTO contact
SET(`nom`,`prenom`,`sujet`,`message`,`mail`)
VALUES('%s', '%s', '%s', '%s', '%s')",$nom,$prenom,$sujet,$message,$mail);
mysql_query($sql);
include("contact/contactrep.php");
//on envoie l'email
$to='alonzo80@hotmail.com'
mail($to,$sujet, $message);
}
}
else
{
include("contact/contactnon.php");
}
(en ayant rajoutÚ un champs "sujet"(varchar 255) dans la table)
Cela ne rÚsoudra peut etre pas le problÞme, mais, au moins, tu n'enverra plus d'E-mail si tout n'est pas correctement rempli, et ton code sera rÚellement sÚcurisÚ (ou du moins beaucoup plus qu'actuellement), et plus "seulement Ó moitiÚ"[clindoeil] | |||||||
|
Les bons plans du moment PC Astuces | Tous les Bons Plans | ||||||||||||||||||
|