8795 sujets

Développement web côté serveur, CMS

Bonjour,
Je viens de créer un formulaire tout simple en Php avec différents champs (nom, prénom etc...) dont un d'envoi de fichier (en locurrence un CV...).

Le formaulaire marche sans problème, tout les champs sont a la fois enregistrés dans une base de données et envoyés par mail.

J'aimerais ajouter une structure de controle sur le champ "file" (envoi du fichier) afin d'obtenir les action suivante :

1) --> Remplacer les " " (espaces) par des "_".
2) --> Vérifier si un fichier ne porte pas déjà ce nom, si oui, ajouter le chiffre "1" a la fin (ou un é si il y a déjà un 1...)
3) --> limter la taille du fichier à 2Mo
4) --> limiter les extensions (juste .doc, .zip, .pdf etc...)

voila,
Je pense que cela ne doit pas forcément être trop difficile, mais le dévelopement Php est loin d'être ma spécialité...

Voici le code :


<?
include("config/db.php"); 
opendb();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
body { 
	width:100%; height:100%; margin:0;
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 11px;
	font-weight: normal;
}

#logo_repotel {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 14px;
	font-weight: normal;
	text-transform: uppercase;
	position:relative;	 
	top:20px;
	left:152px;
	border:0;
	z-index:1;
}
#logo_clinalliance {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 14px;
	font-weight: normal;
	text-transform: uppercase;
	position:relative;	 
	top:-20px;
	left:50px;
	border:0;
	z-index:2;
}
-->
</style>
</head>

<body>
<?
$classoubli = "style=\"visibility:hidden\"";

