Bonjour,
J'ai faits un formulaire de contact reprit du tuto de Grafikart qui marchait très bien (envoie de message avec sujet classique), j'ai cependant essayé de rajouter la possibilité d'envoyer des pièces jointes, ce qui ne fonctionne pas, voici mon code :

6 réponses


Lulu.74
Auteur
<?php
$errors = [];

if(!array_key_exists('name', $_POST) || $_POST['name'] == ''){
  $errors['name'] = "Vous n'avez pas renseigné votre nom";
}
if(!array_key_exists('firstname', $_POST) || $_POST['firstname'] == ''){
  $errors['firstname'] = "Vous n'avez pas renseigné votre prénom";
}
if(!array_key_exists('email', $_POST) || $_POST['email'] == '' || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
  $errors['email'] = "Vous n'avez pas renseigné un email valide";
}
if(!array_key_exists('subject', $_POST) || $_POST['subject'] == ''){
  $errors['subject'] = "Vous n'avez pas renseigné votre sujet";
}
if(!array_key_exists('message', $_POST) || $_POST['message'] == ''){
  $errors['message'] = "Vous n'avez pas renseigné votre message";
}
if(!array_key_exists('fichier', $_POST) || $_POST['fichier'] == ''){
  $errors['fichier'] = "Vous n'avez pas renseigné votre fichier";
}
if(isset($_POST) && !empty($_POST)){
   if(!empty($_FILES['fichier']['name'])){
     $file_name = $_FILES['fichier']['name'];
     $temp_name = $_FILES['fichier']['tmp_name'];
     $file_type = $_FILES['fichier']['type'];

     $base = basename($file_name);
     $extension = substr($base, strlen($base)-4, strlen($base));

     $allowed_extensions = array(".doc", ".docx", ".pdf", ".zip", ".png", ".jpg", ".jpeg");

     if(in_array($extension, $allowed_extensions)){
       $from = $_POST['email'];
       $to = "lucaslaurens.74@gmail.com";
       $message = "this is an attachment";

       $file = $temp_name;
       $content = chunk_split(base64_encode(file_get_contents($file)));
       $uid = md5(uniqid(time()));

       $header = "From: ".$from."\r\n";
       $header .= "Mime-Version: 1.0\r\n";

       $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
       $header .= "This is a multi-part message in MIME format.\r\n";

       $header .= "--".$uid."\r\n";
       $header .= "Content-Type:text/plain; charset=iso-8859-1\r\n";
       $header .= "Content-Transfert-Encoding: 7bit\r\n\r\n";
       $header .= $message."\r\n\r\n";

       $header .= "--".$uid."\r\n";
       $header .= "Content-Type: ".$file_name."; name=\"".$file_name."\"\r\n";
       $header .= "Content-Transfert-Encoding: base64\r\n";
       $header .= "Content-Disposition: fichier; filename=\"".$file_name."\"\r\n";
       $header .= $content."\r\n\r\n";

       if(mail($to, "", $header)){
         header('Location: index.php');
         echo "success";
       } else {
         echo "fail";
       }

     } else {
       echo "file type not allowed";
     }
   } else {
     echo "no filed posted";
   }
 } 

session_start();

if(!empty($errors)){
  $_SESSION['errors'] = $errors;
  $_SESSION['inputs'] = $_POST;
   header('Location: index.php');
}
else{
 $_SESSION['success'] = 1;
 $headers = 'FROM: ' . $_POST['email'];
mail('lucaslaurens.74@gmail.com', $_POST['name'] . ' - ' . $_POST['subject'], $_POST['message'], $headers);
 header('Location: index.php');
}

 ?>
Lulu.74
Auteur
<?php
 session_start();
?>
<!DOCTYPE html>
<html>
<head>
  <link rel="icon" type="image/png" href="img/favicon.ico" >
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
  <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
  <link rel="stylesheet" type="text/css" href="style.css">

</head>
<body>

<svg viewBox="0 0 840 600">
  <symbol id="s-text">
    <text text-anchor="middle"
          x="50%"
          y="15%"
          class="text--line"
          >
      LUCAS LAURENS
    </text>
  </symbol>

  <g class="g-ants">
    <use xlink:href="#s-text"
      class="text-copy"></use>
    <use xlink:href="#s-text"
      class="text-copy"></use>
    <use xlink:href="#s-text"
      class="text-copy"></use>
    <use xlink:href="#s-text"
      class="text-copy"></use>
    <use xlink:href="#s-text"
      class="text-copy"></use>
  </g>

