Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/12/2006, 10h18   #1
Invité de passage
 
Inscription : mars 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 22
Points : 2
Points : 2
Par défaut Validation d'un formulaire

Bonjour à tous
Je sais que les questions doivent être posées tous les jours.
J'ai fait un formulaire, mais la difficulté qu'il représente pour moi et que j'y intègre l'envoi de pièce jointe.
J'aimerai, si possible, que vous m'aidiez à le valider, car j'ai l'impression que mes vérifs semblent ne pas être correctes !
Je vous mets un bout de mon code et merci bcp de votre aide :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<?php 
$success=false;
$message="";
$verif="!^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-zA-Z]{2,4}$!"; // INIT DES VARIABLES 
if(!isset($_POST['societe'])) $societe=""; else $societe=htmlentities(addslashes($_POST['societe'])); 
...
if(!isset($_FILES['fichier'])) $fichier=""; else $fichier=$_FILES['fichier'];
 
$name_file = $_FILES['fichier']['name']; 
$source = $_FILES['fichier']['tmp_name'];
$typemime = $_FILES['fichier']['type']; 
$taille = $_FILES['fichier']['size'];
 
// extensions autorisées
$extensions_ok = array('txt', 'doc', 'rtf', 'pdf'); 
// la taille maximale du fichier en octets, ici 2mo 
$taille_max = 2097152; 
 
move_uploaded_file($source, "./".$name_file); 
 
//----------------------------------
// Construction de l'entête
//----------------------------------
if (($fichier!="")&&($tel!="")&&($nom!="")&&($prenom!="")&&($mail!="")&&($sujet!="")) { //si champs vides
if(($mail) && (preg_match($verif, $mail))){ // si le mail est bon
if( !in_array( substr(strrchr($_FILES['fichier']['name'], '.'), 1), $extensions_ok ) ) {  //si bon format
if( file_exists($source) && $taille > $taille_max) { // si taille autorisée
if($_FILES['fichier']!="")
{
$boundary = "-----=".md5(uniqid(rand()));
$header = "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
$header .= "\r\n";
 
$msg = "Je vous informe que ceci est un message au format MIME 1.0 multipart/mixed.\r\n";
 
$msg .= "--$boundary\r\n";
 
$msg .= "Content-Type: $typemime; charset=\"iso-8859-1\"\r\n";
$msg .= "Content-Transfer-Encoding:8bit\r\n";
$msg .= "\r\n";
$msg .= "Raison sociale : $societe";
$msg .= "\r\n";
$msg .= "Nom : $nom";
$msg .= "\r\n";
$msg .= "Prénom : $prenom";
$msg .= "\r\n";
$msg .= "Statut : $sujet";
$msg .= "\r\n";
$msg .= "Adresse : ".$_POST['adresse1']."";
$msg .= "\r\n";
$msg .= "Téléphone : $tel";
$msg .= "\r\n";
$msg .= "Portable : $portable";
$msg .= "\r\n";
$msg .= $_POST['message1'];
$msg .= "\r\n";
 
if($name_file!="")
{
$file = $name_file;
$fp = fopen($file, "rb");  
$attachment = fread($fp, filesize($file));
fclose($fp);
 
$attachment = chunk_split(base64_encode($attachment));
 
 
$msg .= "--$boundary\r\n";
$msg .= "Content-Type: $typemime; name=\"$file\"\r\n";
$msg .= "Content-Transfer-Encoding: base64\r\n";
$msg .= "Content-Disposition: attachment; filename=\"$file\"\r\n";
$msg .= "\r\n";
$msg .= $attachment . "\r\n";
$msg .= "\r\n\r\n";
$msg .= "--$boundary--\r\n";
}
 
$destinataire = 'toto@neuf.fr';
$expediteur   = $_POST['mail'];
$reponse      = $expediteur;
 
mail($destinataire, 'Envoi de fichier', $msg,
     "Reply-to: $reponse\r\nFrom: $expediteur\r\n".$header);
 
}
 
if($name_file!="")
{
unlink($name_file);
}
print("<br>\n");
 
 
		//----------------------------------
		// Construction de l'entête
		//----------------------------------
		$success=true;
		$message =  "Votre demande $prenom $nom a &eacute;t&eacute; post&eacute;e avec succ&egrave;s ! <br /> 
		Elle sera trait&eacute;e dans les meilleurs d&eacute;lais.<br /> 
		Nous vous remercions de votre visite !";
		}else{
		$sucess = false;
		$message = 'Extension non autorisée !';  
		}
		}else{
		$sucess = false;
		$message = 'Votre fichier doit faire moins de 2mo !'; 
		}
		}else{
		$verif=false;
		$message= "Cette adresse Email n'est pas valide";
		}
		}else{ 
		$success = false;
		$message = "Merci de remplir les champs obligatoires";
		}
 
?>
Le formulaire semble partir quand meme ou alors bloque sur le meme message d'erreur : taille sup à 2mo
merci !
coxine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2006, 11h02   #2
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
essaye de simplifer ton formulaire en testant uniquement un champ et ensuite, au fur et à mesure que ça fonctionne, rajoute les autres vérifications une après l'autre et teste les à chaque fois
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2006, 11h21   #3
Invité de passage
 
