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 :

Compréhension difficile pour un débutant [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    en retaite
    Inscrit en
    Mai 2010
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : en retaite
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 164
    Points : 99
    Points
    99
    Par défaut Compréhension difficile pour un débutant
    Bonjour à tous,
    Mon site est hébergé en mutualisé chez 1&1.
    Je me casse la tête sur un formulaire et son traitement pour saisir des pièces jointes (qui sont sur mon pc, en local) afin de les ajouter un mail.
    J'ai trouvé sur le net, un petit script qui me permet de sélectionner les fichiers que je voudrais joindre à mon mail.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    <!--   https://thedebuggers.com/multiple-files-upload-using-html-php/  -->
     
    <form action="Debugger_Trait.php" method="post" enctype="multipart/form-data">
      <label> Select Files: </label>
      <input type="file" name="fileUpload[]" multiple > 
      <input type="submit" name="Submit" value="Upload" >
    </form>
    Ensuite je traite le array 'fileUpload' (de façon à charger les fichiers sur le serveur ) avec le script suivant :
    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
     
    <?php
     
    		//  <!--   https://thedebuggers.com/multiple-files-upload-using-html-php/  -->
     
    		// Set Upload Path
    		$target_dir = 'Mes_files/';
     
        if( isset($_FILES['fileUpload']['name'])) {
        		echo "les fichiers existent "; echo "<br>";
     
            echo'<pre>';
    				//   print_r($files)['fileUpload'];																// Voir tout le contenu des indices d'un array(tableau) à partir de 0
            echo'</pre>';
            echo '<br>';  
     
          	$total_files = count($_FILES['fileUpload']['name']);
          	echo "Total_files : ".$total_files; echo "<br>";  echo "<br>";
     
          	for($key = 0; $key < $total_files; $key++) {
     
           			// Check if file is selected
            		if(isset($_FILES['fileUpload']['name'][$key]) && $_FILES['fileUpload']['size'][$key] > 0) {
              			$original_filename = $_FILES['fileUpload']['name'][$key];	echo "original_filename : ".$original_filename; echo "<br>";
              			$target = $target_dir . basename($original_filename);			echo "target_dir : ".$target_dir; echo "<br>";
              			$tmp  = $_FILES['fileUpload']['tmp_name'][$key];					echo "tmp : ".$tmp; echo "<br>";
              			move_uploaded_file($tmp, $target);
              			echo "<br>";
            		}
     
            }
     
            echo "Tous les fichiers sont chargés "; echo "<br>";
            exit;
     
        }
     
    ?>
    Les questions que je (me) pose,à ce niveau, sont les suivantes :
    1- les fichiers se chargent-ils vraiment sur le serveur de chez 1&1 ?
    2- Si oui, dans quel répertoire sont-ils ? ... je ne les vois sur mon site !!!

    Ensuite, en supposant qu'ils soient sur le site, j'envisage utiliser une boucle pour les attacher au mail, en les séparant par des ... boundary, avec le code suivant :
    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
     
     
    		//  Pour ajout de PJ en PDF
    		//Attachment
     
    $_FILES["Fichier"] = $_FILES['fileUpload'];    //  Transfert de array
     
        if(isset($_FILES["fichier"]) &&  $_FILES['fichier']['name'] != "") { 																	//Check if file exists
            $nom_fichier = $_FILES['fichier']['name'];
            $source = $_FILES['fichier']['tmp_name'];
            $type_fichier = $_FILES['fichier']['type'];
            $taille_fichier = $_FILES['fichier']['size'];
     
            if($nom_fichier != ".htaccess"){ 																																	//Check if it's not a .htaccess file
    			 			if($type_fichier == "image/jpeg" || $type_fichier == "application/pdf"){ 											//Either jpeg or pdf
                    if ($taille_fichier <= 2097152) {																	 												//Size maxi above 2MB
     
                        $tabRemplacement = array("é"=>"e", "è"=>"e", "à"=>"a");				 												//Changing special characters
                        $handle = fopen($source, 'r'); 													 															//File opening
                        $content = fread($handle, $taille_fichier);							 															//File reading
                        $encoded_content = chunk_split(base64_encode($content)); 															//Encoding
                        $f = fclose($handle);																		 															//File closing
     
                        $email_message .= $passage_ligne . "--" . $boundary . $passage_ligne; 									//Second boundary opening
                        $email_message .= 'Content-type:'.$type_fichier.';name="'.$nom_fichier.'"'."\n"; 				//Content type (application/pdf or image/jpeg)
                        $email_message .='Content-Disposition: attachment; filename="'.$nom_fichier.'"'."\n"; 	//Inform there is an attachment
                        $email_message .= 'Content-transfer-encoding:base64'."\n"; 															//Encoding
                        $email_message .= "\n"; 																																//Blank line. IMPORTANT !
                        $email_message .= $encoded_content."\n"; 																								//Attachment
                    }else{
                        $email_message .= $passage_ligne ."L'utilisateur a tenté de vous envoyer une pièce jointe mais celle ci était superieure à 2Mo.". $passage_ligne;
                    }
                }else{
    								$email_message .= $passage_ligne ."L'utilisateur a tenté de vous envoyer une pièce jointe mais elle n'était pas au bon format.". $passage_ligne;
                }
            }else{
    			      $email_message .= $passage_ligne ."L'utilisateur a tenté de vous envoyer une pièce jointe .htaccess.". $passage_ligne;
            }
        }
    		//	Fin d'attachement de PJ
    Suis-je dans la bonne démarche ?

    Je vous remercie de vos conseils, ou remarques.
    Cordialement.
    Maub

  2. #2
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    J'aurais tendance à dire qu'ils se trouvent dans le répertoire qui correspond à la valeur de $target_dir. Que donne l'echo de cette variable ?
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  3. #3
    Membre régulier
    Homme Profil pro
    en retaite
    Inscrit en
    Mai 2010
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : en retaite
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 164
    Points : 99
    Points
    99
    Par défaut
    Bonsoir Badaze,
    Sur le site, je ne trouve pas de répertoire nommé "Mes_files" ????????
    Est-il vraiment créé ?
    Comment puis-je le vérifier de façon sure ?
    Merci
    Maub

  4. #4
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Il faut que tu indiques un répertoire de ton site. Mes_Files est là seulement pour t’indiquer qu’il faut mettre une autre valeur qui correspond à un répertoire chez toi.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  5. #5
    Membre régulier
    Homme Profil pro
    en retaite
    Inscrit en
    Mai 2010
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : en retaite
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 164
    Points : 99
    Points
    99
    Par défaut
    Bonjour Badaze,

    Merci de ta réponse.

    J'ai donc créé sur le site (par mkdir "rep_tmp_pj" ) un répertoire qui accueille les fichiers que je télécharge.

    J'ai ensuite lancé un téléchargement de quelques fichiers, et 'miracle' , je les retrouve bien dans le répertoire prévu.
    (Je débute en Linux)

    Maintenant que ces fichiers sont sur le site, je vais (tenté de) lancer le traitement pour les mettre en pj d'un mail.

    Je voulais te remercier de ton aide et te tenir au courant de ma 'progression' .

    Je t'informerai de la suite ... et te solliciterai peut-être à nouveau !!!

    Merci encore.
    Cordialement
    maub

  6. #6
    Membre régulier
    Homme Profil pro
    en retaite
    Inscrit en
    Mai 2010
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : en retaite
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 164
    Points : 99
    Points
    99
    Par défaut
    Bonjour Badaze,

    j'ai (un peu) progressé dans mon script !!!

    J'ai donc 2 formulaires :
    - PHP_Mailer_Form.php qui me permet de saisir l'expéditeur, le message, et la (ou les) pièce(s) jointe(s) que je désire joindre au mail
    - PHP_Mailer_Envoi.php qui devrait récupérer les valeurs saisies dans le 1°.

    je reçois le message suivant :
    Notice: Array to string conversion in /homepages/43/d676991474/htdoc

    Le problème (à mes yeux) se situe au niveau du traitement des pièces jointes.Je n'arrive pas à faire la différence entre un envoi d'une seule pj ou un tableau de plusieurs pj.
    Je pense qu'il me faut un indice supplémentaire lorsqu'il s'agit d'un tableau de pj, mais je ne sais pas comment écrire la boucle pour traiter le tableau.
    Peux-tu me donner des conseils ?

    Merci
    Maub

    Voici le 1° formulaire :
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    12345678910111213141516171819202122232425262728293031323334
     
    <?php
     
    		echo "<br>"; 		echo "<br>"; 
     
     		echo " <h4> <input type=button style='font-size:100%; color:black;' onclick=window.location.href='Menu_Principal.php'; value=' Retour au Site choisi ii' /></h4>"; 
     
    		echo "<br>"; 		echo "<br>"; 
    		echo "<h2> PHP_Mailer_Form_X.php (DES pj JPG ou PDF) </h2>";  												//  echo "<br>"; 		echo "<br>";	  echo "<br>";
     
    		echo '<form action="PHP_Mailer_Envoi_X.php" method="post" enctype="multipart/form-data">';
     
    		echo '<label for="nom">    Votre NOM : </label>  	 		  <input type="text" name="nom"   value="AUBINEAU Michel"          required/> '; echo "<br>"; echo "<br>";
     
    		echo '<label for="email">  Votre E-mail : </label> 		 	<input type="email" name="email" value="michel.aubi85@gmail.com" required/> '; echo "<br>"; echo "<br>";
     
    		echo '<label for="message"> Votre message : </label>'; echo "<br>"; 
    		echo '<textarea name="message" rows="5" cols="50" required> Je vous envoie DES pièces jointes (JPG ou PDF), attachées  à ce message </textarea> ';
     
    		echo "<br>";echo "<br>";
    		echo "<label for='fichier'> Ajouter DES pièces jointes à ce mail <span>(jpeg ou pdf, max 2Mo).  </span></label>"; //echo "<br>";
     
    		echo '<input type="hidden" name="MAX_FILE_SIZE" value="6000000" /> ';
     
     
     
    		//  echo "<br>";		
       // echo ' <input id="filess_pj"  name="filess_pj[]" multiple="multiple" type="file" /> '; echo "<br>";
        echo ' <input id="files"  name="files[]" type="file" multiple /> '; echo "<br>";
    		echo "<br>";
    		echo '<input type="submit" value=" Envoyer ce Mail (avec DES fichiers joints) ">';	echo "<br>"; 
    		echo "</form>";
     
    ?>
    et voici le second :
    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
     
    <?php
     
     
     
    		error_reporting(E_ALL); ini_set("display_errors", 1); 																		//Display errors
     
    		echo "<br>"; 	echo "<br>";
        $code_site = "MPSHF";
     
     		echo " <h4> <input type=button style='font-size:100%; color:black;' onclick=window.location.href='Menu_Principal.php'; value=' Retour au Site choisi ' /></h4>"; 
        echo "<br>"; 
     
        // include_once ("fonctions.php"); dump_post();
     
    //   	echo " On récupère le fichier (ou le array des fichiers) à envoyer : ";
    //  	$nb_fic = count($_FILES['files']);
    //  	echo "nb_fic (ou nbre de champs du array) = ".$nb_fic; echo "<br>"; 
    //  	echo '<pre>';		
    //  	print_r($_FILES);
    //  	echo '</pre>';
    //		echo "<br>";
     
        if (get_magic_quotes_gpc()){  										
            $nom = stripslashes(htmlentities($_POST['nom']));
            $email_from = stripslashes(htmlentities($_POST['email']));
            $message = stripslashes(htmlentities($_POST['message']));
        }else{  
    				//Eviter les insertions de scripts dans le cas d'un e-mail HTML
            $nom = htmlentities($_POST['nom']);
            $email_from = htmlentities($_POST['email']); 
            $message = htmlentities($_POST['message']);
        }
     
    		//  Check if mail host allow \r
        if(preg_match("#@(hotmail|live|msn).[a-z]{2,4}$#", $email_from)) { $passage_ligne = "\n"; }else{ $passage_ligne = "\r\n"; }
     
        $email_to = "michel.aubi85@gmail.com";         																			//  yourmail@gmail.com"; //Recipient
        $email_subject = "Mail avec (une ou des)  PJ (peut-être !)"; 												//  Contact for you"; //Subject
        $boundary = md5(rand()); 																														//  Random boundary key
     
        function clean_string($string) {
            $bad = array("content-type","bcc:","to:","cc:","href");
            return str_replace($bad,"",$string);
        } 
     
        $headers = "From: \"".$nom."\"<".$email_from.">" . $passage_ligne; 									//Sender
        $headers.= "Reply-to: \"".$nom."\" <".$email_from.">" . $passage_ligne; 						//Sender
        $headers.= "MIME-Version: 1.0" . $passage_ligne; 																		//MIME Version
        $headers.= 'Content-Type: multipart/mixed; boundary='.$boundary .' '. $passage_ligne; 			//Content (2 versions ex:text/plain et text/html et aussi des PJ )
     
        $email_message = '--' . $boundary . $passage_ligne; 																//Opening boundary
        $email_message .= "Content-Type: text/plain; charset=\"utf-8\"" . $passage_ligne; 	//Content type
        $email_message .= "Content-Transfer-Encoding: 8bit" . $passage_ligne; 							//Encoding
        $email_message .= $passage_ligne .clean_string($message). $passage_ligne;						//Content
     
     
    		//  Attachment du (ou des) fichier(s) à joindre
    		if(isset($_FILES["files"]) &&  $_FILES['files']['name'] != "") { 																										//  Check if file exists (array ou un seul fichier)
        		echo 'En 74, Dans ATTACHEMENT : Informations sur le(s) fichier(s) à attacher au mail :'; echo "<br>";
        		echo '<pre>';
    				print_r($_FILES);
    				echo '</pre>';
     
    				$nom_fichier = $_FILES['files']['name'];																																				//  NOM du fichier
    				//	$nom_fichier = $uploadfile;
            $source = $_FILES['files']['tmp_name'];																																					//  Répertoire tmp
            $type_fichier = $_FILES['files']['type'];																																				//	echo "Type_fichier : ".$type_fichier; echo "<br>"; 	echo "<br>"; 
            $taille_fichier = $_FILES['files']['size'];																																			//  Taille du fichier
     
            if($nom_fichier != ".htaccess"){ 																																								//	Check if it's not a .htaccess file
    			 			if($type_fichier == "image/jpeg" || $type_fichier == "image/jpg" || $type_fichier == "application/pdf"){		//  Soit jpeg or pdf
                    if ($taille_fichier > 0 and $taille_fichier < 2000000) {																								// 	Taille est bien comprise entre 0 et 2mb maxi
                    		$tabRemplacement = array("é"=>"e", "è"=>"e", "à"=>"a");				 																			//	Changing special characters
                        echo "Fichier en cours d'expédition : ".$source; echo "<br>";     //  exit;
                        $handle = fopen($source, 'r'); 													 																						//  Ouverture du fichier
                        $content = fread($handle, $taille_fichier);							 																						//  lecture du fichier
                        $encoded_content = chunk_split(base64_encode($content)); 																						//  Découpage
                        $f = fclose($handle);																		 																						//  Fermeture du fichier
                        $email_message .= $passage_ligne . "--" . $boundary . $passage_ligne; 															//  Second boundary opening
                        $email_message .= 'Content-type:'.$type_fichier.';name="'.$nom_fichier.'"'."\n"; 										//  Content type (application/pdf or image/jpeg)
                        $email_message .= 'Content-Disposition: attachment; filename="'.$nom_fichier.'"'."\n"; 							//  Inform there is an attachment
                        $email_message .= 'Content-transfer-encoding:base64'."\n"; 																					//  Encoding
                        $email_message .= "\n"; 																																						//  Blank line. IMPORTANT !
                        $email_message .= $encoded_content."\n"; 																														//  Attachment
                    }else{
                        $email_message .= $passage_ligne ."On a tenté de vous envoyer une PJ (".$nom_fichier.") mais sa taille (".$taille_fichier.") était trop élevée (2Mb maxi).". $passage_ligne;
                    }
                }else{
    								$email_message .= $passage_ligne ."On a tenté de vous envoyer une pièce jointe avec un format non autorisé (".$type_fichier.").". $passage_ligne;
                }
            }else{
    			      $email_message .= $passage_ligne ."On a tenté de vous envoyer une pièce jointe au format prohibé .htaccess.". $passage_ligne;
            }
        }
     
     
     
        $email_message .= $passage_ligne . "--" . $boundary . "--" . $passage_ligne; 														//Closing boundary
       	//   echo "<br>"; echo " Voici le message complet, prêt à partir : "; echo "<br>"; echo "".$email_message; echo "<br>"; echo "<br>";   echo "<br>"; exit;
     
        if(mail($email_to,$email_subject, $email_message, $headers) == true) {  									//Sending mail
        		echo "<h3> Le message avec (UNE) pj est bien parti !!! </h3> ";
        		echo "<br>";
        		echo " <h3> <input type=button style='font-size:100%; color:black;' onclick=window.location.href='PHP_Mailer_Form.php'; value=' Retour pour un Nouvel email ' /> </h3>"; 
        		exit;
        }else{
        		echo "<br>";echo "<br>";
        		echo "Le message n'a pas été envoyé !!!";
        		echo "<br>";echo "<br>";
         		echo " <h3> <input type=button style='font-size:100%; color:black;' onclick=window.location.href='PHP_Mailer_Form.php'; value=' Retour pour un Nouvel email ' /> </h3>"; 
        		exit;
        }
     
    ?>

  7. #7
    Membre régulier
    Homme Profil pro
    en retaite
    Inscrit en
    Mai 2010
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : en retaite
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 164
    Points : 99
    Points
    99
    Par défaut
    Bonsoir à tous,
    Mon difficulté est résolue.
    Merci.
    Maub

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

Discussions similaires

  1. comptage difficile pour débutant
    Par Eric5959 dans le forum Langage
    Réponses: 28
    Dernier message: 01/10/2009, 16h23
  2. Réponses: 12
    Dernier message: 06/10/2007, 13h01
  3. Un select un peu difficile pour un débutant
    Par mitchb dans le forum Débuter
    Réponses: 1
    Dernier message: 27/03/2007, 22h35
  4. De l'aide pour un débutant
    Par Abelkims dans le forum Débuter
    Réponses: 21
    Dernier message: 02/09/2005, 11h11
  5. Requete pour un débutant
    Par sqlnoob dans le forum Langage SQL
    Réponses: 3
    Dernier message: 20/05/2005, 08h55

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