yopisan
@yopisan (kota)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

問い合わせ完了後に再度、問い合わせの入力画面に行く場合は、セッションの値はクリアする

問い合わせ完了後に再度、問い合わせの入力画面に行く場合は、セッションの値をクリアにしたい

今現在お問い合わせフォームの作成をしており、問い合わせ完了後に再度、問い合わせの入力画面に行くと、直前に入力してた値が各フォームに残ったままになっています。問い合わせ送信完了後は、もうその値を保持している必要はないので、この場合どこを変えればいいのかご教授していただければ幸いです。

contact.php
 <?php include 'layouts/header.php'; ?>
    <?php  session_start() ?>
    <div class="form-wrapper">
      <div class="error">
        <h1>
          <?php 
            if(isset($_SESSION["texts"])){
            foreach($_SESSION["texts"] as $error){
              echo $error."<br>";
              }
            }?>
        </h1>
      </div>        
      <div class="form">
        <div class="form-title">
          <h1>お問い合わせ</h1>
        </div>
        <div class="form-main">
          <div class="back">  
            <h2>下記の項目をご記入の上送信ボタンを押してください</h2>
          </div>  
            <p>送信頂いた件につきましては、当社より折り返しご連絡を差し上げます。<br>
               なお、ご連絡までに、お時間を頂く場合もございますので予めご了承ください。<br>
            <span>*</span>は必須項目となります。</p>
            <form action="" method="POST">
              <div class="form-contents">
                <div class="form-content">
                  <h3>氏名<span>*</span></h3>
                  <input type="text" name="name" 
                    value="<?php 
                      if(!empty($_SESSION["name"])){
                        echo $_SESSION["name"];
                      }
                      ?>" placeholder="山田太郎" class="inputName">
                </div>
                <div class="form-content">
                  <h3>フリガナ<span>*</span></h3>
                  <input type="text" name="kana" 
                    value="<?php 
                      if(!empty($_SESSION["kana"])){
                        echo $_SESSION["kana"];
                      }
                      ?>" placeholder="ヤマダタロウ" class="inputKana">
                </div>
                <div class="form-content">
                  <h3>電話番号</h3>
                  <input type="text" name="phone" 
                  value="<?php 
                  if(!empty($_SESSION["phone"])){
                    echo $_SESSION["phone"];
                  }
                  ?>" placeholder="09012345678" class="inputPhone">
                </div>
                <div class="form-content">
                  <h3>メールアドレス<span>*</span></h3>
                  <input type="text" name="address"
                    value="<?php 
                    if(!empty($_SESSION["address"])){
                      echo $_SESSION["address"];
                    }
                    ?>" placeholder="test@test.co.jp" class="inputAddress">
                </div>
              </div>
              <div class="back">  
                <h2>お問い合わせ内容をご記入ください<span>*</span></h2>
              </div>  
              <textarea name="question" class="inputQuestion"><?php 
                if(!empty($_SESSION["question"])){
                  echo $_SESSION["question"];
                }?></textarea><br>
              <input type="submit" value="送    信" class="form-submit" formaction="validate.php" >
            </form>
          </div>
        </div>

    </div>
    <?php include 'layouts/footer.php'; ?>

confirm.php
<?php
  session_start();
  $referer = $_SERVER['HTTP_REFERER']; 
  $url = "contact.php"; 
  if(!strstr($referer,$url)){
    header("Location: contact.php");
    exit;
  }
  unset($_SESSION["texts"]);
    $_POST = &$_SESSION;
?>


    <?php include 'layouts/header.php'; ?>

    <div class="form-wrapper">
      <div class="form">
        <div class="form-title">
          <h1>お問い合わせ</h1>
        </div>
      <div class="confirm-group">
        <form>
          <p class=confirm-text>
            下記の内容をご確認の上送信ボタンを押してください<br>
            内容を訂正する場合は戻るを押してください。
          </p>

          <div class="confirm-contents">
            <div class="confirm-content">
              <h1>氏名</h1>
              <h2><?php echo htmlspecialchars($_POST["name"], ENT_QUOTES, 'UTF-8'); ?></h2>
            </div>
            <div class="confirm-content">
              <h1>フリガナ</h1>
              <h2><?php echo htmlspecialchars($_POST["kana"], ENT_QUOTES, 'UTF-8');  ?></h2>
            </div>
            <div class="confirm-content">
              <h1>電話番号</h1>
              <h2><?php echo htmlspecialchars($_POST["phone"], ENT_QUOTES, 'UTF-8'); ?></h2>
            </div>
            <div class="confirm-content">
              <h1>メールアドレス</h1>
              <h2><?php echo htmlspecialchars($_POST["address"], ENT_QUOTES, 'UTF-8'); ?></h2>
            </div>
            <div class="confirm-content">
              <h1>お問い合わせ内容</h1>
              <h2><?php echo nl2br(htmlspecialchars($_POST["question"], ENT_QUOTES, 'UTF-8')); ?></h2>
            </div>
          </div>
          <div class="buttons">
            <input type="submit" value="送   信" class="confirm-submit" formaction="complete.php">
            <input type="submit" value="戻   る" class="confirm-return" formaction="contact.php">
          </div>
        </form>
      </div>
    </div>
  </div>
    <?php include 'layouts/footer.php'; ?>

complete.php
<?php
  session_start(); 
  $referer = $_SERVER['HTTP_REFERER']; 
  $url = "confirm.php";
  if(!strstr($referer,$url)){
    header("Location: contact.php");
  exit;
  }
  $_POST = $_SESSION;
?>
  <?php include 'layouts/header.php'; ?>

  <section>
    <div class="form" style= "margin-top:50px; margin-bottom:50px;">
      <div class="form-title">
        <h1>お問い合わせ</h1>
      </div>
      <div class="complete-main">
          <p class=complete-text>
            お問い合わせ頂きありがとうございます。<br>
            送信頂いた件につきましては、当社より折り返しご連絡を差し上げます。<br>
            なお、ご連絡までに、お時間を頂く場合もございますので予めご了承ください。
          </p>
        <div class="top">
          <a href="index.php">トップへ戻る</a>
        </div>
      </form>
    </div>
  </div>
  </section>

<?php include 'layouts/footer.php'; ?>

自分で試したこと

参考資料:https://techacademy.jp/magazine/23021
ただここの部分であっているのか、あまり自信がないためアドバイスをお願いいたします。

0

1Answer

セッション値を破棄

マニュアルにも記載されていますよ。

変数を $_SESSION から削除する
session_start();
unset($_SESSION['count']);

警告 unset($_SESSION)によって 全ての$_SESSIONを初期化してはいけません。 $_SESSIONスーパーグローバル変数を用いた セッション変数の登録ができなくなってしまうからです。

$_SESSIONでセッションを破棄する
session_start();

// セッション変数を全て解除する
$_SESSION = array();

余談

$_POST = $_SESSION;のようなことはしません。
$_POSTは送信されたPOSTパラメータを表しますが、これを変更するとその意味が変わってしまいます。つまり、わかりにくくなります。
面倒でも別の変数に移し替えましょう。

この考え方は$_POST以外の変数でも同じです。
変数の値を変更すると、その変化を記憶しておかなくてはいけません。しかし、人間の記憶力には限界があります。
記憶力を超えるプログラムを書いてしまうと、よくわからなくなってきます。

0Like

Your answer might help someone💌