web-dev-qa-db-fra.com

Comment revenir à la page précédente après un formulaire de soumission avec php?

J'ai un formulaire en HTML dont l'attribut "action" appelle un fichier contact.php. Le problème est qu’après avoir envoyé le formulaire, le fichier visible est une page vierge portant l’adresse contact.php et je souhaite revoir le formulaire de la page principale.

HTML:
<form id="myForm" action="php-contact/contact.php"
                       method="post" class="contact_form" autocomplete="off"
                       role="form">
                          <div class="form-group">
                            <label for="input-subject">subject</label>
                            <input name="subject" type="text" class="form-control" id="subject" placeholder="your subject" maxlength="20"/>
                          </div>

                          <div class="form-group">    
                              <label for="input-name">name</label>
                              <input name="name"  type="text" class="form-control" id="name" placeholder="your name" maxlength="20"/>
                          </div>

                          <div class="form-group">    
                            <label for="input-email">email address</label>
                            <input name="email"  type="text" class="form-control" id="email" placeholder="your email" maxlength="40"/>
                          </div> 

                          <div class="form-group" >   
                              <label for="input-message">message</label>
                              <textarea name="message" cols="10" rows="10"  class="form-control" id="comment" ></textarea>
                          </div>  

                          <button name="myFormSubmitted" type="submit" class="btn btn-primary btn-lg btn-block">send</button>
                      </form>

PHP:
  <?php
  $name = $_POST['name'];
  $email = $_POST['email'];
  $subject = $_POST['subject'];
  $message = $_POST['message'];

  $to = "[email protected]";
  $message = '
  name: '.$name.'
  email: '.$email.'
   message: '.$message.'
  ';

 $headers = 'From: [email protected]';

   if (
    mail($to, $subject, $message, $headers)
) 
      echo"<script>alert('message send succesfully')</script>";
   else
      echo"<script>alert('message not send')</script>";

 ?>
4
industriales-blue

Utilisez $_SERVER["HTTP_REFERER"] ou utilisez un champ masqué sur le formulaire avec l'URL de la page en cours:

<form action="myAction.php">
    <input type="hidden" name="destination" value="<?php echo $_SERVER["REQUEST_URI"]; ?>"/>
    <!-- other form inputs -->
    <input type="submit"/>
</form>

monAction.php

<?php
  /* Do work */
  if(isset($_REQUEST["destination"])){
      header("Location: {$_REQUEST["destination"]}");
  }else if(isset($_SERVER["HTTP_REFERER"])){
      header("Location: {$_SERVER["HTTP_REFERER"]}");
  }else{
       /* some fallback, maybe redirect to index.php */
  }

Et même dans ce cas, vous devriez avoir des solutions de rechange au cas où le client ne respecterait pas les redirections HTTP, comme une redirection javascript, une méta-redirection et un lien vers la destination.

8
Nick Beeuwsaert

Ajouter une redirection JS après votre alerte puis

echo "<script>
             alert('message sent succesfully'); 
             window.history.go(-1);
     </script>";
5
Hanky Panky

Je ne me sens pas très content d’afficher cette réponse car elle ne fait que concaténer deux autres SO réponses. 

Première partie

La réponse de Charlie74 sur cette page

// add the message you want to show to the user
header("Location: yourfilenamehere.php?alertmsg=message+send+succesfully"); 
exit();

Deuxième partie, contrôle du nom alertmsg dans la chaîne de requête

Voir SO post pour getParameterByName:

function getParameterByName(name) {
    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
        results = regex.exec(location.search);
    return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}

dans la page que vous redirigez, appelez la fonction getParameterByName:

<script>
var msg = getParameterByName('alertmsg');

if (alertmsg.length > 0) {
    alert(msg);
}
</script>
0
robbmj

Dans votre fichier contact.php, utilisez quelque chose comme à la fin du code PHP:

header("location:yourfilenamehere.php");    

Cela redirigera vers la page que vous spécifiez.

0
Charlie74

Vous pouvez faire deux choses ...

1) Avoir votre logique php dans le fichier de formulaire et soumettre à ce fichier. Sur le dessus du fichier, mettez quelque chose comme:

if(isset($_POST['name'])) {
// your sending logic
}

suivi de votre formulaire.

2) utilisez la fonction header () pour rediriger vers votre formulaire.

header("Location: form.html"); 
0