Accueil
Accueil Le Club Delphi Kylix C C++ Java J2EE DotNET & C# Visual Basic Access Pascal Dev Web PHP ASP XML UML SQLSGBD Windows Linux Autres
logo

precedent    sommaire    suivant   


Auteur : berceker united
Version : 24/11/2006
Comment envoyer plusieurs pièces jointes dans un mail ?
Il faut créer un répertoire "tmpimg"
  • Upload de tous les fichiers
  • Contrôle les extensions.
  • Construction de l'entête pour le mail.
  • Envoi du mail
  • Suppresion des fichiers.
//PREMIER FICHIER.
<? $nbFile = 3; ?>
<html>
<body>
<form action="mail.php" method="POST" enctype="multipart/form-data" name="formulaire">
   <br><br>
   <table style="border:1px solid #000000" align="center">
     <tr>
       <td colspan="2" class="en-tete">Envoyer vos informations concernant le produit</td>
     </tr>
     <tr>
       <td colspan="2">
         <textarea name="message"></textarea>
       </td>
     </tr>
<? for($i=0;$i<$nbFile;$i++){ ?>
     <tr>
       <td>Fichier image <? echo $i+1; ?> :</td>
       <td><input type="file" name="fichier<? echo $i; ?>" value="">
     </tr>
<? } ?>
     <tr>
       <td align="center" colspan="2"><input type="submit" name="action" value="Envoyer"></td>
     </tr>
   </table>
   <input type="hidden" name="nbfile" value="<? echo $nbFile; ?>">
</form>
</body>
</html>
 
