「action」属性がcontact.phpファイルを呼び出すhtmlのフォームがあります。問題は、フォームを送信した後、表示されるファイルがアドレスcontact.phpの空白ページであり、メインページのフォームをもう一度表示したいということです。
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>";
?>
$_SERVER["HTTP_REFERER"]
または、現在のページのURLを含むフォームの非表示フィールドを使用します。
<form action="myAction.php">
<input type="hidden" name="destination" value="<?php echo $_SERVER["REQUEST_URI"]; ?>"/>
<!-- other form inputs -->
<input type="submit"/>
</form>
myAction.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 */
}
そして、それでもクライアントが何らかのリダイレクトJavaScript、メタリダイレクト、宛先へのリンクなどのHTTPリダイレクトを尊重しない場合に備えて、フォールバックが必要です。
アラートの後にJSリダイレクトを追加します
echo "<script>
alert('message sent succesfully');
window.history.go(-1);
</script>";
他の2つのSO回答を連結しているだけなので、この回答を投稿するのはかなり悪いと思います。
前編
このページのCharlie74の回答
// add the message you want to show to the user
header("Location: yourfilenamehere.php?alertmsg=message+send+succesfully");
exit();
2番目の部分では、クエリ文字列のalertmsg名を確認します
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, " "));
}
リダイレクトしているページでgetParameterByName
関数を呼び出します。
<script>
var msg = getParameterByName('alertmsg');
if (alertmsg.length > 0) {
alert(msg);
}
</script>
Contact.phpファイルで、PHPコードの最後にあるようなものを使用します。
header("location:yourfilenamehere.php");
これにより、指定したページにリダイレクトされます。
あなたは2つのことをすることができます...
1)phpロジックをフォームファイルに入れ、そのファイルに送信します。ファイルの先頭に、次のように記述します。
if(isset($_POST['name'])) {
// your sending logic
}
フォームが続きます。
2)header()関数を使用してフォームにリダイレクトします。
header("Location: form.html");