IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Validation d'un formulaire


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 22
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 713
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 713
    Par défaut
    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

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 22
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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!

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 713
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 713
    Par défaut
    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

  5. #5
    Membre éprouvé Avatar de BGDC
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 102
    Par défaut
    Salut,

    et si tu faisais un echo de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 22
    Par défaut
    J'obtiens text/plain

  7. #7
    Membre éprouvé Avatar de BGDC
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 102
    Par défaut
    Re: Pour moi, il y a juste l'extension du fichier dans $_FILES['fichier']['type'] sans le point. en fait JPG et pas .JPG

  8. #8
    Membre éclairé
    Homme Profil pro
    Responsable d'une MOE bancaire
    Inscrit en
    Juillet 2003
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'une MOE bancaire

    Informations forums :
    Inscription : Juillet 2003
    Messages : 261
    Par défaut
    je crois que t'as pas pris le temps de lire ce que mathieu t'as ecris!!
    pour extraire l'extention c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_FILES['fichier']['name']
    qu'il faut utiliser et non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_FILES['fichier']['type']
    Enfin, tu peux tjs essayer!!
    Par contre tu peux laisser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_FILES['fichier']['type']
    pour comparer le type mime de ton fichier uploadé

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 22
    Par défaut
    oui merci !
    Si j'ai vu et j'ai revu mon code, merci de ta remarque en me basant sur le $typemime
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 03/04/2006, 10h42
  2. Javascript : Empecher la validation d'un formulaire
    Par otb82 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/01/2006, 10h46
  3. Ouvrir une popup lors de la validation d'un formulaire
    Par pod1978 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 23/11/2005, 16h47
  4. Vérification de validation d'un formulaire
    Par tom06440 dans le forum Langage
    Réponses: 8
    Dernier message: 21/09/2005, 15h29
  5. Réponses: 11
    Dernier message: 16/09/2004, 12h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo