Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 01/09/2008, à 09:10

Gamuti

[Résolu] Création de formulaire en html

Salut à tous,

J'aimerai créer un formulaire sur mon site web pour que les internautes m'envoient leurs photos.
Pour cela j'utilise ce script hébergé chez free :

<form method="POST" action="http://perso0.free.fr/cgi-bin/form2mail.pl">
<table width="549" border="0" bgcolor="#666666" cellpadding="1" cellspacing="0" align="center">
<tr> 
<td align="center" height="20"><b><font color="#FFFFFF">Entrer vos informations ci-dessous :</font></b></td>
</tr>
<tr> 

<td> 
<table border=0 cellpadding=3 width="549" align="center" cellspacing="0" bgcolor="#FFFFFF">
<tr> 
<td width="144">Nom :</td>
<td width="387"> 
<input type="text" name="nom" value="" size=20>
</td>
</tr>
<tr> 
<td width="144">Email :</td>
<td width="387"> 
<input type="text" name="email" value="" size=40>
</td>
</tr>

<tr> 
<td valign="top" width="144"> 
<p>Titre :</p>
</td>
<td width="387"> 
<textarea name="comment" cols="50" rows="1" wrap="virtual"></textarea>
<tr> 
<td valign="top" width="144"> 
<p>Commentaires :</p>
</td>
<td width="387"> 
<textarea name="comment" cols="50" rows="10" wrap="virtual"></textarea>
<P align=center><INPUT type="file" name="Fichier#1" value=" fichier "> </P>
<P align=center><INPUT type="file" name="Fichier#2" value=" fichier "> </P>
<P align=center><INPUT type="file" name="Fichier#3" value=" fichier "> </P>
<P align=center><INPUT type="file" name="Fichier#4" value=" fichier "> </P>
<P align=center><INPUT type="file" name="Fichier#5" value=" fichier "> </P>
Pour envoyer plus de 5 photos, envoyez-moi plusieurs formulaires
</td>
</tr>
<tr> 
<td width="144"> 
<input type="reset" name="reset" value="Effacer">
</td>
<td align=RIGHT width="387"> 
<input type="submit" name="  O K  " value="  OK !  ">
</td>
</tr>
</table>
</td>
</tr>

</table>
</form>

Lorsque je teste ce code, la réponse se fait immédiatement dans ma messagerie Evolution (sans problème)

Par contre, dans le code, il y a un bouton qui permet de poster des photos.
Dans la messagerie, il m'indique simplement le nom du fichier mais aucune trace de pièce jointe.

Qui peut m'expliquer ?

Dernière modification par Gamuti (Le 03/09/2008, à 08:13)

Hors ligne

#2 Le 01/09/2008, à 22:03

AlexandreP

Re : [Résolu] Création de formulaire en html

