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>";
?>
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.
Ajouter une redirection JS après votre alerte puis
echo "<script>
alert('message sent succesfully');
window.history.go(-1);
</script>";
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>
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.
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");