// DEBUT DE DU CONTROLES REMPLISSAGE DU FORMULAIRE + ENVOI MAIL ETC...
if ($_GET["action"] == "send_request")
	{
		$classoubli = "style=\"visibility:hidden\"";
		if (empty($_POST["nom"]))
		{ 
			$ClassEmptyNom = "style=\"color:#FF0000\"";
			$classoubli = "style=\"color:#FF0000\"";
		}
		else
		{
			if (empty($_POST["prenom"]))
			{ 
				$ClassEmptyPrenom = "style=\"color:#FF0000\"";
			$classoubli = "style=\"color:#FF0000\"";
			}
			else
			{
				if (empty($_POST["adresse"]))
				{ 
					$ClassEmptyAdresse = "style=\"color:#FF0000\"";
					$classoubli = "style=\"color:#FF0000\"";
				}
				else
				{
					// A DECOMMENTER SI CHAMP "MAIL" OBLIGATOIRE
					//function VerifierAdresseMail($adresse)
					//	{
					//	   $Syntaxe='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,5}$#';
					//	   if(preg_match($Syntaxe,$adresse))
					//		  return true;
					//	   else
					//		 return false;
					//	}
					
					
					
					//if (empty($_POST["mail"]))
					//{ echo "mail vide!!";}
					//else
					//{
					//if (!VerifierAdresseMail($_POST["mail"]))
					//{ echo "Vérifiez votre adresse mail";}
					//else
					//{
						if (empty($_POST["contact"]))
						{ 
							$ClassEmptyContact = "style=\"color:#FF0000\"";
							$classoubli = "style=\"color:#FF0000\"";

						}
						else
						{
							if (empty($_POST["request"]))
							{ 
								$ClassEmptyRequest = "style=\"color:#FF0000\"";
								$classoubli = "style=\"color:#FF0000\"";
							}
							else
							{
								if (empty($_POST["etablissement"]))
								{ 
									$ClassEmptyEtablissement = "style=\"color:#FF0000\"";
									$classoubli = "style=\"color:#FF0000\"";

								}
								else
								{	//DEBUT DE L'ENVOI DU MAIL
									$mes .= "Un message vient d'être envoyé depuis votre site web";
									$mes .= "	<br>";
									$mes .= "<table border=\"1\" width=\"500\" cellpadding=\"3\">";
									$mes .= "	<tr>";
									$mes .= "		<td align=\"right\" width=\"255\">Nom de la personne</td>";
									$mes .= "		<td align=\"left\">$nom &nbsp; $prenom </td>";
									$mes .= "	</tr>";
									$mes .= "	<tr>";
									$mes .= "		<td align=\"right\">Adresse</td>";
									$mes .= "		<td align=\"left\"> $adresse </td>";
									$mes .= "	</tr>";
									$mes .= "	<tr>";
									$mes .= "		<td align=\"right\">Telephone fixe</td>";
									$mes .= "		<td align=\"left\">$telephone_fixe</td>";
									$mes .= "	</tr>";
									$mes .= "	<tr>";
									$mes .= "		<td align=\"right\">Telephone portable</td>";
									$mes .= "		<td align=\"left\">$telephone_portable</td>";
									$mes .= "	</tr>";
									$mes .= "	<tr>";
									$mes .= "		<td align=\"right\">Adresse mail</td>";
									$mes .= "		<td align=\"left\"><a href=\"mailto:$mail\">$mail</a></td>";
									$mes .= "	</tr>";
									$mes .= "	<tr>";
									$mes .= "		<td align=\"right\">Desire être contacté par un établissement?</td>";
									$mes .= "		<td align=\"left\">$contact</td>";
									$mes .= "	</tr>";
									
						if ($_POST["request"] == "retraite") { $request ="Obtenir des informations concernant une residence de retraite"; } 
						elseif ($_POST["request"] == "clinique") { $request ="Obtenir des informations concernant une clinique"; } 
						elseif ($_POST["request"] == "autre") { $request ="Autre"; } 									

									$mes .= "	<tr>";
									$mes .= "		<td align=\"right\">Nature de la demande :</td>";
									$mes .= "		<td align=\"left\">$request</td>";
									$mes .= "	</tr>";




									
									$mes .= "	<tr>";
									$mes .= "		<td align=\"right\">établissement concerné :</td>";
									
									
									
									
									$sql = "SELECT id_residence,dep_residence,nom_residence,adresse_mail FROM residence WHERE id_residence=$etablissement";
										$result = mysql_query($sql); 
										while ($val = mysql_fetch_array($result))
										{
											$id_residence = $val["id_residence"];		
											$dep_residence = $val["dep_residence"];
											$nom_residence = $val["nom_residence"];
											$adresse_mail = $val["adresse_mail"];
											
											$nom_de_etablissement = "$dep_residence$nom_residence";
										}
									$mes .= "		<td align=\"left\">$nom_de_etablissement</td>";
									$mes .= "	</tr>";
									$mes .= "	<tr>";
									$mes .= "		<td align=\"right\">Message:</td>";
									$mes .= "		<td align=\"left\">$message</td>";
									$mes .= "	</tr>";
									$mes .= "</table>";
									
									//echo $mes; // A SUPPRIMER (DEBUG)
									
									// Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
									 $headers .= 'MIME-Version: 1.0' . "\r\n";
									 $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
								
									// En-têtes additionnels
									 $headers .= 'From: Repotel communication du site <contact@repotel.fr>' . "\r\n";
									 
									//Envoi du mail								
									 mail($adresse_mail, 'Message depuis votre site web [Ne pas répondre]', stripslashes($mes), $headers);
									
									// enregistrement du fichier sur le serveur (répertoire /CV)
									$Fichier = $HTTP_POST_FILES["Fichier"];
									$nom_du_fichier = basename($HTTP_POST_FILES["Fichier"]["name"]);
									
										if ( isset($Fichier) && !empty($Fichier) )
										{
										echo "<span class=\"ok\">Photo uploadée ($nom_du_fichier)</span>";
										copy($HTTP_POST_FILES["Fichier"]["tmp_name"], "cv/$nom_du_fichier");
										}
									
									// DEBUT INSERTION DE L'ENVOI DANS LA BASE DE DONNEE
											$date1=date("Y-m-d");
											$time=date("H:i:s");
											$nom=$_POST["nom"];
											$prenom=$_POST["prenom"];
											$adresse=$_POST["adresse"];
											$telephone_fixe=$_POST["telephone_fixe"];
											$telephone_portable=$_POST["telephone_portable"];
											$mail=$_POST["mail"];
											$contact=$_POST["contact"];
											$request=$_POST["request"];
											$etablissement=$_POST["etablissement"];
											$message=$_POST["message"];

											$nom=addslashes($nom);
											$prenom=addslashes($prenom);
											$adresse=addslashes($adresse);
											$message=addslashes($message);
											
											//enregistrement des informations dans la base de données
										
											if(mysql_query("INSERT INTO `log_mail` ( `nom_mail` , `date_mail` , `time_mail` , `prenom_mail` , `adresse_mail` , `telephone_fixe_mail` , `telephone_portable_mail` , `mail_mail` , `contact_mail` , `request_mail` , `etablissement_mail` , `message_mail` , `nom_fichier_cv` )
										VALUES ('".$nom."', '".$date1."', '".$time."', '".$prenom."', '".$adresse."', '".$telephone_fixe."', '".$telephone_portable."', '".$mail."', '".$contact."', '".$request."', '".$etablissement."', '".$message."', '".$nom_du_fichier."');"
											))
											 
												echo "<center>Informations envoyées avec succès.</center>";
											else
												echo "<center>Erreur lors de l'envoi des informations.</center>";
									// FIN INSERTION DE L'ENVOIE DANS LA BASE DE DONNEE
								}
							}
						}
						// accolades des mails
					//}
					//}
				}
			}
		}

	}


 ?>
