Gilexpat
Messages postés2Date d'inscriptionsamedi 4 août 2007StatutMembreDernière intervention14 novembre 2007
-
14 nov. 2007 à 06:15
Gilexpat
Messages postés2Date d'inscriptionsamedi 4 août 2007StatutMembreDernière intervention14 novembre 2007
-
14 nov. 2007 à 09:51
Bonjour, on m'a demande de faire un site simple et j'avais besoin d'un formulaire qui puisse envoye des image en surfant j'ai trouve sur le net ce qu'il me fallait( Envoi de formulaire sans javascript avec pièce jointe proposé par Pierre Pesty http://dev.ppan.net/ apres avoir mis ce script en application j'obtiens un message d'erreur de ce type (Parse error: syntax error, unexpected T_STRING in /home/ndhandfo/public_html/contact.php on line 84) Merci d'avance a tous pour votre aide a resoudre ce pb car etant debutant je patauge pas mal .
ci joint le detail de la page:
<?php
/*
Envoi de formulaire sans javascript avec pièce jointe
proposé par Pierre Pesty http://dev.ppan.net/ Variables à modifier selon paramètres et besoins :
*/
# le nom de page (et titre) change en fonction des événements
$pageName = "Contact form";
# en-tête de l'objet du mail (option: vide)
$entete = "[2ndhandforyou]";
# email du webmestre
$destinataire = "gil@2ndhandforyou.com";
# envoi en copie carbone (option: vide)
$email_cc = "";
# envoi en copie cachée (option: vide)
$email_bcc = "";
# emplacement de la feuille de styles
$cssform = "webdev_form.css";
# options de pièce jointe
# répertoire temporaire d'upload (option: vide ou $rep inconnu)
# NB. le répertoire "upload" doit être créé sur le serveur (en FTP)
$rep = "upload/"; // ne pas oublier le slash /
# taille max de la pièce jointe (multiple de 1024)
$taillemax = 204800;
# menu déroulant pour l'objet (option: vide)
# ajout d'option : 'n'=>'Choix 1', 'n+1'=>'Choix 2',
# la première ligne (optionnelle) impose un choix
$objets = array(
0 => 'Select',
1 => 'Buy',
2 => 'Sale',
3 => 'Other',
);
# choix du mode de confirmation d'envoi
# true ou 1 = redirection vers $pageconfirme
# false ou 0 = affichage du résumé du message
$redirection = false;
# si $redirection = true ou 1
# page vers laquelle rediriger l'internaute
$pageconfirme = "index.php";
/*
fin des modifications
*/
$erreur = false;
$message = false;
$focus = 0;
# l'utilisateur a validé le formulaire
if (!empty($_POST)) {
# vérification des champs requis (Nom, Objet, Message, Email ou Tel)
if (empty($_POST['Message'])) {
$erreur = "Please type a message";
$focus = 1; // modification couleur du champ de saisie concerné
}
if (empty($_POST['Objet'])) {
$erreur = "Please select an objet";
$focus = 2;
}
if (empty($_POST['Nom'])) {
$erreur = "Please enter your name";
$focus = 3;
}
# email et tel sont vides : pas glop !
if (empty($_POST['Email']) && empty($_POST['Tel'])) {
$erreur = "Please enter email & phone number";
$focus = 4;
}
# vérification de l'email non vide
elseif (!empty($_POST['Email'])) {
if(!preg_match('`^:alnum:([-_.]?:alnum:)*@:alnum:([-_.]?:alnum:)*\.([a-z]{2,4})$`',$_POST['Email'])) {
$erreur = "Invalid email";
$_POST['Email'] = "";
$focus = 5;
}
# vérification du téléphone (no spaces)
} elseif (!is_numeric(str_replace(" ","",$_POST['Tel']))) {
$erreur = "Invalid phone number";
$_POST['Tel'] = "";
$focus = 6;
}
# pièce jointe (nouveauté 12.10.2005)
$attach file = "upload/";
if(!$erreur && strlen($_FILES['File']['name'])) {
$file = $_FILES['File'];
# upload du fichier sur le serveur
$temp = $file['tmp_name'];
$name = $file['name'];
$size = $file['size'];
$destination = $rep.$name;
if($size > $sizemax)
$erreur = "File size $name > ".(int)($sizemax/1024)." Ko";
elseif(!@is_uploaded_file($temp))
$erreur = "Download file $name impossible";
elseif(!@move_uploaded_file($temp, $destination))
$erreur = "Problem transferring file $name";
if($erreur) $focus = 7;
else {
# lecture du type de fichier
if(!function_exists('mime_content_type')) {
function mime_content_type($fichier) {
# ajouter autant de combinaisons que souhaitées
$mime = array(
'.gif' => 'image/gif',
'.jpg' => 'image/jpeg',
'.psd' => 'image/x-xwd',
'.png' => 'image/png',
'.txt' => 'text/plain',
'.doc' => 'application/msword',
'.xls' => 'application/vnd.ms-excel',
);
# par défaut
if(!$type = $mime[strrchr($fichier,'.')]) $type = "application/octet-stream";
return $type;
}
}
/*
pour utiliser mime_content_type()
éditer le fichier php.ini et enlever le commentaire sur :
extension=php_mime_magic.dll
sous Windows ajouter ces 2 lignes :
mime_magic.debug = On
mime_magic.magicfile = "c:\chemin_du_fichier\magic.mime"
NB : fonction non activée chez OVH
*/
$mimetype = mime_content_type($destination);
# lecture et conversion du fichier
if($openf = @fopen($destination, "rb")) {
$fichier = fread($openf, filesize($destination));
@fclose($openf);
# encodage norme RFC 2045
$piecejointe = chunk_split(base64_encode($fichier));
} else {
$erreur = "Problème de lecture du fichier $name";
$focus = 7;
}
}
}
# pas d'erreur donc on continue
if(!$erreur) {
# traitement du tableau $_POST qui contient les paires name => value
$message_final = "";
foreach($_POST as $key => $value) {
# la deuxième partie du test passe les champs non désirés dans le mail
# pour passer d'autres champs les séparer par |
if (strlen($value) && !eregi("(MAX_FILE_SIZE|Objet)", $key))
$message_final .= "$key : ".strip_tags($value)."\n";
}
# formatage du message de confirmation affiché (option)
# conversion des sauts de ligne et des caractères spéciaux
$message = ereg_replace("(\n|\r|\r\n)", "<br>", htmlentities($message_final));
# si $objets est un tableau : Objet = select donc index = $_POST['Objet']
if(is_array($objets))
$objet = "$entete ".$objets[$_POST['Objet']];
# sinon Objet = input donc en français dans le texte !
else
$objet = "$entete ".$_POST['Objet'];
# si l'email n'est pas renseigné on le remplace par celui
# du destinataire, en ajoutant une alerte au message
$final_mail = $_POST['Email'];
if(empty($_POST['Email'])) {
$final_mail = $destinataire;
$message_final .= "\nNe pas répondre par mail : email absent.\n";
}
# en-têtes
$headers = "From: ".$final_mail;
if(strlen($email_cc))
$headers .= "\nCC: ".$email_cc;
if(strlen($email_bcc))
$headers .= "\nBCC: ".$email_bcc;
# hôte expéditeur
$message_final .= "Hôte : ".gethostbyaddr($_SERVER['REMOTE_ADDR']);
# si pièce jointe on ajoute l'en-tête spécifique avec séparateurs
if(strlen($piecejointe)) {
$boundary = "/-------".md5(uniqid(rand()))."-------/"; // séparateur
$headers .= "\nMIME-Version: 1.0\nContent-Type: multipart/mixed; boundary=\"$boundary\"\n";
$message_final =
"This is a multi-part message in MIME format.\n--$boundary\n".
"Content-Type: text/plain; charset=ISO-8859-1\n".
"Content-Transfer-Encoding: 7bit\n\n".
"$message_final\n\n--$boundary\n".
"Content-Type: $mimetype; name=\"$name\"\n".
"Content-Transfer-Encoding: base64\n".
"Content-Disposition: attachment; filename=\"$name\"\n\n".
"$piecejointe\n--".
$boundary."--\n";
}
# envoi du mail
if (@mail($destinataire, stripslashes($objet), stripslashes($message_final), $headers)) {
@unlink($destination); // suppression de la pièce jointe
if($redirection) {
# NB : traiter $_GET['mailOK'] dans $pageconfirme
@header("Location: ".$pageconfirme."?mailOK=1");
exit;
}
$pageName = "The email has been sent !";
} else {
$pageName = "Fail !";
$erreur = "Fail to send ! Please try again ! thanks";
}
<h3>Votre message a été envoyé !</h3>
<pre>
<? echo wordwrap(stripslashes($message),100)?>
</pre>
<p><a href="./">Cliquez</a> pour revenir en page d'accueil.</p>
Gilexpat
Messages postés2Date d'inscriptionsamedi 4 août 2007StatutMembreDernière intervention14 novembre 2007 14 nov. 2007 à 09:51
Bonjours Sfel effectivement ta solution est la bonne le formulaire passe impec par contre les images ne sont pas presentes lors de la reception du mail. je regardes comment remedier a cela et si jamais tu as une idee elle est la bienvenue en tous cas un grand merci pour avoir pris le temps de decortiquer le code.
Salut bonne journee et peut etre a bientot
Gilexpat au pays du sourire.