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 18/07/2011, 18h12   #1
Invité de passage
 
Homme
Intégrateur Web
Inscription : juillet 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Intégrateur Web
Secteur : Communication - Médias

Informations forums :
Inscription : juillet 2011
Messages : 9
Points : 0
Points : 0
Par défaut PHPmailer : impossible de joindre un fichier

Salut à tous, mes excuses si je poste ce premier post dans la mauvaise catégorie
Etant limité en php (je me sers essentiellement de 'echo' et include pour générer du html), et en l'absence de programmeur, je bloque sur un formulaire utilisant phpMailer.

A un formulaire mail fonctionnel, on m'a demandé d'ajouter 2 champs input type "file", pour uploader des fichiers.

Les données de ce formulaire sont contrôlées par un fichier javascript, qui envoie ensuite les données à un fichier mailer.php.
Ce fichier php utilisant phpmailer, j'ai cherché depuis quelques jours tutos , exemples et topics qui pourraient m'aider, en vain... Le problème étant que toutes les données du formulaires sont transmises correctement, sauf les pièces jointes (à noter que le contenu des input type files est bien transmis au fichier mailer.php >> un echo me renverra par exemple "test.doc". )
J'utilise les 2 lignes suivantes :

Code :
1
2
3
 
$mail->AddAttachment($post_cv);
$mail->AddAttachment($post_motiv);
Par contre, aucune trace de fichier joint à la réception du mail, et pourtant aucune erreur signalée par mailer.php non plus.

Je ne suis pas sûr d'être clair, donc au besoin, je peux vous transmettre les fichiers, avant d'aller me pendre :

Merci par avance de votre pitié pour un boulet de php
petipain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2011, 21h11   #2
Modérateur
 
Avatar de Vil'Coyote
 
Développeur Web
Inscription : février 2008
Messages : 3 305
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : février 2008
Messages : 3 305
Points : 4 485
Points : 4 485
recevoir le contenu "caractère" d'un champs uploader ne veut pas dire que ce dernier est bien envoyé à ton serveur. tu peut montrer le code que tu utiliser pour réceptionner ton fichier uploadé?
Vil'Coyote est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 08h31   #3
Invité de passage
 
Homme
Intégrateur Web
Inscription : juillet 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Intégrateur Web
Secteur : Communication - Médias

Informations forums :
Inscription : juillet 2011
Messages : 9
Points : 0
Points : 0
Salut Vil'Coyote

côté html :
Code :
<input type="file" name="post_motiv" value="" onchange="check_extension(this.value);" class="file" /><br />
côté javascript :
Code :
1
2
var post_cv = document.forms['form'].elements['post_cv'].value ;
data = "post_cv="+post_cv;
côté php :
Code :
1
2
3
$post_cv=htmlspecialchars($_POST['post_cv']);
$mail->AddAttachment($post_cv);
$mail->AddAttachment($post_motiv);
Voilà pour ce qui concerne la transmission de la pièce jointe C.V.
Je crois que je vois ce que tu veux dire par contenu "caractère". Ca viendrait donc d'un truc pas transmis entre javascript et php ?

Merci à toi
petipain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 13h37   #4
Modérateur
 
Avatar de Vil'Coyote
 
Développeur Web
Inscription : février 2008
Messages : 3 305
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : février 2008
Messages : 3 305
Points : 4 485
Points : 4 485
ouep donc c'est bien ce qu'il me semble tu ne reçoit pas tes fichier. tu récupère le nom mais aucunement le fichier en tant que tel dans ton code php. tu devrais regarder le tuto.

http://antoine-herault.developpez.co...ls/php/upload/
Vil'Coyote est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/07/2011, 15h14   #5
Invité de passage
 
Homme
Intégrateur Web
Inscription : juillet 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Intégrateur Web
Secteur : Communication - Médias

Informations forums :
Inscription : juillet 2011
Messages : 9
Points : 0
Points : 0
ben en fait d'après les tutos phpMailer, la fonction AddAttachment suffit :
elle fait appel à une grosse fonction de la classe phpMailer qui doit s'occuper du traitement du fichier (cf. pièce jointe)

Je vais tenter d'appliquer le tuto, mais est-ce que je risque pas d'avoir des conflits avec des fonctions déjà existantes dans cette classe phpMailer ?


Edit : après essai, l'utilisation du script d'upload du tuto me renvoie une erreur :
Echec de l'upload

A part ça, le mail lui-même a l'air d'être bien envoyé... En fait je patauge de plus en plus
Fichiers attachés
Type de fichier : php class.phpmailer.php (57,7 Ko, 0 affichages)
petipain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/07/2011, 11h59   #6
Invité de passage
 
Homme
Intégrateur Web
Inscription : juillet 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Intégrateur Web
Secteur : Communication - Médias

Informations forums :
Inscription : juillet 2011
Messages : 9
Points : 0
Points : 0
je poursuis donc mes tentatives...

cette fois en remplaçant le fichier class.phpmailer.php par l'avant-dernière version, 5.1.

Cette fois, une erreur un peu plus explciite peut-être concernant le problème d'upload :

Citation:
Fatal error : Uncaught exception 'phpmailerException' with message 'Could not access file: test.doc' in /var/www/######/mailer/class.phpmailer.php:1348
Stack trace:
#0 /var/www/######//mailer/mailto_candidatures.php(94): PHPMailer-&gt;AddAttachment('test.doc')
#1 {main}
thrown in <b>/var/www/######//mailer/class.phpmailer.php</b> on line <b>1348</b><br />
Donc après vérification du phpinfo, le "upload_tmp_dir" est renseigné en tant que "/tmp"

