Page 1 sur 1

Fonctions exclusion / inclusion dans un formulaire avec envo

Posté : 01 avr. 2008, 16:24
par Chan Paul
Bonjour,

je fais face à un problème de formulaire, au niveau de l'envoi de document attaché.

Cette fonction, je ne l'ai pas codée moi même, je n'ai pas le niveau pour celà.

Théoriquement, la fonction doit vérifier le type de document attaché (limité à : doc, docx, rtf, jpg, pdf et odt), et si celui-ci convient, stocker ce fichier dans un dossier sur le serveur.

Parallèlement, le serveur envoie un mail à un utilisateur désigné, avec (en plus des champs remplis par l'expéditeur) un lien vers le document "à télécharger".

Au moment des tests, seuls les types de fichiers pdf, docx et odt s'avèrent accessibles par lien dans le mail. Les autres formats de fichiers ne laissent apparaître aucun lien (bien que les fichiers soient bel et bien sur le serveur).

De plus, par acquis de conscience, j'ai effectué un test avec un document xlsx, théoriquement refusé. Celui-ci passe sans générer de message d'erreur à l'envoi, et fait apparaître un lien dans le mail.

Voici le code de ma page d'envoi formulaire :
<?php

if ($_POST['form_submitter'] == 'Envoyer'){

echo '<a name="formulaire"></a>';

	$dest_email		=	'[email protected]';
	$exp_nom		=	utf8_decode(stripslashes($_POST['nom']).' '.stripslashes($_POST['prenom']));
	$exp_email		=	utf8_decode(stripslashes($_POST['email']));
	$exp_titre		=	utf8_decode(stripslashes($_POST['titre']));

	if($_POST['telephone'] != '') {
	$exp_tel		=	'<br />T&eacute;l&eacute;phone: '.utf8_decode(stripslashes($_POST['telephone'])).'<br />';
	}

	if($_POST['emploi'] != '') {
	$exp_emploi		=	'<br />Emploi recherch&eacute;: '.utf8_decode(stripslashes($_POST['emploi'])).'<br />';
	}
	
	$exp_message	=	ucfirst($exp_nom).' '.ucfirst($exp_prenom).''
	.$exp_emploi.''
	.$exp_tel.'
	Message:
	<br /><br />
	'.utf8_decode(nl2br(stripslashes($_POST['message'])));

/*	if($_POST['fichier'] != '')
		{*/
		$content_dir = '/home.10.16/XXXX/www/cv_repository/'; // dossier où sera déplacé le fichier
	    $tmp_file = $_FILES['fichier']['tmp_name'];
		
	    if( !is_uploaded_file($tmp_file) )
    		{
			$condition_fichier	=	'not_up';
			}

			$type_file = $_FILES['fichier']['type'];
			if( !strstr($type_file, 'rtf') && !strstr($type_file, 'doc') && !strstr($type_file, 'docx') && !strstr($type_file, 'pdf') && !strstr($type_file, 'odt') && !strstr($type_file, 'jpg') )
				{
				$condition_fichier	=	'invalid';
				}

			$name_file = date('Ymdhis').'-'.$_FILES['fichier']['name'];

			if( preg_match('#[\x00-\x1F\x7F-\x9F/\\\\]#', $name_file) )
				{
				$condition_fichier	=	'invalide';
				}
			else if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
				{
				$condition_fichier	=	'not_up';
				}
		
		$exp_a	=	$content_dir.$name_file;
		
		if($exp_a	!=	$content_dir)
			{
			if($condition_fichier != 'not_up' && $condition_fichier != 'invalid' )
				{
				$exp_message	.=	'<br /><br />
				<a href="http://www.XXXXX.com/cv_repository/'.rawurlencode($name_file).'">T&eacute;l&eacute;charger le CV joint</a>';
				}
			}
/*
		}*/

	if($exp_nom != '' && $exp_email != '') {
	$headers ='From: "'.$exp_nom.'"<'.$exp_email.'>'."\n";
	$headers .='Reply-To: '.$exp_email."\n";
	$headers .='Content-Type: text/html; charset="iso-8859-1"'."\n";
	$headers .='Content-Transfer-Encoding: 8bit';

	$message ='<html><head><title>'.$exp_titre.'</title></head><body>'.$exp_message.'</body></html>';

	if(mail($dest_email, $exp_titre, $message, $headers))
		{
		$send_success	=	'yes';
		echo '<br /><br /><h3>Votre message a &eacute;t&eacute; envoy&eacute; ! Merci.</h3><br /><br />';
		}
	else
		{
		$send_success	=	'no';
		echo 'Le message n\'a pu &ecirc;tre envoy&eacute;';
		}
	}
}
?>
Je suis coincé à ce stade. Sachant que mon niveau en php ne me permet pas de comprendre d'où vient le soucis, c'est rageant.

Quelqu'un peut-il m'aider ?

D'avance merci.

paul

Posté : 01 avr. 2008, 16:43
par Ryle
Y a plusieurs p'tites choses qui ne vont pas dans ton script...

Tu testes en fait la valeur de $type_file qui contient le type mime du fichier (lorsque celui-ci est spécifié par le navigateur). Le type mime est généralement de la forme "image/gif" et n'est pas nécessairement lié à l'extension du fichier qui serait ici ".gif" (dont le rôle est uniquement de spécifier à l'os quel logiciel utiliser pour l'ouvrir)

Par ailleurs, tu as plein de tests pour vérifier si le fichier a bien été uploadé, a un type mime valide, et j'en passe, mais dans tous les cas tu vas faire appel à la fonction move_upload_file() pour déplacer le fichier... la logique voudrait que si le fichier n'a pas été uploadé ou qu'il ne respecte le format attendu, tu le laisses mourir de sa belle mort dans le répertoire temporaire :)

Attention également aux valeurs que tu utilises pour $condition_fichier, un coup c'est 'invalid', l'autre c'est 'invalide' du coup les tests suivants ne vont pas tous fonctionner...

Posté : 01 avr. 2008, 17:27
par Chan Paul
Merci à toi Ryle,

je vais donc aller rechercher des ressources pour :

- tester le type mime
- tester si le fichier a bien été uploadé
- d'autres tests éventuels (poids du fichier peut-être)

qui constitueront des conditions avant de lancer la fonction move_upload.

et je vais également corriger la valeur 'invalid'.

Vu d'ici ça a l'air insurmontable mais j'ai pas peur ^^

Je reviendrai ici même poster la solution avec [résolu] si possible, ou je viendrai parler à nouveau de mes soucis.

encore merci pour la clarté de ta réponse.

paul