no save
Assistance
Achat
News

Forum | webmastering
[php] envoi de formulaires par mail
Ssylvainsab, le lun. 22 janv. 2007 à 20:45:09
Salut.

Tu as de gros problèmes de sécurité dans ton code.
Je te recommande de supprimer tout de suite la requête dans ton code, et de mettre à jour le fichier sur le site.
Enlève le "mysql_query(...)", tu peux laisser le reste.

Je vais éditer ce message, mais je poste vite pour que tu le voies.


Bon, l'édition maintenant.

Je te donne un code, et la liste des fonctions que j'utilise.
Si tu copies/colles ce code il fonctionnera (tu dois quand même mettre les informations de ta base de données et ton adresse e-mail), mais ca ne servira à rien.

Je te conseille de te rendre sur la documentation PHP pour voir à quoi servent les fonctions et pourquoi je les utilise.
Les fonctions
(dans l'ordre d'utilisation)
Ces explication sont sommaires et pas forcément exactes.
Consulte la documentation ;-)
get_magic_quotes_gpc : pemet de voir si des anti-slashs sont ajoutés automatiquement sur certaines variables qui proviennent de l'utlisateur, comme les $_POST.
array_map : Permet d'appliquer une fonction à tous les éléments d'un array à la fois.
stripslashes : Enlève les anti-slashs qui servent d'échappement dans une variable.
mysql_real_escape_string : Echappe les caractères selon les normes MySQL.
htmlspecialchars : Remplace certains caractères html (comme < et >) par leus entités.
extract : Extrait tout les éléments d'un array.
Par exemple :
$truc['champ']='str';
extract($truc);
//maintenant $champ vaut 'str'


Et quelques autres trucs que j'utilise mais qui ne sont pas des fonctions :
foreach : Boucle qui permet de parcourir un array clé par clé et valeur par valeur, et d'appliquer les mêmes choses à chaque fois.
Le code
<?
//on rend innofensives les données (seulement le html ici)
if(get_magic_quotes_gpc())
$_POST=array_map('stripslashes',$_POST);
$_POST=array_map('trim',$_POST);
foreach($_POST as $champ=>$valeur)
$_POST[$champ]=htmlspecialchars($valeur,ENT_NOQUOTES);
$date=date('d/m/Y H:i:s');

//connection a MySQL et selection de la BDD
$ConnectionBDD=mysql_connect('localhost','NomUtilisateur','MotDePasse','')or die('Erreur de connexion '.mysql_error());
mysql_select_db('ma_db',$ConnectionBDD) or die('Erreur de selection'.mysql_error());

//insertion des données dans la BDD, APRES SECURISATION POUR SQL !!
$postSQL=$_POST;
foreach($postSQL as $champ=>$valeur)
$postSQL[$champ]=mysql_real_escape_string($valeur);
extract($postSQL);
$RQSQLinsertionDonnees="INSERT INTO ma_table VALUES('$nom','$prenom','$jour','$mois','$annee','$sexe','$rue','$npa','$lieu','$tel','$categorie','$email','$remarques','$sujet','$date')";
mysql_query($RQSQLinsertionDonnees) or die('Erreur SQL !'.$RQSQLinsertionDonnees.'<br>'.mysql_error());

mysql_close();


//on prépare les données pour envoyer le mail
$header='From: '.$destinataire."\r\n".'Content-type:text/plain;charset=iso-8859-1';
$message='';

//tous les champs du formulaire sont ajoutés dans le message
foreach($_POST as $cle=>$valeur)
$message.=$cle.' : '.$valeur."\n";

//on envoie le mail en séparant les adresse des deux destinataires par une virgule et un espace dans le premier argument de la fonction
mail('tonadresse@email.tld, '.$email,$subject,$message,$header);

//on dirige vers le résultat, mais on eput le faire au début, seulement on ne verra pas les erreurs s'il y en a.
header('Location: http://ma_page_de_confirmation.html');
?>


j'éspère que je t'ai aidé, et que tu ne vas pas copier/coller le code bêtement sans comprendre ;-)

a plus

PrécédentLESAM
janv. 07
LESAM
janv. 07
Suivant
REPONSES
Ssylvainsab
janv. 07
LESAM
janv. 07
Ssylvainsab
janv. 07
LESAM
janv. 07
Ssylvainsab
janv. 07
LESAM
janv. 07
Ssylvainsab
janv. 07
LESAM
janv. 07
Ssylvainsab
janv. 07
Florent
févr. 07
Version Web
Réalisé par RedShift
no save