Probleme pour la creation d'un upload
Hors ligneDraedalus Le 05/07/2007 à 17:05 Profil de Draedalus Configuration de Draedalus

Bonjour, je me permets de poster ici car je suis malheureusement frustré dans mes recherches...

Apres avoir créer le site pour la société où je usis en stage, j'ai crée un formulaire de demande de devis [url=www.enrdiffusion.com/devis.php]devis en ligne[/url]
Après quelques semaines (oui j'sais, j'ai du mal pour le php donc j'apprends ^^') j'ai fini par parvenir à mes fins. A savoir traiter le formulaire en php et envoyer les informations saisies par email.

Maintenant j'aimerais ajouter une fonction d'upload à la demande de devis qui était souvent utilisée sur le précédent formulaire. Mais bon, comme tout bon débutant, je rencontre encore des difficultes que je n'arrive pas à résoudre malgré des conseils et aides qui n'ont pu corriger les soucis.

Je me permets de poster le code ci-dessous pour ce qui est de l'envoi et du traitement du fichier.

page devis2.php (envoie de l'image)


<input type="file" name="upload" size="20" value="<?=($_SESSION['upload']? $_SESSION['upload']: ""); ?>">
       <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />


page devis3.php (traitement des donnes saisies dans devis2.php)



<?php
ini_set
('upload_tmp_dir'$_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR 'tmp' DIRECTORY_SEPARATOR);
[...]
//champs upload
$_SESSION["upload"] = $_FILES["upload"];

//si un fichier est envoye
if(!empty($_FILES['upload'])) 
{
     //dossier où sera déplacé le fichier
     $content_dir 'img/devis_upload/';
     $tmp_file $_FILES['upload']['tmp_name'];
     $name_file $_FILES['upload']['name'];

     //si le fichier est upload
     if(is_uploaded_file($tmp_file))
     {
          // on vérifie son extension
          $type_file $_FILES['upload']['type'];

          if(!strstr($type_file'jpg') && !strstr($type_file'jpeg') && !strstr($type_file'png') && !strstr($type_file'gif'))
          {
               echo "Le type de fichier soumis n'est pas accepte";
               exit;
          }

          //on verifie que le nom du fichier ne pose pas de probleme au niveau de la securite
          if(preg_match('#[x00-x1Fx7F-x9F/\\]#'$name_file))
          {
               echo "Veuillez changer le nom de votre image pour des raisons de securite";
               exit;
               //ou exit("Veuillez changer le nom de votre image pour des raisons de securite");
          }     
               
          if
(!move_uploaded_file($tmp_file$content_dir $name_file))
          {
              echo "Impossible de copier le fichier dans $content_dir";
               exit;
          }
          else 
          
{
               echo "Le fichier a bien ete envoye dans $content_dir";
               exit;
          }
     }
}
?>
[...]

 <?php if(move_uploaded_file($tmp_file$content_dir $name_file))
       {
       echo 'Vous avez joint une image dans votre devis';
       }
       else 
       {
       echo 'Vous n'avez pas joint d'image dans votre devis';
       }
       ?>



Le but étant d'uploader une image qui serait par la suite envoyée en piece jointe (par mail donc) en complement des infos saisies prealablement.

Voilà le code d'erreur qui apparait lors de la tentative d'upload

Warning: move_uploaded_file(img/devis_upload/appui2.JPG) [function.move-uploaded-file]: failed to open stream: Permission denied in /home/www/4017a44ee11a13cf0358a9ad529628f5/web/devis3.php on line 149

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phprKFSp6' to 'img/devis_upload/appui2.JPG' in /home/www/4017a44ee11a13cf0358a9ad529628f5/web/devis3.php on line 149
Impossible de copier le fichier dans img/devis_upload/
--
Rien ne sert de courir, il faut partir à point. Les chiffres de l'actualité - http://draedalus.wordpress.com
Hors ligneJeanluc Le 06/07/2007 à 18:55 Profil de Jeanluc Configuration de Jeanluc

Bonsoir,
comme le dit le message: 'move_uploaded_file(img/devis_upload/appui2.JPG)...Permission denied', autrement dit, tu n'as pas les droits d'écrire dans le répertoire.
Essaye de le changer avec ton programme FTP et de mettre les droits (chmod) en écriture (Write).

Jean-Luc
Hors ligneDraedalus Le 09/07/2007 à 15:38 Profil de Draedalus Configuration de Draedalus

Merci pour ta réponse, l'upload marche correctement maintenant cependant je rencontre des difficultés et je ne sais pas si cela est du au principe des sessions (vu que je n'utilise pas de BDD).