</svg>

<div class="wrapper">
  <div class="wrap-center">
    <div class="mini-icon">
      <i class="icon-toggle material-icons" data-text="#email">email</i>
      <i class="icon-toggle material-icons" data-text="#carte">person_pin</i>
      <i class="icon-toggle material-icons" data-text="#phone">phone_in_talk</i>
      <i class="icon-toggle material-icons" data-text="#describe">queue_play_next</i>
      <div class="active mail-toggle" id="email">
        <a type="button" data-toggle="modal" data-target="#exampleModal">lucaslaurens.74@gmail.com</a>

         <!-- Button trigger modal -->
      </div>
      <div class="active carte-toggle" id="carte">
        <a>Lucas Laurens : 27 | 02 | 1996</a>

      </div>
      <div class="active phone-toggle" id="phone">
        <a> 06 . 51 . 45 . 80 . 81 </a>

      </div>

      <div class="active describe-toggle" id="describe">
        <a target="_blank" href="https://www.linkedin.com/in/lucas-laurens-532b1a111/"> Chef de projets Web <img height="25px" width="25px" src="img/linkedin.svg" /></a>

      </div>
      <span>Copied</span>
    </div>
  </div>
</div>

  <!-- FORM -->

  <div class="container">
    <!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
     <div class="starter-template">

      <?php if(array_key_exists('errors', $_SESSION)):  ?>
       <div class="alert alert-danger">
         <?= implode('<br>', $_SESSION['errors']); ?>
       </div>
     <?php endif; ?>
     <?php if(array_key_exists('success', $_SESSION)):  ?>
      <div class="alert alert-success">
        Votre email nous a bien été envoyé
      </div>
    <?php endif; ?>

      <form action="post_contact.php" enctype="multipart/form-data" method="POST">
        <div class="row">
        <div class="fond col-md-12">
          <div class="col-xs-6">
            <div class="form-group">
              <input type="text" name="name" class="form-control" placeholder="Nom" id="inputname" value="<?= isset($_SESSION['inputs']['name']) ? $_SESSION['inputs']['name'] : ''; ?>">
              <label for="inputname" class="form-label">Votre Nom</label>
            </div>
          </div>
          <div class="col-xs-6">
            <div class="form-group">
              <input type="text" name="firstname" class="form-control" placeholder="Prénom" id="inputfirstname" value="<?= isset($_SESSION['inputs']['firstname']) ? $_SESSION['inputs']['firstname'] : ''; ?>">
              <label for="inputfirstname" class="form-label">Votre Prénom</label>
            </div>
          </div>
          <div class="col-xs-12">
            <div class="form-group">
              <input type="email" required name="email" class="form-control" placeholder="Email" id="inputemail" value="<?= isset($_SESSION['inputs']['email']) ? $_SESSION['inputs']['email'] : ''; ?>">
              <span>Vous devez remplir une adresse email valide</span>
              <label for="inputemail" class="form-label"></label>
            </div>
          </div>
          <div class="col-xs-12">
            <div class="form-group">
              <input type="text" name="subject" class="form-control" placeholder="Sujet" id="inputsubject" value="<?= isset($_SESSION['inputs']['subject']) ? $_SESSION['inputs']['subject'] : ''; ?>">
              <label for="inputsubject" class="form-label">Votre Sujet</label>
            </div>
          </div>
          <div class="col-xs-12">
            <div class="form-group">
              <textarea type="text" name="message" class="form-control" placeholder="Message" id="inputmessage"><?= isset($_SESSION['inputs']['message']) ? $_SESSION['inputs']['message'] : ''; ?></textarea>
              <label for="inputmessage" class="form-label">Votre Message</label>
            </div>
           <div class="col-xs-12" style="padding-left: 0;">
               <label for="label-input-file" class="label-input-file">Choisit ton fichier</label>
               <input type="file" id="label-input-file" name="fichier" value="<?= isset($_SESSION['inputs']['fichier']) ? $_SESSION['inputs']['fichier'] : ''; ?>">
           </div>
            <button type="submit" class="btn-fond">envoyer</button>
          </div>
      </div>
      </div>
      </form>

    </div>
      <div class="modal-footer">
        <button type="button" data-dismiss="modal">Close</button>
      </div>
    </div>
  </div>
