8797 sujets

Développement web côté serveur, CMS

J'ai sur mon site un formulaire permettant aux visiteurs d'envoyer des annonces à mon adresse mail.
Je voudrais leur permettre d'y ajouter une image au format jpg, gif, png, bmp.
De plus, quand je reçois le mail il y a toujours des slash / avant les guillemets ' " .
Pourrait-on m'aider à régler ces 2 problèmes?
Merci d'avance.

Voici les codes

-page.html
<form action="page.php" method="post" >
<p>Nom: <input type="text" size="30" name="nom" /></p>
<p>Email : <input type="text" size="30" name="email" /></p>
<p>Contenu :<br/> <textarea name="contenu" cols="50" rows="10"></textarea><br/></p>
<p><input type="hidden" name="id_news" value="<?php echo $id_news; ?>" />
<input type="submit" value="Envoyer" /></p>
</form>


-page.php
<?php
if (isset($_POST['nom']) AND isset($_POST['email'])AND isset($_POST['contenu']))
{
$nom = addslashes($_POST['nom']);
$email = addslashes($_POST['email']);
$contenu = addslashes($_POST['contenu']);
//=====Création de la boundary
$boundary = "-----=".md5(rand());
//==========
//=====Création du header de l'e-mail
$header = "From: \"$nom\"<$email>\n";
$header.= "Reply-to: \"$nom\" <$email>\n";
$header.= "MIME-Version: 1.0\n";
$header.= "Content-Type: multipart/alternative;\n boundary=\"$boundary\"\n";
//==========
//=====Création du message
$message= "\n--".$boundary."\n";
//=====Ajout du message au format HTML
$message.="Content-Type: text/html; charset=\"ISO-8859-1\"\n";
$message.="Content-Transfer-Encoding: 8bit\n";
$message.= '
Contenu : '.$contenu.'<br/>
';
//==========
$message.= "\n--".$boundary."--\n";
$message.= "\n--".$boundary."--\n";
//==========
//=====Envoi de l'e-mail
mail("monadresse@hotmail.com",'Annonce',$message,$header);
?> <p><?php echo"Votre annonce a été envoyé.";?></p>
<?php
//==========
}
?>

Modifié par citecarter (04 Nov 2010 - 18:17)
Bonjour déjà..

Pour les antislash devant les guillemets c'est tout à fait normal. Si je reprend ton code :

$contenu = addslashes($_POST['contenu']);


... suffit de virer la fonction addslashes()

Pour ton histoire d'images, il faudrait que tu autorise la balise <img> à tes visiteurs de manière à ce qu'ils insèrent une image directement en HTML (tu peux proposer une sorte de BBcode qui leur demande le lien de l'image et ensuite ça insère directement le tag <img> pour tes visiteurs qui connaitraient pas le HTML)
Et pour n'autoriser que le tag <img>, n'utilise pas htmlentities() ni htmlspecialchars() , mais
strip_tags($_POST['contenu'], '<img>'); // en gros, n'autoriser que la balise <img>

Je te laisse méditer là dessus,
Cya
A moins que tu ne souhaites leur permettes d'uploader une image depuis leur disque dur et qu'elle te soit transmise par mail ?

Si c'est le cas, il va te falloir quelques connaissances en PHP. Je vois globalement comment faire mais le code n'est pas trivial.
C'est ça Tymlis, je voudrais que via mon formulaire, les visiteurs puissent egalement uploader une image de leur pc et que je la reçoive sur mon mail
Dans ce cas je te conseille de faire une recherche google sur le sujet, la question étant assez complexe je ne pense pas qu'on te donne un code tout prêt ici.

Je n'ai jamais fait cela moi même, mais je pense qu'il "suffit" d'ajouter le contenu de l'upload dans un nouveau multipart du message, séparé par le $boundary de ton code

Si tu t'y connais déjà en PHP, je te conseille de regarder déjà comment uploader un fichier, et te renseigner sur la façon d'encoder un email, cela sera de bonnes pistes.
Tu peux faire plus simple, car venir encoder une image pour la fournir avec le mail va être une tâche plus ardu !

Dans le principe le plus simple que je puisse voir :
- Formulaire d'envoie d'image sur le serveur
- Envoie automatique d'email avec le lien vers l'image fraîchement débarquée, voir une balise "<img>" qui affichage cette dernière dans le corps du mail (avec du html tout ce qu'il y a de plus basique).
Le plus simple pour se faire est d'utiliser phpMailer ou SwiftMailer. D'ailleurs ils doit y avoir des exemples concret expliquant comment faire sur leurs sites.