<table align="center" cellpadding="0" cellspacing="0" border="0" width="737" style="background-image:url(img/background_contact.jpg); height:737px;">
	<tr>
		<td height="170" width="130"><span id="logo_repotel"><a href="index.php" target="_self"><img src="img/logo_repotel.png" alt="Repotel" border="0"></a></span><span id="logo_clinalliance"><a href="../Clinalliance" target="_self"><img src="img/logo_clinalliance.png" alt="Clinalliance" border="0"></a></span></td>
		<td></td>
	</tr>
	<tr>
		<td></td>
		<td valign="top">

<span <? echo $classoubli; ?>>Merci de remplir les champs en rouge.</span>
<form enctype="multipart/form-data" action="<? echo $PHP_SELF; ?>?action=send_request" method="post" name="form_contact">
<table>
	<tr>
		<td align="right" width="84" nowrap <? echo $ClassEmptyNom; ?>>*Nom:</td>
		<td><input type="text" name="nom" value="<? if  ($_POST["nom"]!="") echo $_POST["nom"];?>"></td>
		<td align="right" width="84" nowrap <? echo $ClassEmptyPrenom; ?>>*Prenom:</td>
		<td align="right" nowrap <? echo $ClassEmptyPrenom; ?>><input type="text" name="prenom" value="<? if  ($_POST["prenom"]!="") echo $_POST["prenom"];?>"></td>
	</tr>
</table>
<table width="550" border="0">
	<tr>
		<td align="right" width="84" nowrap <? echo $ClassEmptyAdresse; ?>>*Adresse :</td>
		<td align="left"><input type="text" name="adresse" size="60" value="<? if  ($_POST["adresse"]!="") echo $_POST["adresse"];?>"></td>
	</tr>
</table>
<table>
	<tr>
		<td align="right" width="84" nowrap>Téléphone:</td>
		<td align="left" nowrap><input type="text" name="telephone_fixe" value="<? if  ($_POST["telephone_fixe"]!="") echo $_POST["telephone_fixe"];?>"></td>
		<td align="right" width="84">Portable:</td>
		<td align="left" nowrap><input type="text" name="telephone_portable" value="<? if  ($_POST["telephone_portable"]!="") echo $_POST["telephone_portable"];?>"></td>
	</tr>
