web-dev-qa-db-ja.com

PHPでフォームを送信した後、前のページに戻る方法は?

「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>";

 ?>
6

$_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リダイレクトを尊重しない場合に備えて、フォールバックが必要です。

11
Nick Beeuwsaert

アラートの後にJSリダイレクトを追加します

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

他の2つのSO回答を連結しているだけなので、この回答を投稿するのはかなり悪いと思います。

前編

このページのCharlie74の回答

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

2番目の部分では、クエリ文字列のalertmsg名を確認します

SO 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, " "));
}

リダイレクトしているページでgetParameterByName関数を呼び出します。

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

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

Contact.phpファイルで、PHPコードの最後にあるようなものを使用します。

header("location:yourfilenamehere.php");    

これにより、指定したページにリダイレクトされます。

0
Charlie74

あなたは2つのことをすることができます...

1)phpロジックをフォームファイルに入れ、そのファイルに送信します。ファイルの先頭に、次のように記述します。

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

フォームが続きます。

2)header()関数を使用してフォームにリダイレクトします。

header("Location: form.html");