le 19 Juin participez à Drupagora

Code PHP, Upload et envoi fichier mail

Nyco-
Invité n'ayant pas de compte PHPfrance

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 :)

[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);

?>

[/php]

ViPHP
ViPHP | 3607 Messages

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 ;)

Nyco-
Invité n'ayant pas de compte PHPfrance

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-
Invité n'ayant pas de compte PHPfrance

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 ?

[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';
}
}
}

?>

[/php]