//FICHIER MAIL.
//$filename : chemin du fichier.
function get_extension($filename){
   $parts = explode('.',$filename);
   $last = count($parts) - 1;
   $ext = $parts[$last];
   return $ext;
}
 
 
if($_SERVER['REQUEST_METHOD'] == 'POST'){  //Détecte si c'est le post provient d'un POST.
  $isConform        = false;
  $attachment       = array();
  $arrNameFile      = array();
  $arrSource        = array();
  $arrExtension     = array();
  $arrType          = array();
  $arrInfoManu      = array();
  $arrExtensionCTRL = array('jpg','jpeg','bmp','psd','png','gif','tif','tiff');
  $boundary = "-----=".md5(uniqid(rand()));
  $extensionTemp    = '';
  $file             = '';
  $attachment       = '';
 
  $destinataire     = 'mail destinataire';
  $from             = 'votre mail';
  $reponse          = 'votre mail réponse';
  $sujet            = 'Votre sujet';
  $repertoire       = 'tmpimg'; //Répertoire ou ce trouverons les fichiers attachées.
  $fp               = null;
  $type             = 'text/plain';
  $message          = trim($_POST['message']);
 
  if($_POST['action'] == 'Envoyer'){
    for($i=0;$i<$_POST['nbfile'];$i++){ //Boucle sur le nombre de champs de type file
      $extensionTemp = get_extension($_FILES['fichier'.$i]['name']); // Récupère l'extension du fichier
      if($_FILES['fichier'.$i]['name'] != ''){  //Détecte si il y a eu un fichier d'envoyé.
        if(in_array(strtolower($extensionTemp), $arrExtensionCTRL)){ //Regarde si l'extension est valide.
          $arrNameFile[$i] = $_FILES['fichier'.$i]['name'];  //Nom du fichier
          $arrSource[$i]   = $_FILES['fichier'.$i]['tmp_name']; //Fichier temporaire :: contenu.
          $isConform = true;  //Il est donc conforme.
        }else{
          $isConform = false; //Il n'est pas conforme
        }
      }
    }
  }
 
  //Redirection dans le cas ou il y a une extension non valide.
  if($isConform == false){
    header('Location:page_erreur.php?erreur=true');
    exit();
  }
  //Boucle sur le nombre de fichier valide.
  for($i=0;$i<count($arrNameFile);$i++){
    copy($arrSource[$i], $repertoire.'/'.$arrNameFile[$i]); //Copie le fichier dans une zone précise du disque
    $arrExtension[$i] = strtolower(get_extension($arrNameFile[$i])); //récupère l'extension
    if($arrExtension[$i] == 'gif')                                     $arrType[$i] = 'image/gif';  //gif
    else if($arrExtension[$i] == 'bmp')                                $arrType[$i] = 'image/bmp';  //bmp
    else if($arrExtension[$i] == 'png')                                $arrType[$i] = 'image/png';  //png
    else if($arrExtension[$i] == 'psd')                                $arrType[$i] = 'image/psd';  //psd
    else if($arrExtension[$i] == 'jpg' || $arrExtension[$i] == 'jpeg') $arrType[$i] = 'image/jpeg'; //jpg
    else if($arrExtension[$i] == 'tif' || $arrExtension[$i] == 'tiff')  $arrType[$i] = 'image/tiff'; //tif
  }
 
//----------------------------------
// Construction de l'entête
//----------------------------------
 
  $header = "MIME-Version: 1.0\r\n";
  $header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
  $header .= "\r\n";
 
  $msg = "Je vous informe que ceci est un message au format MIME 1.0.\r\n";
 
  $msg .= "--$boundary\r\n";
 
  $msg .= "Content-Type: $type; charset=\"iso-8859-1\"\r\n";
 
  $msg .= "Content-Transfer-Encoding:8bit\r\n";
  $msg .= "\r\n";
  $msg .="===================VOTRE MESSAGE===================\r\n\r\n";
  $msg .= $message;
  $msg .= "\r\n";
 
  for($i=0;$i<count($arrNameFile);$i++){
    $file = $repertoire.'/'.$arrNameFile[$i];
 
    $fp = fopen($file, 'rb');
    $attachment = fread($fp, filesize($file));
    fclose($fp);
    $attachment = chunk_split(base64_encode($attachment));
 
    $msg .= "--$boundary\r\n";
    $msg .= "Content-Type: ".$arrType[$i]."; \r";
    $msg .= "name=\"".$arrNameFile[$i]."\"\r\n";
    $msg .= "Content-Transfer-Encoding: base64\r\n";
    $msg .= "Content-Disposition: inline;\r\n filename=\"".$arrNameFile[$i]."\"\r\n";
    $msg .= $attachment . "\r\n";
 
    $msg .= "\r\n";
    $msg .= "\r\n\r\n";
    unlink($file);
  }
  $msg .= "--$boundary--\r\n";
  if(mail($destinataire, $sujet , $msg,"Reply-to: $reponse\r\nFrom: $from\r\n".$header)){
    echo "OK";
  }else{
    echo "ERREUR";
  }
}
?>

Auteur : Moloc'h
Version : 16/01/2006
Gérer des listes déroulantes
<?
    function listbox ( $name , $array_value = array() , $array_selected , $multiple = 0 , $size = 1 )
    {
        $select = '<select' . ( ( $multiple == 1 ) ? ' multiple name="' . $name . '[]"' : ' name="' . $name . '"' ) . 
' size="' . $size . '">' . "n" ;
        
            foreach ( $array_value as $key => $value )
            {
                $select .= '<option value="' . $key . '"' .
                ( ( $multiple == 1 ) ? ( in_array ( $key , $array_selected ) ? ' selected="selected"' : '' ) : 
( $key == $array_selected ? ' selected="selected"' : '' ) ) .
                '>' . $value . '</option>' . "n" ;
            }
        
        $select .= '</select>' ;
        
        return $select ;
    }
?>
  • $name : Le nom du l'élément select.
  • $array_value : Le tableau des valeurs de l'élément select.
  • $array_selected : Le tableau des valeurs sélectionnées.
  • $multiple : Valeur bolléenne indiquant si l'élément select est multiple ou simple.
  • $size : Taille du menu.

