Afficher les erreurs d'un formulaire en bas de page

Ce topic a été résolu
Gyadarun

Gyadarun Le 25 mai 2018 à 19:14 (Édité le 25 janvier 2019 à 17:54)

Bonjour, étant débutant en PHP je viens demander de l'aide car je n'arrive pas à trouver la solution. La première version du code avec le php et html dans le ficher index.php fonctionne et j'arrive à afficher les erreurs au niveau du formulaire. Voici le code (avec du javascript pour me rediriger au niveau du formulaire, je ne sais pas si c'est une bonne solution) : 
<?php //message


// Vérification si envoie du formulaire
if (filter_has_var(INPUT_POST, 'submit')) {
   // Variables des champs du formulaire
   $name = $_POST['name'];
   $email = $_POST['mail'];
   $message = $_POST['message'];

   // Vérification si les champs sont rempli
   if (!empty($name) && !empty($email) && !empty($message)) {
      // Ok
      // Vérification sur le mail
      if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
         // Non
         $msg = 'Veuillez entrer un email valide';
      } else {
         // Ok
         // Préparation du mail
         $toEmail = '*****';
         $subject = 'Contact via formulaire ' .$name;
         $body = '<h2>Demande de contact</h2>
            <h4>Nom</h4><p>'.$name.'</p>
            <h4>Mail</h4><p>'.$email.'</p>
            <h4>Message</h4><p>'.$message.'</p>
         ';
         // Headers
         $headers = "MIME-Version: 1.0" ."\r\n";
         $headers.= "Content-Type:text/html;charset=UTF-8" . "\r\n";
         $headers.= "De: " .$name." ".$email. "\r\n";
      
         if (mail($toEmail, $subject, $body, $headers)) {
            // mail envoyé
            $msg = "Merci de m'avoir contacté, je vous répondrai dans les plus bref délai";
         } else {
            // mail non reçu
            $msg = "Votre mail n'a pas pu être envoyé";
         }

      
      }
   } else {
      // Non
      $msg = 'Veuillez remplir tout les champs';
   }

}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
   <meta charset="utf-8">
   <title>Développeur web - Amaury Letapissier</title>
   <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css" integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp" crossorigin="anonymous">
   <link rel="stylesheet" type="text/css" href="css/style.css">
   <script type="text/javascript" src="js/main.js"></script>
</head>
<body>
   <div class="pimg1">
      <div class="ptext">
         <span class="border">
            Titre
         </span>
      </div>
   </div>

   <section class="section section-dark">
      <h2>Qui suis-je</h2>
      <p>
         Bio
      </p>
   </section>

   <div class="pimg2">
      <div class="ptext">
         <span class="border trans">
            Mes projets
         </span>
      </div>
   </div>

   <section class="section section-dark">
      <h2>Mes premières tentatives</h2>
      <div class="projets">
         <Projets
      </div>
   </section>

   <div class="pimg3">
      <div class="ptext">
         <span class="border trans">
            Me contacter
         </span>
      </div>
   </div>

   <section class="section section-dark">
      <h2>Retrouvez moi sur les réseaux sociaux</h2>
      <div class="reseaux">   
         réseaux sociaux
      </div>
      <p>
         Vous pouvez également m'envoyer un mail via le formulaire en bas de page où directement à <a href="***">****</a>
      </p>
   </section>

   <div class="pimg1">
      <form id="form" action="" method="POST">
         <input type="text" name="name" placeholder="Nom, Prénom" <?php if (isset($_POST['name']) === true) { echo 'value="', strip_tags($_POST['name']), '"';} ?>>
         <input type="text" name="mail" placeholder="Votre e-mail" <?php if (isset($_POST['mail']) === true) { echo 'value="', strip_tags($_POST['mail']), '"';} ?>>
         <textarea  name="message" placeholder="Votre message"><?php if (isset($_POST['message']) === true) { echo strip_tags($_POST['message']);} ?></textarea>
         <button type="submit" name="submit" onclick="redirection()">Envoyer</button>
      </form>
      <div class="message">
         <?php if(isset($msg)): ?>
         <?php echo $msg ?>
      <?php endif; ?>
      </div>
   </div>
</body>
</html>

Mon soucis arrive lorsque j'essaye de séparer la première partie du php dans un fichier contactform.php (rajouté dans l'action du formulaire bien sûr). Je n'arrive plus à afficher les erreurs et y'a il une une meilleure solution que de faire un header('Location: index.php?#form) qui dans tout les cas n'affiche pas les erreurs avec ou sans le #form.
ThomasLBA

ThomasLBA Le 26 mai 2018 à 10:40 (Édité le 27 mai 2018 à 09:56)

Si tu tiens à faire une redirection et à utiliser une autre page, fais le totalement en PHP, tu peux utiliser la super variable de session :
$_SESSION["msg"]
qui te permet de sauvegarder ta variable à travers les pages, pour la redirection : simplement une petite redirection :
header("Location: page.php")
ensuite arrivé sur ta page, tu peux afficher le message s’il existe et le détruire juste après :
<?php if(isset($_SESSION["msg"])): ?>
  <div class="message">
    <?= $_SESSION["msg"] ?>
    // Permet d’afficher une variable sans passer par « echo », ici pas besoin de « ; »
  </div>
  <?php unset($_SESSION["msg"]); ?>
<?php endif; ?>
PS : N’oublie pas de démarrer ta session au tout début de ta page, avant tout affichage de code HTML, de texte, et sans aucun espace avant au rique d’avoir une erreur qui s’affiche !!!
Exemple :
<?php session_start(); ?>
<!DOCTYPE html>
<html>
  code ...
</html>
Gyadarun

Gyadarun Le 28 mai 2018 à 10:40

Merci de ta réponse, je suis finalement parvenu à ce que je voulais avec du jquery, mais je testerai ca pour voir en php
ThomasLBA

ThomasLBA Le 2 juin 2018 à 10:15

Content d'avoir pu aider 😉
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte