Forum d'entraide PHPFrance

Venez poser vos questions PHP, MySQL, HTML, CSS, Javascript, Gestion de serveurs à la communauté PHPfrance

Vers le contenu

» Masquer les résultats de la recherche

Recherche dynamique PHPfrance

  1. Effectuez une recherche, les résultats s'afficheront dynamiquement ici.

Code PHP, Upload et envoi fichier mail

Pour ceux qui débutent en PHP.

Code PHP, Upload et envoi fichier mail

Messagepar Nyco- 14 Oct 2010, 22:59

Bonsoir,

Voilà des jours que j'essaye de me familiariser avec le PHP souhaitant réaliser un envoi par mail d'une PJ à partir d'un formulaire HTML. Il va s'en dire que je galère en tant que débutant :lol:

J'ai cru comprendre qu'il fallait que je réalise deux actions : Uploader le fichier dans un dossier / Récupérer le fichier, le lire, le coder et l'envoyer par mail avec du texte.

J'ai donc tenté de faire un code qui réalise ces deux opérations (dans le même fichier) mais je suis complètement largué. J'ai des messages d'erreurs m'indiquant que j'ai une erreur d'upload. Comme si le fichier n'était pas là où il devrait se trouver ... Je commence à être à court de solutions alors si vous pouviez me donner un coup de pouce ça m'aiderait beaucoup.

La première partie concerne l'upload, la seconde le mail et son envoi. J'ai supprimé les vérifications de champs que j'avais codé (et qui marchaient) parce que je me perdait dans toutes ces lignes ...

En espérant que quelqu'un puisse m'aider et accepte de passer un peu de temps à corriger mes erreurs de débutant :oops:

Merci d'avance :)

Syntaxe: [ Télécharger ] [ Masquer ]
Code php
<?php

$dossier = 'Photo/';
$fichier = basename($_FILES['Photo']['name']);
$taille_maxi = 100000;
$taille = filesize($_FILES['Photo']['tmp_name']);
$extensions = array('.bmp', '.jpg', '.jpeg');
$extension = strrchr($_FILES['Photo']['name'], '.');