Mise en oeuvre :
Prenons l'exemple d'un menu déroulant des régions françaises :
Cas où les valeurs sont issues d'un tableau PHP :
<?
$region = array (
1 => 'Alsace' ,
2 => 'Aquitaine' ,
3 => 'Auvergne' ,
4 => 'Basse-Normandie' ,
5 => 'Bourgogne' ,
6 => 'Bretagne' ,
7 => 'Centre' ,
8 => 'Champagne-Ardenne' ,
9 => 'Corse' ,
10 => 'Dom-Tom' ,
11 => 'Franche-Comté' ,
12 => 'Haute-Normandie' ,
13 => 'Ile de France' ,
14 => 'Languedoc-Roussillon' ,
15 => 'Limousin' ,
16 => 'Lorraine' ,
17 => 'Midi-Pyrénées' ,
18 => 'Nord-Pas-de-Calais' ,
19 => 'Pays de la Loire' ,
20 => 'Picardie' ,
21 => 'Poitou-Charentes' ,
22 => 'PACA' ,
23 => 'Rhône-Alpes'
) ;
?>
Dans la page HTML il suffit de faire :
Pour une liste simple
<?
echo listbox ( 'region' , $region ) ;
?>
Pour une liste simple avec une valeur pré-sélectionnée
<?
echo listbox ( 'region' , $region , 4 ) ;
?>
Pour une liste simple avec une valeur pré-sélectionnée et conservation d'une valeur après envoit
<?
echo listbox ( 'region' , $region , ( isset ( $_POST['region'] ) ? $_POST['region'] : 4 ) ) ;
?>
Pour une liste multiple
<?
echo listbox ( 'region' , $region , array() , 1 , 6 ) ; 
?>
Pour une liste multiple avec des valeurs pré-sélectionnées
<?
echo listbox ( 'region' , $region , array ( 4 , 5 , 6 , 7 ) , 1 , 6 ) ; 
?>
Pour une liste multiple avec des valeurs pré-sélectionnées et conservation des valeurs après envoit
<?
echo listbox ( 'region' , $region , 
( isset ( $_POST['region'] ) ? $_POST['region'] : array ( 4 , 5 , 6 , 7 ) ) , 1 , 6 ) ; 
?>


Cas où les valeurs sont issues de la base :
CREATE TABLE region (
id TINYINT( 4 ) NOT NULL AUTO_INCREMENT ,
name TEXT,
PRIMARY KEY ( id )
);

INSERT INTO region (name) VALUES ( 'Alsace' );
INSERT INTO region (name) VALUES ( 'Aquitaine' );
INSERT INTO region (name) VALUES ( 'Auvergne' );
INSERT INTO region (name) VALUES ( 'Basse-Normandie' );
INSERT INTO region (name) VALUES ( 'Bourgogne' );
INSERT INTO region (name) VALUES ( 'Bretagne' );
INSERT INTO region (name) VALUES ( 'Centre' );
INSERT INTO region (name) VALUES ( 'Champagne-Ardenne' );
INSERT INTO region (name) VALUES ( 'Corse' );
INSERT INTO region (name) VALUES ( 'Dom-Tom' );
INSERT INTO region (name) VALUES ( 'Franche-Comté' );
INSERT INTO region (name) VALUES ( 'Haute-Normandie' );
INSERT INTO region (name) VALUES ( 'Ile de France' );
INSERT INTO region (name) VALUES ( 'Languedoc-Roussillon' );
INSERT INTO region (name) VALUES ( 'Limousin' );
INSERT INTO region (name) VALUES ( 'Lorraine' );
INSERT INTO region (name) VALUES ( 'Midi-Pyrénées' );
INSERT INTO region (name) VALUES ( 'Nord-Pas-de-Calais' );
INSERT INTO region (name) VALUES ( 'Pays de la Loire' );
INSERT INTO region (name) VALUES ( 'Picardie' );
INSERT INTO region (name) VALUES ( 'Poitou-Charentes' );
INSERT INTO region (name) VALUES ( 'PACA' );
INSERT INTO region (name) VALUES ( 'Rhône-Alpes' );
Puis :
<?
$sql = "SELECT name FROM region" ;
$result = mysql_query ( $sql ) ;
$region = array() ;
while ( $row = mysql_fetch_assoc ( $result ) )
{
$region[] = $row['name'] ;
}
?>
Ensuite, c'est pareil ...