</div>

<div class="logo-cv">
  <div class="bulle"><h2>Pour en savoir plus</h2></div>
  <a href="img/CV.pdf" target="_blank"><img src="img/logolucas.png" height="50" width="50"><i><span class="glyphicon glyphicon-plus"></span></i></a>
</div>

  </div>

  <!-- JS -->

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<script type="text/javascript" src="main.js"></script>

</body>

</html>
<?php
  unset($_SESSION['inputs']);
  unset($_SESSION['success']);
  unset($_SESSION['errors']);
?>
Lulu.74
Auteur

Avez-vous une idée? merci d'avance :)

Bonsoir.
Étant donné que dans ta première fonction email tu injectes les headers en troisième argument alors que dans la seconde tu injectes les headers en quatrième argument, tu ne crois pas que ton problème vient de là ?
Par contre, dans le premier code, tu envoies du texte via des echo avant ton session_start, ce qui est une grosse erreur.

Lulu.74
Auteur

Merci pour ton aide je vais déjà essayer de changer un peu tout ça pour voir, c'est juste que je débute en php donc j ai un peu du mal à placer les éléments et savoir ce qui est bien ou non :)

Lulu.74
Auteur
<?php
$errors = [];

if(!array_key_exists('name', $_POST) || $_POST['name'] == ''){
  $errors['name'] = "Vous n'avez pas renseigné votre nom";
}
if(!array_key_exists('firstname', $_POST) || $_POST['firstname'] == ''){
  $errors['firstname'] = "Vous n'avez pas renseigné votre prénom";
}
if(!array_key_exists('email', $_POST) || $_POST['email'] == '' || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){
  $errors['email'] = "Vous n'avez pas renseigné un email valide";
}
if(!array_key_exists('subject', $_POST) || $_POST['subject'] == ''){
  $errors['subject'] = "Vous n'avez pas renseigné votre sujet";
}
if(!array_key_exists('message', $_POST) || $_POST['message'] == ''){
  $errors['message'] = "Vous n'avez pas renseigné votre message";
}

session_start();
if(isset($_POST) && !empty($_POST)){
   if(!empty($_FILES['fichier']['name'])){
     $file_name = $_FILES['fichier']['name'];
     $temp_name = $_FILES['fichier']['tmp_name'];
     $file_type = $_FILES['fichier']['type'];

     $base = basename($file_name);
     $extension = substr($base, strlen($base)-4, strlen($base));

     $allowed_extensions = array(".doc", ".docx", ".pdf", ".zip", ".png", ".jpg", ".jpeg");

     if(in_array($extension, $allowed_extensions)){

       $file = $temp_name;
       $content = chunk_split(base64_encode(file_get_contents($file)));
       $uid = md5(uniqid(time()));

       $headers = "Mime-Version: 1.0\r\n";

       $headers .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
       $headers .= "This is a multi-part message in MIME format.\r\n";

       $headers .= "--".$uid."\r\n";
       $headers .= "Content-Type:text/plain; charset=iso-8859-1\r\n";
       $headers .= "Content-Transfert-Encoding: 7bit\r\n\r\n";

       $headers .= "--".$uid."\r\n";
       $headers .= "Content-Type: ".$file_name."; name=\"".$file_name."\"\r\n";
       $headers .= "Content-Transfert-Encoding: base64\r\n";
       $headers .= "Content-Disposition: fichier; filename=\"".$file_name."\"\r\n";
       $headers .= $content."\r\n\r\n";

        } 
    }
}
if(!empty($errors)){
  $_SESSION['errors'] = $errors;
  $_SESSION['inputs'] = $_POST;
   header('Location: index.php');
}
else{
 $_SESSION['success'] = 1;
 $headers .= 'FROM: ' . $_POST['email']."\r\n";
 $to = "lucaslaurens.74@gmail.com";
 mail($to, $_POST['name'] . ' - ' . $_POST['subject'],  $_POST['message'], $headers);
 header('Location: index.php');
}

 ?>

J'ai changé du code mais je ne voix pas d'où ça vient avec ce que je viens de faire j'ai des messages d'erreurs