Inscription : mars 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 22
Points : 2
Points : 2
merci de ta réponse!
en fait ce qui bloque c'est la vérification d'extension de fichier
J'ai apporté qques modifs, les voici :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$name_file = $_FILES['fichier']['name'];  
$source = $_FILES['fichier']['tmp_name']; 
$typemime = $_FILES['fichier']['type'];  
$taille = $_FILES['fichier']['size']; 
 
// extensions autorisées 
$extensions_ok = array('txt', 'csv', 'doc', 'rtf', 'pdf');  
// Configurez la taille maximale du fichier en octets, ici 2mo  
$taille_max = 2097152;  
// vérifications  
    if( !in_array( substr(strrchr($_FILES['fichier']['type'], '.'), 1), $extensions_ok ) )  
    {  
        // message d'erreur 
        $message = 'Extension non autorisée !';  
    }  
    elseif( file_exists($source) && $taille > $taille_max)  
    {  
        // réponse d'erreur 
        $message = 'Votre fichier doit faire moins de 2mo !';  
        // ----------------- Fin configuration --------------------  
    }  
move_uploaded_file($source, "./".$name_file);  
 
//---------------------------------- 
// Construction de l'entête 
//---------------------------------- 
if ($name_file!=""&&$tel!=""&&$nom!=""&&$prenom!=""&&$mail!=""&&$sujet!="") { //si champs non vides 
if($mail && preg_match($verif, $mail)){ // si le mail est bon 
 
if($_FILES['fichier']!="") // si le fichier existe 
{
Mais si je veux envoyer un .jpg, ça passe quand meme
Une idée de ce qui ne va pas ?
merci!
coxine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2006, 11h37   #4
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
je crois que tu utilise "type" pour analyser l'extension au lieu de "name"

n'oublie pas qu'un pirate peux mettre par exemple une image avec une extension "pdf", il faudra que tu vérifies que celà ne possera pas de problème à l'utilisation de ce fichier
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2006, 11h38   #5
Membre habitué
 
Avatar de BGDC
 
Inscription : septembre 2003
Messages : 102
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 102
Points : 108
Points : 108
Salut,

et si tu faisais un echo de

Code :
substr(strrchr($_FILES['fichier']['type']
histoire de voir deja ce que tu as dedans ?

Edit: Pour moi, il y a juste l'extension du fichier dans $_FILES['fichier']['type'] sans le point.
BGDC est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2006, 12h59   #6
Invité de passage
 
Inscription : mars 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 22
Points : 2
Points : 2
J'obtiens text/plain
coxine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2006, 13h33   #7
Membre habitué
 
Avatar de BGDC
 
Inscription : septembre 2003
Messages : 102
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 102
Points : 108
Points : 108
Re: Pour moi, il y a juste l'extension du fichier dans $_FILES['fichier']['type'] sans le point. en fait JPG et pas .JPG
BGDC est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2006, 13h54   #8
Membre actif
 
Inscription : juillet 2003
Messages : 257
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 257
Points : 162
Points : 162
je crois que t'as pas pris le temps de lire ce que mathieu t'as ecris!!
pour extraire l'extention c'est
Code :
$_FILES['fichier']['name']
qu'il faut utiliser et non
Code :
$_FILES['fichier']['type']
Enfin, tu peux tjs essayer!!
Par contre tu peux laisser
Code :
$_FILES['fichier']['type']
pour comparer le type mime de ton fichier uploadé
SegmentationFault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2006, 16h29   #9
Invité de passage
 
Inscription : mars 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 22
Points : 2
Points : 2
oui merci !
Si j'ai vu et j'ai revu mon code, merci de ta remarque en me basant sur le $typemime
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$name_file = $_FILES['fichier']['name'];  
$source = $_FILES['fichier']['tmp_name']; 
$taille = $_FILES['fichier']['size']; 
$typemime = $_FILES['fichier']['type'];  
$error = $_FILES['fichier']['error']; 
 
if($error>0) 
{ 
    echo 'problème : '; 
    switch ($error) 
    { 
    case 1 : echo 'Fichier trop volumineux';break; 
    case 2 : echo 'fichier trop volumineux';break; 
    case 3 : echo 'fichier non transféré';break; 
    case 4 : echo 'fichier non téléchargé';break; 
    } 
  exit; 
 } // fin verifications 
if($typemime !='text/plain') 
    { 
    echo 'mauvais format de fichier'; 
    exit; 
    } 
  move_uploaded_file($source, "./".$name_file);    
 
  if(isSet($_FILES['fichier'])){ // si le fichier a bien été copié  
 
    if ($name_file!=""&&$tel!=""&&$nom!=""&&$prenom!=""&&$mail!=""&&$sujet!="") { //si champs non vides 
 
        if($mail && preg_match($verif, $mail)){ // si le mail est bon
Et maintenant tout fonctionne bien !
J'ai juste un pb avec l'envoi du mail, lorsque le format est en pdf, il y a une seconde pièce jointe...je crois que cela est du à la construction de ma fonction mail()
Merci à tous!
coxine est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h37.


 
 
 
 
Partenaires

Hébergement Web