Auteur : frenchsting
Version : 16/01/2006
Listes liées
Il faut juste rajouter la connection à la base.
<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<script language=javascript>
function modifcombo(){
document.location.replace("essai3.php?lieux=" + document.form1.selectlieu.value );
document.form1.selectlieu.value = $lieux;
}
</script>;
</head>

<body>
<?php
if (isset($_GET['lieux'])){
  $lieux = $_GET['lieux'];
} else {
  $lieux = NULL;
}
print ">>>>" . $lieux ."<<< <br> <br> <br>";
?>
<p>Essai formulaire</p>
<form name="form1" method="post" action="">
<table width="100%" border="1">
  <tr>
    <td><div align="right">lieu :</div></td>
    <td><select name="selectlieu" class="txt16-000000" onChange="javascript : modifcombo()">
      <option value=""></option>
      <!-- Valeur vide pour forcer l'utilisateur à sélectionner  -->
      <?php
                  // Connexion à la base
                  include("../connectbase.inc") ;

       // Execution requête
     $ma_req = "SELECT * FROM lieu;";
     $res_req = mysql_query($ma_req)
     or die("Selection table \"lieu\" impossible");

     // Affectation des variables utilisées pour l'affichage
     if (mysql_num_rows($res_req)!=0) {  // résultat non vide
         while ($une_ligne = mysql_fetch_array($res_req)) {
                      $id_lieu =  $une_ligne["id_lieu"];
         $nom_lieu = $une_ligne["nom_lieu"];
         print "<option value=" . $id_lieu;
         if ($id_lieu == $lieux) {
           print " selected";
         }
         print ">" . $nom_lieu ."</option>";
     }
     }
     ?>
    </select>
</td>
  </tr>
  <tr>
    <td> <div align="right">salle : </div></td>
    <td><select name="selectsalle" class="txt16-000000">
      <option value=""></option>
      <!-- Valeur vide pour forcer l'utilisateur à sélectionner  -->
      <?php
    // Connexion à la base
    include("../connectbase.inc") ;

     // Execution requête
   $ma_req = "SELECT * FROM salle WHERE id_lieu = '$lieux';";
   $res_req = mysql_query($ma_req)
   or die("Selection table \"salle\" impossible");

   // Affectation des variables utilisées pour l'affichage
    if (mysql_num_rows($res_req)!=0) {  // résultat non vide
        while ($une_ligne = mysql_fetch_array($res_req)) {
                    $id_salle = $une_ligne["id_salle"];
       $nom_salle = $une_ligne["nom_salle"];
       print "<option value=" . "id_salle . ">"  .  "nom_salle  .  "</option>";
      }
      }
            ?>
    </select></td>
  </tr>
</table>
</form>
</body>
</html>

Auteur : iubito
Version : 11/01/2006
Uploader des fichiers dont on a choisi l'extension
Les variables utilisées :
$UPLOAD_maxFileSize = 500;
// Taille maxi en Kilo octet.
// Si le serveur accepte moins, c'est la config du serveur qui sera prise en compte.

$UPLOAD_nbFiles = 1;
//Nombre de fichiers à envoyer en simultané.
//On peut décider d'envoyer 3 fichiers à la fois.

$UPLOAD_forbiddenFiles = 'php|php3|php4...';
//Liste des extensions refusées, séparées par des |
$UPLOAD_acceptedFiles = '';
//Liste des extensions acceptés, séparées par des |
//Si ça vaut une chaîne non vide, ça a la priorité sur $UPLOAD_forbiddenFiles,
//=> le script n'acceptera QUE ces fichiers.
Le formulaire :
//Déterminer le max upload file size.
$cfgUlMaxFileSize = strtoupper(ini_get("upload_max_filesize"));
if (substr_count($cfgUlMaxFileSize, 'K'))
   $cfgUlMaxFileSize = str_replace('K', '', $cfgUlMaxFileSize) * 1024;