Je patauge toujours, mais l'erreur change...
petipain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 15h53   #7
Invité de passage
 
Homme
Intégrateur Web
Inscription : juillet 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Intégrateur Web
Secteur : Communication - Médias

Informations forums :
Inscription : juillet 2011
Messages : 9
Points : 0
Points : 0
Alors effectivement, le fichier n'est pas uploadé...
Il semblerait que le fichier javascript qui contrôle le formulaire intercepte les données.

Le truc qui me rend fou, c'est que dans le fichier php,
Code :
$fichier = basename($_FILES['post_cv']['name']);
est bien renseigné

Mais si je fais un isset sur
...le isset est négatif !

J'ai l'impression que le fichier javascript est la cause de la perte de données...
petipain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 15h59   #8
Modérateur
 
Avatar de Vil'Coyote
 
Développeur Web
Inscription : février 2008
Messages : 3 305
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : février 2008
Messages : 3 305
Points : 4 485
Points : 4 485
as tu essayé sans tes controle javscript histoire d'être sur ?
Vil'Coyote est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/08/2011, 08h39   #9
Invité de passage
 
Homme
Intégrateur Web
Inscription : juillet 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Intégrateur Web
Secteur : Communication - Médias

Informations forums :
Inscription : juillet 2011
Messages : 9
Points : 0
Points : 0
Oui, et justement, l'erreur change :
on passe à

Citation:
html5-cheat-sheet.pdf
Warning: move_uploaded_file(/tmphtml5-cheat-sheet.pdf) [function.move-uploaded-file]: failed to open stream: Permission denied in /var/www/mailto_candidatures.php on line 60

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpzwyTeg' to '/tmphtml5-cheat-sheet.pdf' in /var/www/mailer/mailto_candidatures.php on line 60
Echec de l'upload !Message envoyé!
Donc apparemment, même si ça ne fonctionne pas, cette fois-ci les fichiers que je tente d'uploader sont bien reconnus en tant que fichiers.


Edit : et pour précision, le mail arrive bien avec les fichiers joints, mais ils ont des noms du genre : phpTeyhz et sont illisibles.

Ça voudrait dire qu'il y a un problème au niveau du javascript et au niveau du php...
petipain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 12h07   #10
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
Le problème se trouve au niveau de ton formulaire qui n'envoi pas correctement les fichiers.
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 08h18   #11
Invité de passage
 
Homme
Intégrateur Web
Inscription : juillet 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Intégrateur Web
Secteur : Communication - Médias

Informations forums :
Inscription : juillet 2011
Messages : 9
Points : 0
Points : 0
Après avoir eu un entretien avec l'hébergeur, il semblerait qu'un problème existe au niveau du dossier /tmp et des autorisations. D'ailleurs, au moment de l'upload, l'erreur a changé :

la fonction move_uploaded_file ne pose apparemment plus problème, mais j'ai ceci :

Citation:
Mailer Error: File Error: Could not open file: /tmp/phpscqc6Y
Pour l'instant je laisse le javascript de côté pour être sûr que le mail est bien envoyé (merci Vil Coyote

Edit : après changement du dossier cible à l'aide de la fonction :
Code :
getcwd().DIRECTORY_SEPARATOR;
Ca fonctionne !
la partie php est donc ok.

Retour donc à la partie javascript pour les contrôles du script
petipain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 15h54   #12
Invité de passage
 
Homme
Intégrateur Web
Inscription : juillet 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Intégrateur Web
Secteur : Communication - Médias

Informations forums :
Inscription : juillet 2011
Messages : 9
Points : 0
Points : 0
En fait, donc, j'en reviens au même :

Un ami m'a dit que "l'upload était impossible en Ajax" (apparemment, le fichier javascript qui contrôle les données du formulaire, c'est de l'Ajax)
et m'a conseillé un tuto :
http://www.ajaxf1.com/tutorial/ajax-...-tutorial.html

Après presque une journée de galère, je crois comprendre que ce tuto ne permet que d'afficher un gif pendant l'upload du fichier.
Ce qui me ramène à l'erreur d'origine : ce fichier javascript empêche l'upload... La fonction move_uploaded_file renvoie à nouveau false.

Existe-t-il un moyen d'envoyer les $_FILES directement au fichier php mailer, pendant que le fichier js se contente de contrôler les autres champs ?

Ca paraît peut-être débile comme question, mais là, je ne sais plus dans quelle direction chercher.
petipain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 10h00   #13
Invité de passage
 
Homme
Intégrateur Web
Inscription : juillet 2011
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Intégrateur Web
Secteur : Communication - Médias

Informations forums :
Inscription : juillet 2011
Messages : 9
Points : 0
Points : 0
la suite des tests, selon les conseils d'un ami :

J'ai essayé de placer un autre submit dans mon formulaire, destiné à uploader les fichiers avant l'envoi, en utilisant le système d'upload ajax mentionné dans mon post d'hier.

Ca uploade bien !

Le mail est bien envoyé !

Par contre et bien évidemment, les pièces jointes ne sont pas jointes au mail...
petipain est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h16.


 
 
 
 
Partenaires

Hébergement Web