[url=www.enrdiffusion.com/devis.php]devis en ligne[/url] donc le soucis concerne l'image en fait parce que je me demandais comment maintenant l'ajouter en pièce jointe ? je ne connais pas forcément le nom de l'image et donc j'aurais aimé la foutre en pièce jointe mais je ne vois pas du tout comment procéder (sachant que le nom de l'image m'est inconnu). J'ai pensé à la renommer parce que l'on m'a conseillé la méthode srand mais bon, j'm'y perds vite malheureusement. une idée pi-être ? et une fois renommée ? comment savoir que l'image que l'on va mettre en pièce jointe est bien celle fournie par celui qui fait la demande ?

Cordialement draedalus

merci par avance
--
Rien ne sert de courir, il faut partir à point. Les chiffres de l'actualité - http://draedalus.wordpress.com
Hors ligneJeanluc Le 09/07/2007 à 18:02 Profil de Jeanluc Configuration de Jeanluc

Bonjour,
l'envoi de pièces jointes n'est pas directement géré par php, regarde du coté de libmail.php.
Puisque tu a l'air de ne pas trop aimer les bases de donnée, tu peux éventuellement créer un fichier dont le nom est le nom/prenom de la personne et dont le contenu est le nom de l'image.
Mais je te conseille vivement de voir avec une base de donnée, tu peux y stoquer toutes les informations clientèles et c'est assez simple à manipuler.
J'espère avoir tout compris et répondu à tes questions

Jeanluc
Hors ligneDraedalus Le 10/07/2007 à 10:30 Profil de Draedalus Configuration de Draedalus

En fait il ne me reste plus que 4 jours de stage donc je n'ai vraiment pu trop le temps de tout reprendre pour une faire un devis avec BDD mais je compte m'entrainer par la suite à le faire.

Hier justement j'ai réfléchi et j'ai pensé au fait de renommer l'image en lui attribuant le nom de la personne qui fait son devis. Ce qui donnerait donc par exemple si M. Untel fait sa demande

photoUntel (sachant qu'il ne peut uploader qu'une seule image). J'ai pu lire que l'on pouvait renommer les images uploadées sur le serveur avec la fonction rename mais n'étant pas supra expert en php je viens réclamer clémence et aide . Merci!

merci pour ton info je vais aller y jeter un coup d'oeil
--
Rien ne sert de courir, il faut partir à point. Les chiffres de l'actualité - http://draedalus.wordpress.com
Hors ligneJeanluc Le 10/07/2007 à 12:12 Profil de Jeanluc Configuration de Jeanluc

rename( 'vieux_nom.jpg', 'photountel.jpg' );
Mais n'oublie pas qu'il y a beaucoup de Mr Dupont sur la planète, yu peux aussi le renomer en y incluant la date par exemple:
rename( 'vieux_nom.jpg', date("mdy").'-photountel.jpg' ); et comme ça, elle s'appelera 100707-photountel.jpg
... et pour effacer une image qui ne sert plus à rien: unlink('photountel.jpg');

A toi de voir

Jeanluc
Hors ligneDraedalus Le 10/07/2007 à 14:41 Profil de Draedalus Configuration de Draedalus

Alors j'arrive correctement à renommer mon image maintenant :)

J'ai utilisé ce code qui permet donc de lui attribuer le nom de la personne qui envoie le devis et la date comme vous me l'avez conseillé :



<?php $name_file $_SESSION['nom'] . date("dmy") . $_FILES['upload']['name'];?>

et maintenant j'essaye d'envoyer le devis avec la piece jointe mais plus rien ne marche, apres avoir appuyé sur le bouton d'envoi la redirection est correcte cependant le mail ne me parvient pas :s

je n'arrive pas à trouver l'origine du pb, est ce que cela peut venir d'un conflit ? parce j'ai trouvé le code et je l'ai modifié avec mes valeurs mais bon rien y fait

Ci-dessous le code que j'ai utilisé pour envoyer les données saisies et la pièce jointe



<?php // Destinataire 
$to "marketing@blablablou_antispam_bloublou.com"
 
//Objet
$subject "Demande de devis provenant de M./Mlle/Mme : " .$nom."\r\n";
 
// clé aléatoire de limite
$boundary md5(uniqid(microtime(), TRUE));
 
// Headers
$headers .= 'Mime-Version: 1.0'."\r\n";
$headers .= 'Content-Type: multipart/mixed;boundary='.$boundary."\r\n";
$headers .= "\r\n";
 
//Accuse de reception
X-Confirm-Reading-To$_SESSION["adresse"]."\r\n";;
 
// Message
$msg .= '--'.$boundary."\r\n";
$msg .= 'Content-type:text/plain;charset=utf-8'."\r\n";
$msg .= 'Content-transfer-encoding:8bit'."\r\n";
$msg .= 
'Coordonnees\n
nom : $nom
prenom : $prenom 
adresse : $adresse 
ville : $ville 
departement : $departement 
tel : $tel 
email : $email \n
 
L\'installation\n
type d\'installation : $choix_photovoltaique 
type d\'installation : $autre_photovoltaique Wc
type de pose : $pose_photovoltaique \n
 
Le batiment\n
type de batiment : $type_batiment 
type de batiment : $autre_batiment \n
 
La toiture \n
type de toiture : $type_toiture 
orientation toiture : $orientation_toiture 
inclinaison toiture : $inclinaison_toiture 
hauteur toiture : $hauteur_toiture 
surface de la toiture : $toiture_A m de long pour $toiture_B m de large \n
 
Le projet\n
date de projet : $delai_projet 
commentaires : $commentaires'
."\r\n";
 