elseif (substr_count($cfgUlMaxFileSize, 'M'))
   $cfgUlMaxFileSize = str_replace('M', '', $cfgUlMaxFileSize) * 1024 * 1024;
$uploadSize = min($cfgUlMaxFileSize, $UPLOAD_maxFileSize*1024);

echo '<form name="upload" enctype="multipart/form-data" action="upload.php" method="post">'
   .'<input type="hidden" name="MAX_FILE_SIZE" value="'.$uploadSize.'">';

for($i=0; $i < $UPLOAD_nbFiles; $i++)
   echo '<input name="fichiers[]" type="file" /><br />';
echo '<br /><input type="submit" value="Envoyer la purée !" /><br />';

echo '<br />Extensions '.($UPLOAD_acceptedFiles=='' ? 'refusées' : 'acceptées');
echo str_replace('|', ' .*',
         ($UPLOAD_acceptedFiles==''?$UPLOAD_forbiddenFiles : $UPLOAD_acceptedFiles));
echo '<br />Taille maxi : '.$uploadSize;
echo '</form>';
La validation (Les fichiers seront déposés dans le dossier nommé "repertoire" au même niveau que ce script PHP) :
//Retourne l'extension d'un fichier
function extension($wfichier)
{
   return strtolower(substr($wfichier,
      strrpos($wfichier,'.') + 1,
      strlen($wfichier) - strrpos($wfichier, '.') - 1));
}


for($i=0; $i < $UPLOAD_nbFiles; $i++) //on retrouve notre variable nb de fichiers
{
   $strUpload = ''; //Les éventuels messages d'erreur ;-)
   $file = '';
   if (isset($_FILES['fichiers']['name'][$i]))
      $file = trim(stripslashes($_FILES['fichiers']['name'][$i]));
   if ($file == '')
      continue;

//Check file size
   if ($_FILES['fichiers']['size'][$i] > $_POST['MAX_FILE_SIZE'])
   {
      $strUpload .= $file.' : Trop gros !<br />';
      continue;
   }

//Check extension
   if (
      (($UPLOAD_acceptedFiles=='') && (substr_count($UPLOAD_acceptedFiles, extension($_FILES['fichiers']['name'][$i])) > 0))
   || (($UPLOAD_acceptedFiles!='') && (substr_count($UPLOAD_acceptedFiles, extension($_FILES['fichiers']['name'][$i])) == 0))
   )
   {
      $strUpload .= $file.' : Format non valide<br />';
      continue;
   }

//Check if file already exists
   if (is_file('repertoire/'.$file))
   {
      $strUpload .= $file.' : Existe déjà !<br />';
      continue;
   }

//Now it's OK, upload !
   if (@copy($_FILES['fichiers']['tmp_name'][$i], 'repertoire/'.$file))
   {
      //Si c'est une image, vérification améliorée
      if (in_array(extension($file), array('gif', 'jpg', 'png', 'swf', 'swc',
                        'psd', 'tiff', 'bmp', 'iff', 'jp2',
                        'jpx', 'jb2', 'jpc', 'xbm', 'wbmp')))
      {
         $checksize = @getimagesize('repertoire/'.$file);
         if (!$checksize)
         {
            $strUpload .= $file.' : Image incorrecte !<br />';
            @unlink($curr.'/'.$file);
            continue;
         }
      }
      $strUpload .= $file.' : OK<br />';
   }
   else
      $strUpload.= $file.' : Erreur inconnue<br />';

   //Si le fichier temporaire n'a pas été effacé par le serveur (ça arrive, aléatoirement on dirait :P)
   if (is_file($_FILES['fichiers']['tmp_name'][$i]))
      @unlink($_FILES['fichiers']['tmp_name'][$i]);

   echo $strUpload.'<br />';
}

precedent    sommaire    suivant   

Consultez les autres pages sources


Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©2006  Developpez LLC. Tout droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com