Le problème ne provient pas de ton formulaire, mais de ton script CGI/Perl (http://perso0.free.fr/cgi-bin/form2mail.pl) que tu utilises pour envoyer le courriel. Le formulaire n'est qu'une interface qui permet aux visiteurs de saisir un texte et de sélectionner des photos à t'envoyer ; c'est le script qui récupère les informations entrées par le visiteur, récupère les photos dans l'ordinateur de l'expéditeur, met en forme le courriel et te l'envoie.


«La capacité d'apprendre est un don; La faculté d'apprendre est un talent; La volonté d'apprendre est un choix.» -Frank Herbert
93,8% des gens sont capables d'inventer des statistiques sans fournir d'études à l'appui.

Hors ligne

#3 Le 02/09/2008, à 09:00

Gamuti

Re : [Résolu] Création de formulaire en html

Merci d'avoir éclairé ma lanterne AlexandreP.

Le scrip form2mail.pl est fournit par FREE. S'il ne fonctionne pas correctement, comment faire pour que mon formulaire puisse rapatrier les images sur ma messagerie ?
Je rappelle que le site est hébergé par FREE (puisque j'en suis abonné)
J'ai vu que des sripts PHP existent. Je me demande si FREE est capable de traiter les scripts PHP.

Hors ligne

#4 Le 02/09/2008, à 17:12

Gamuti

Re : [Résolu] Création de formulaire en html

En fait, il ne s'agissait nullement de faire un tableau. Je pensais par la suite utiliser les balises <DIV></DIV> pour faire la mise en page.
Le code énuméré est un exemple ! je l'ai pompé sur le site de FREE pour exemple et tests.
D'ailleurs, le site dans lequel j'allais inclure un formulaire existe déjà. Je voulais simplement rajouter la fonction d'ajouter des pièces jointes.

Hors ligne

#5 Le 02/09/2008, à 20:27

Gourou2k

Re : [Résolu] Création de formulaire en html

Il te faut faire un formulaire avec <form action="url" enctype="multipart/form-data">
form elements
</form>

Dans les forms elements, tu mets un <input type ="file">

Comme l'utilisateur pourra choisir un fichier sur son ordi et te l'envoyer.

dans url, tu mets un script php qui recupère le fichier de l'utilisateur et t'envoie un mail avec une pièce jointe, la photo.

Le script Phpmailer permet d'envoyer un email, faut juste faire le script qui récupère les informations de ton formulaire et les place dans phpmailer.


Gourou2k
---------------------------
Station : Core2Duo E8400, 4Gio, Ubuntu 9.04 - Windows Vista 64 sp1
Portable : Apple Mac Book Pro 15", core i5, 4Gio, Mac OS X

Hors ligne

#6 Le 02/09/2008, à 20:32

rniamo

Re : [Résolu] Création de formulaire en html

il y a tout sur developpez.com rubrique php


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#7 Le 03/09/2008, à 08:12

Gamuti

Re : [Résolu] Création de formulaire en html

OK. Merci à tous, j'ai trouvé effectivement un script en PHP qui permet de résoudre la situation.
Comme je n'y connais rien en PHP, je me suis permis de pomper le code sur le site WEBDEV dont voici la source :

<?php

error_reporting (E_ERROR | E_WARNING | E_PARSE);

/*

Envoi de formulaire sans javascript avec pièce jointe proposé par Pierre Pesty http://dev.ppan.net/



Variables A MODIFIER selon vos besoins :

*/

# remplacez login@fai par votre email

$destinataire = "games.utilities@free.fr";

# nom et titre de page

$pageName = "Formulaire de contact";

# en-tête de l'objet du mail (option: vide)

$entete = "[dev.ppan.net]";

# 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";

# nom du répertoire pour upload des pièces jointes

# le répertoire (ici "upload") doit être créé sur le serveur

$rep = "upload/"; // ne pas oublier le slash /

# taille max de la pièce jointe (multiple de 1024)

$taillemax = 2048000;

# menu déroulant pour l'objet (option: vide)

# ajout d'option : 'n'=>'Choix 1', 'n+1'=>'Choix 2', etc.

# la première ligne (optionnelle) impose un choix

$objets = array(

    0 => 'Choisissez',

    1 => 'Envoi photo',

    2 => 'Un message pour administrateur',

    3 => 'Autre',

);

# page vers laquelle rediriger le script après envoi réussi

$pageconfirme = "http://games.utilities.free.fr/result.html";

# traiter $_GET['mailOK'] dans $pageconfirme (ex. index.php) comme ceci :

# if(isset($_GET['mailOK'])) echo "Votre message a été envoyé";

/*

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 = "Merci de renseigner le message";

		$focus = 1; // modification couleur du champ de saisie concerné

	}

	if (empty($_POST['Objet'])) {

		$erreur = "Merci de renseigner l'objet";

		$focus = 2;

	}

	if (empty($_POST['Nom'])) {

		$erreur = "Merci de renseigner votre nom";

		$focus = 3;

	}

	# email et tel sont vides : pas glop !

	if (empty($_POST['Email']) && empty($_POST['Tel'])) {

		$erreur = "Saisir email et/ou t&eacute;l&eacute;phone SVP";

		$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 = "Email non conforme";

			$_POST['Email'] = "";

			$focus = 5;

		}

	# vérification du téléphone (sans espaces)

	} elseif (!is_numeric(str_replace(" ","",$_POST['Tel']))) {

		$erreur = "Téléphone non conforme";

		$_POST['Tel'] = "";

		$focus = 6;

	}

	# pièce jointe (nouveauté 12.10.2005)

	$piecejointe = "";

	if(!$erreur && strlen($_FILES['Fichier']['name'])) {

		$fichier = $_FILES['Fichier'];

		# upload du fichier sur le serveur

		$temp = $fichier['tmp_name'];

		$name = $fichier['name'];

		$size = $fichier['size'];

		$destination = $rep.$name;

		if($size > $taillemax)

			$erreur = "Taille du fichier $name > ".(int)($taillemax/1024)." Ko";

		elseif(!@is_uploaded_file($temp))

			$erreur = "Téléchargement du fichier $name impossible";

		elseif(!@move_uploaded_file($temp, $destination))

			$erreur = "Problème de transfert du fichier $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',

					'.jpeg' => '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 boucle passe les champs vides ou non désirés

			# pour passer d'autres champs les séparer par |

			if (!strlen($value) || eregi("(MAX_FILE_SIZE|Objet)", $key)) continue;

			$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

			@header("Location: ".$pageconfirme."?mailOK=1");

			exit;

		 } else {

			$pageName = "Echec !";

			$erreur = "Echec de l'envoi ! Merci d'essayer encore";

		 }



	} else {



		$pageName = "Erreur de saisie !";



	} // if(!$erreur)



} // if ($_POST)

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title><? echo $pageName?></title>

<meta name="author" content="Pierre Pesty">

<meta name="generator" content="http://dev.ppan.net/">

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<link href="<? echo $cssform?>" type="text/css" rel="stylesheet">

</head>

<body>

	<div>

<?		if (!$erreur) { ?>

		  <h4>Contact</h4>

		  <p>Merci de renseigner les champs marqués d'un astérisque (email et/ou téléphone)</p>

<?		} else { ?>

		  <p class="alerte"><? echo $erreur?></p>

<?		} ?>

		  <hr>

		  <form name="formulaire" action="<? echo $_SERVER['PHP_SELF']?>" method="post" enctype="multipart/form-data">

			 <p>

				<label for="nom">Nom *</label><input id="nom" <? if($focus == 3) echo "class=\"focus\"";?> name="Nom" maxlength="30" value="<? echo htmlentities($_POST['Nom'], ENT_QUOTES)?>"> 

			 </p>

			 <p>

				<label for="email">Email *</label><input id="email" <? if($focus == 5 || $focus == 4) echo "class=\"focus\"";?> name="Email" maxlength="60" value="<? echo htmlentities($_POST['Email'], ENT_QUOTES)?>">

			 </p>

			 <p>

				<label for="tel">Téléphone *</label><input id="tel" <? if($focus == 6 || $focus == 4) echo "class=\"focus\"";?> name="Tel" maxlength="20" value="<? echo htmlentities($_POST['Tel'])?>">

			 </p>

			 <p>

<?		if (is_array($objets)) { ?>

				<label for="objet">Objet *</label><select name='Objet' <? if($focus == 2) echo "class=\"focus\"";?> id="objet">

<?

foreach($objets as $key => $val) {

    echo "				  <option value='$key'";

    // vérifier si une des entrées a été choisie

    if($key == $_POST['Objet']) echo " selected";

    echo ">$val\n";

}

?>

				</select>

<?		} else { ?>

				<label for="objet">Objet *</label><input id="objet" <? if($focus == 2) echo "class=\"focus\"";?> name="Objet" maxlength="60" value="<? echo htmlentities($_POST['Objet'], ENT_QUOTES)?>">

<?		} ?>

			 </p>

			 <p>

				<label for="message">Message *</label><textarea <? if($focus == 1) echo "class=\"focus\"";?> id="message" name="Message"><? echo htmlentities(stripslashes($_POST['Message']))?></textarea>

			 </p>

<?		if (file_exists($rep)) { ?>

			 <p>

				<label for="fichier">Pièce jointe</label><input type="hidden" name="MAX_FILE_SIZE" value="<? echo $taillemax?>"><input type="file" id="fichier" <? if($focus == 7) echo "class=\"focus\"";?> name="Fichier" size="35">

			 </p>

			 <p>

				<label>&nbsp;</label>NB : taille du fichier inférieure à <?= (int)($taillemax/1024)?> Ko

			 </p>

<?		} ?>

			 <p>

				<label>&nbsp;</label><input id="submit" type="submit" value="Envoyer"> <a href="./">Accueil</a>

			 </p>

		  </form>

	</div>

</body>

</html>

Le résultat : ça marche !!

Encore merci à vous tous de m'avoir aiguillé vers la solution.

Hors ligne