//Début des vérifications de sécurité
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
     $erreur = 'Vous devez uploader un fichier de type bmp, jpg ou jpeg.';
}
if($taille>$taille_maxi)
{
     $erreur = 'Le fichier est trop volumineux.';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur sur l'upload
{
     //On formate le nom du fichier ici...
     $fichier = strtr($fichier,
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
     if(move_uploaded_file($_FILES['Photo']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
     {
          echo 'Upload effectué avec succès !';
     }
     else //Sinon (la fonction renvoie FALSE).
     {
          echo 'Echec de l\'upload !';
     }
}
else
{
     echo $erreur;
}
?>

<?php

    $boundary = "-----=".md5(uniqid(rand()));

    $header = "MIME-Version: 1.0\r\n";
    $header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
    $header .= "Content-Transfer-Encoding: utf-8\r\n";
    $header .= "\r\n";
    $header .= "Content-Type: text/plain; charset=utf-8\r\n";

    $sujet = "Demande de publication Annonce - Petites Annonces CE SISTM";
   
    //----------------
    // Le texte
    //----------------

    $texte .= "--$boundary\r\n";

    $texte .= "Content-Type: text/html; charset=utf-8\n";
    $texte .= "Content-Transfer-Encoding: utf-8\r\n";
    $texte .= "\r\n";

    $texte .= "DEMANDE DE VALIDATION D'ANNONCE\n\n";
    $texte .= "Date : $date\n";
    $texte .= "Heure : $heure\n\n";
    $texte .= "------------------------------------------\n\n";
    $texte .= "Nom : $Nom\n";
    $texte .= "Prénom : $Prenom\n";
    $texte .= "Secteur-Centre : $Secteur, $Centre\n\n";
    $texte .= "------------------------------------------\n\n";
    $texte .= "Rubrique : $Rubrique\n";
    $texte .= "Intitulé de l'objet : $Intitule\n";
    $texte .= "Description : $Description\n";
    $texte .= "Etat : $Etat\n\n";
    $texte .= "------------------------------------------\n\n";
    $texte .= "Prix : $Prix\n";
    $texte .= "Moyen de Paiement : $sqlPaiement\n\n";
    $texte .= "Autre Paiement : $AutrePaiement\n";
    $texte .= "Mode de Livraison : $sqlLivraison\n\n";
    $texte .= "Autre Livraison : $AutreLivraison\n";
   
    $texte .= "\r\n\r\n";

    //---------------------------------
    // Le fichier
    //---------------------------------

       
    $file = "Photos/$fichier";
       
    if (file_exists($file))
    {        
    $fp = fopen($file, "b");  
    $attachment = fread($fp, filesize($file));
    fclose($fp);

    $attachment = chunk_split(base64_encode($attachment));

    $texte .= "--$boundary\r\n";

    $texte .= "Content-Type: image/jpeg; name=\"$file\"\r\n";
    $texte .= "Content-Transfer-Encoding: base64\r\n";
    $texte .= "Content-Disposition: attachment; filename=\"$file\"\r\n";
    $texte .= "\r\n";
    $texte .= $attachment . "\r\n";
    $texte .= "\r\n\r\n";
}

     else
     {
          echo 'Erreur upload fichier';
     }

    $texte .= "--$boundary--\r\n";
   
    $destinataire = "xxx@xxxx.xx";

    mail($destinataire, $sujet, $texte, $header);
   
?>

 
Nyco-
 

Re: Code PHP, Upload et envoi fichier mail

Messagepar jojolapine 15 Oct 2010, 09:51

Bonjour,

Pour commencer, pourquoi ne pas séparer les deux étapes?
Voici un tutoriel assez bien fait: http://www.siteduzero.com/tutoriel-3-37 ... laire.html
Une que tu sauras faire ça, tu n'auras aucun mal à trouver ton fichier pour le mettre en pièce jointe ;)
jojolapine
ViPHP
ViPHP
 
Messages: 3581
Inscription: 01 Fév 2006, 17:34

Re: Code PHP, Upload et envoi fichier mail

Messagepar Nyco- 15 Oct 2010, 20:51

Bonsoir jojolapine,

Merci pour ta réponse ! J'ai déjà lu en long, en large, ce tuto pourtant très bien fait ... Mais j'ai du mal à avoir une vision globale de ce que je dois faire. J'envisage d'avoir 2 fichiers .php, un pour l'upload (directement associé au bouton submit du formulaire) et un autre pour l'envoi du mail mais je ne sais pas comment lancer l'envoi une fois l'upload terminé ... Je ne trouve pas de moyen pour faire un lien entre les deux ...

Je débute et c'est franchement abstrait quand on débarque :roll:
Nyco-
 

Re: Code PHP, Upload et envoi fichier mail

Messagepar Nyco- 15 Oct 2010, 22:11

Petit complément, j'ai suivi les conseils et je teste uniquement l'upload dans un premier temps, avec le bout de code ci-dessous.

J'arrive à transférer les fichiers dans le répertoire, mais à quel moment sont-ils supprimés ? (à code avec l'envoi du mail ?)

J'ai aussi un problème avec les extensions. J'ai limité aux .jpg, .jpeg et .bmp, or quand je teste un .pdf par exemple, il se charge indéfiniment et fini par aboutir à une page blanche vierge, étonnant non ?

Syntaxe: [ Télécharger ] [ Masquer ]
Code php
<?php

    $dossier = 'Photos/';
    $maxsize = '1048576';


    if ($_FILES['mon_fichier']['error'] > 0)
    {
        $erreur = 'Erreur lors du transfert';
    }
    else
    {
        if ($_FILES['mon_fichier']['size'] > $maxsize)
        {
            $erreur = 'Erreur : Le fichier est trop gros.';
        }
        else
        {
            $extensions_valides = array('jpg','jpeg','bmp');
            $extension_upload = strtolower(  substr(  strrchr($_FILES['mon_fichier']['name'], '.'),1));
                                           
            if (in_array($extension_upload,$extensions_valides))
            {
                   
               
                        $nom = "{$_FILES['mon_fichier']['name']}.{$extension_upload}";
                        $resultat = move_uploaded_file($_FILES['mon_fichier']['tmp_name'],$dossier.$nom);
                   
                        if ($resultat)
                        {
                            echo 'Transfert réussi';

                        }
                        else
                        {
                            echo 'Echec du transfert';
                        }
                   
           
            }    
            else
            {
                echo 'Erreur : Sélectionnez un fichier de type .bmp ou .jpg';
            }
        }
    }

?>

 
Nyco-
 


Retourner vers PHP débutant

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 12 invités