</table>
<table width="450" border="0">
	<tr>
		<td align="right" width="84" nowrap>Email : </td>
		<td><input type="text" name="mail" value="<? if  ($_POST["mail"]!="") echo $_POST["mail"];?>"></td>
	</tr>
</table>
<table border="0">
	<tr>
		<td>
			<table>
				<tr>
					<td>*Desirez-vous être contacté par un établisement?</td>
					<td <? echo $ClassEmptyContact; ?>><input type="radio" value="oui" name="contact" <? if  ($_POST["contact"]=="oui") echo "checked=\"checked\"";?>>Oui</td>
				</tr>
				<tr>
					<td></td>
					<td <? echo $ClassEmptyContact; ?>><input type="radio" value="non" name="contact" <? if  ($_POST["contact"]=="non") echo "checked=\"checked\"";?>>non</td>
				</tr>
				<tr>
					<td></td>
					<td <? echo $ClassEmptyContact; ?>><input type="radio" value="par mail uniquement" name="contact" <? if  ($_POST["contact"]=="par mail uniquement") echo "checked=\"checked\"";?>>Par mail uniquement</td>
				</tr>
			</table>
		  </td>
	</tr>
	<tr>
		<td <? echo $ClassEmptyRequest; ?>>*Vous souhaitez :
								<select name="request">
									<option value="">&nbsp;</option>
									<option value="retraite" <? if  ($_POST["request"]=="retraite") echo "selected=\"selected\"";?>>Obtenir des informations concernant une residence de retraite</option>
									<option value="clinique" <? if  ($_POST["request"]=="clinique") echo "selected=\"selected\"";?>>Obtenir des informations concernant une clinique</option>
									<option value="autre" <? if  ($_POST["request"]=="autre") echo "selected=\"selected\"";?>>Autre</option>
								</select>
		</td>
	</tr>
	<tr>
		<td <? echo $ClassEmptyEtablissement; ?>>*établissement concerné :
			<select name="etablissement">
				<option value="">&nbsp;</option>
			<optgroup label="Repotel">
	<?									$sql = "SELECT id_residence,dep_residence,nom_residence FROM residence WHERE type_residence='repotel' ORDER BY dep_residence";
					$result = mysql_query($sql); 
					while ($val = mysql_fetch_array($result))
					{
						$id_residence = $val["id_residence"];		
						$dep_residence = $val["dep_residence"];
						$nom_residence = $val["nom_residence"];
						
						if ($id_residence == $_POST["etablissement"]) { $select1 = "selected=\"selected\""; } else { $select1 = ""; } 
						
						echo "<option value=\"$id_residence\" $select1>$dep_residence $nom_residence</option>";
					}
	?>	
			</optgroup>
			<optgroup label="Clinalliance">
	<?									$sql = "SELECT id_residence,dep_residence,nom_residence FROM residence WHERE type_residence='clinalliance' ORDER BY dep_residence";
					$result = mysql_query($sql); 
					while ($val = mysql_fetch_array($result))
					{
						$id_residence = $val["id_residence"];		
						$dep_residence = $val["dep_residence"];
						$nom_residence = $val["nom_residence"];
						
						if ($id_residence == $_POST["etablissement"]) { $select1 = "selected=\"selected\""; } else { $select1 = ""; } 
						
						echo "<option value=\"$id_residence\" $select1>$dep_residence $nom_residence</option>";
					}
	?>	
			</optgroup>
			</select>
		</td>
	</tr>
	<tr>
		<td>
			joindre votre cv <input type="hidden" name="MAX_FILE_SIZE" value="10000000"><input name="Fichier" type="file">
		</td>
	</tr>
	<tr>
		<td>Votre Message :</td>
	</tr>
	<tr>
		<td><textarea cols="60" rows="8" name="message"><? if  ($_POST["message"]!="") echo stripslashes($_POST["message"]);?></textarea></td>
	</tr>
	<tr style="margin-right:100">
		<td>
			<table width="100%" cellpadding="0" cellspacing="0" border="0">
				<tr>
					<td valign="top" align="right">* Champs obligatoires&nbsp;</td>
					<td align="left" nowrap="nowrap" width="180"><input type="submit" value="Envoyer"> <input type="button" value="Annuler" onclick="javascript:history.back ()"></td>
				</tr>
			</table>
		</td>
	</tr>
</table>
</form>



		</td>
	</tr>
</table>



</body>
</html>
<?		
closedb();
?>


Grand merci pour votre aide Smiley cligne
Bonjour,

1) --> Remplacer les " " (espaces) par des "_".

Vas voir la fonction str_replace

2) --> Vérifier si un fichier ne porte pas déjà ce nom, si oui, ajouter le chiffre "1" a la fin (ou un é si il y a déjà un 1...)

Si tu crées un fichier sur ton serveur il y a la fonction is_file sinon faut faire une requete sql pour ta base de donnée et s'il existe alors rajouter le 1.

3) --> limter la taille du fichier à 2Mo

dans ton code tu as déjà de quoi limité la taille de ton envoie et donc il suffit de remplacer ton 10000000 par 2048
<input type="hidden" name="MAX_FILE_SIZE" value="10000000" />


4) --> limiter les extensions (juste .doc, .zip, .pdf etc...)

Enfin pour limité l'envoi de ton fichier il suffit de vérifier le type de ton fichier dans ton php avant de l'envoyer.
Halindel a écrit :
Bonjour,

1) --> Remplacer les " " (espaces) par des "_".

Vas voir la fonction str_replace

2) --> Vérifier si un fichier ne porte pas déjà ce nom, si oui, ajouter le chiffre "1" a la fin (ou un é si il y a déjà un 1...)

Si tu crées un fichier sur ton serveur il y a la fonction is_file sinon faut faire une requete sql pour ta base de donnée et s'il existe alors rajouter le 1.

3) --> limter la taille du fichier à 2Mo

dans ton code tu as déjà de quoi limité la taille de ton envoie et donc il suffit de remplacer ton 10000000 par 2048
<input type="hidden" name="MAX_FILE_SIZE" value="10000000" />


4) --> limiter les extensions (juste .doc, .zip, .pdf etc...)

Enfin pour limité l'envoi de ton fichier il suffit de vérifier le type de ton fichier dans ton php avant de l'envoyer.


Wahou, merci pour ta rapidité de réponse, je vais regarder tout cela.

Pourrais-je juste avoir un peu plus de précisions pour la réponse a la 4ème question. comment faire pour vérifier le type du fichier?

Et aussi, pour la question 3, j'aimerais savoir comment faire pour qu'un méssage avertisse l'utilisateur lorsque le fichier dépasse la taille limte...

Encore Grand merci


Smiley lol
Modifié par Johnlemon (19 Sep 2007 - 16:17)
Plusieurs solutions:

Pour le points 3 :

Qui te permet de connaitre la taille de ton fichier qui vient d'être envoyer. donc avec une condition.
$_FILES['userfile']['size']


pour points 4 :

Tu peux utiliser cela qui te retournera l'extension de ton fichier envoyer, ensuite tu utilise un tableau contenant tout le type autoriser et tu utilise la fonction in_array()
$extension = substr($_FILES[$img]['name'],strlen($_FILES[$img]['name']) - 4);
if($extension[0] != '.') { $extension = '.'.$extension; }


Sinon tu utilises cela.
$_FILES['userfile']['type']

Qui te retourne Le type MIME du fichier, si le navigateur a fourni cette information (ex : image/gif).