// Pièce jointe
$file_name $name_file;
if (
file_exists($file_name))
{
     $file_type filetype($file_name);
     $file_size filesize($file_name);
 
     $handle fopen($file_name'r') or die('Le fichier '.$file_name.'ne peut pas etre ouvert');
     $content fread($handle$file_size);
     $content chunk_split(base64_encode($content));
     $f fclose($handle);
 
     $msg .= '--'.$boundary."\r\n";
     $msg .= 'Content-type:'.$file_type.';name='.$file_name."\r\n";
     $msg .= 'Content-transfer-encoding:base64'."\r\n";
     $msg .= $content."\r\n";

 
// Fin
$msg .= '--'.$boundary."\r\n";
 
mail($to,$subject,$msg,$headers);
header('Location: merci.html');?>


Merci en tout cas pour ta contribution
--
Rien ne sert de courir, il faut partir à point. Les chiffres de l'actualité - http://draedalus.wordpress.com
Hors ligneJeanluc Le 10/07/2007 à 20:47 Profil de Jeanluc Configuration de Jeanluc

Bonsoir,
tiens, essaye ce bout de code, ça devrait aller:



<?php 
function get_extension($filename)
{
  $parts explode('.',$filename);
   $last count($parts) - 1;
   $ext $parts[$last];
   return $ext;
}

$file_name $name_file;
$extension=get_extension($file_name);
$file_type="image/png";
if(
$extension=="gif"){$file_type="image/gif";}
else if(
$extension=="bmp"){$file_type="image/bmp";}

// Destinataire 
$to "marketing@blablablou_antispam_bloublou.com"
 
//Objet
$subject "Demande de devis provenant de M./Mlle/Mme : " .$nom."rn";
 
// clé aléatoire de limite
$boundary md5(uniqid(microtime(), TRUE));
 
// Headers
$headers  "From: $email <$email>"."rn";
$headers .= "MIME-Version: 1.0rn";
$headers .= 'Content-Type: multipart/mixed;boundary='.$boundary."rn";
$headers .= "rn";
 
//Accuse de reception
$headers .= "X-Confirm-Reading-To: ".$_SESSION["adresse"]."rn";
 
// Message
$msg "--$boundaryrn";
$msg .= "Content-Type: text/plain; charset="iso-8859-1"rn";
$msg .= "Content-Transfer-Encoding:8bitrn";
$msg .= "Coordonneesn
nom : $nom
prenom : $prenom 
adresse : $adresse 
ville : $ville 
departement : $departement 
tel : $tel 
email : $email n
 
L'installationn
type d'installation : $choix_photovoltaique 
type d'installation : $autre_photovoltaique Wc
type de pose : $pose_photovoltaique n
 
Le batimentn
type de batiment : $type_batiment 
type de batiment : $autre_batiment n
 
La toiture n
type de toiture : $type_toiture 
orientation toiture : $orientation_toiture 
inclinaison toiture : $inclinaison_toiture 
hauteur toiture : $hauteur_toiture 
surface de la toiture : $toiture_A m de long pour $toiture_B m de large n
 
Le projetn
date de projet : $delai_projet 
commentaires : $commentaires"
."rn";
 
// Pièce jointe

if (file_exists($file_name))
{
    $file_size filesize($file_name);
 
     $handle fopen($file_name'r') or die('Le fichier '.$file_name.'ne peut pas etre ouvert');
     $content fread($handle$file_size);
     $f fclose($handle);
     
     $content 
chunk_split(base64_encode($content));
     $msg .= "--$boundaryrn";
     $msg .= "Content-type:$file_type;name="$file_name"rn";
     $msg .= "Content-transfer-encoding: base64rn";
     $msg .= "Content-Disposition: inline; filename="$file_name"rn";
     $msg .= "rn";
     $msg .= $content."rn";
     $msg .= "--$boundary--rn";

// Fin

 
mail($to,$subject,$msg,$headers);
header('Location: merci.html');
?> 


Jeanluc
Hors ligneDraedalus Le 11/07/2007 à 09:15 Profil de Draedalus Configuration de Draedalus

Bonjour,

alors j'ai testé ton code et j'obtiens l'erreur suivante

Parse error: syntax error, unexpected T_STRING in /home/www/4017a44ee11a13cf0358a9ad529628f5/web/devis3.php on line 498

sachant que la ligne 498 est

$msg .= "Content-Type: text/plain; charset="iso-8859-1"rn";

Et comme je ne comprends pas tout le code corrigé je n'arrive pas à le modifier :s

De plus dans le code je remarque des "n" et j'aurais voulu savoir si c'était volontaire ou si je devais les remplacer par "\n".
Pour les "rn" je remarque les deux cas différents ci dessous
$headers  = "From: $email <$email>"."rn";
$headers .= "MIME-Version: 1.0rn";
Est-ce normal ou dois-je séparer les rn comme pour le cas du 1er header ?

Merci pour ton aide en tout cas
--
Rien ne sert de courir, il faut partir à point. Les chiffres de l'actualité - http://draedalus.wordpress.com
Hors ligneJeanluc Le 11/07/2007 à 12:19 Profil de Jeanluc Configuration de Jeanluc

corrige $msg .= "Content-Type: text/plain; charset="iso-8859-1"rn";
           en $msg .= "Content-Type: text/plain; charset="iso-8859-1" rn";

Tes n dans tes mails, je supose que c'est pour faire des retours à la ligne, a mon avis tu ne dois rien mettre ... étant donné que la mise en page est bonne sans ça ;-
Si tu écris "rn", il le prend pour 2 caractères normaux, si tu l'ecris "rn" il le prend comme étant un retour à la ligne suivit d'une descente à la ligne suivante.
Donc tu dois avoir:
$headers  = "From: $email <$email>rn";
$headers .= "MIME-Version: 1.0rn";

...je viens de réaliser que le forum suprimait les anti-slash! donc tu en mets là où il faut ;- (machine raciste)

Jeanluc
Vous avez résolu votre problème avec VIC ? Faites-le savoir sur les réseaux sociaux !
Vulgarisation-informatique.com
Cours en informatique & tutoriels