質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.65%

PHPで複数のチェック・ボックスの値を保持したいです

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,463

dog57

score 119

PHPで複数のチェック・ボックスの値を保持したいです。

入力フォーム→確認フォーム→登録完了 
上記のように画面を作成しています。

確認フォームから入力フォームに戻るボタンで戻る時に
複数のチェック・ボックスの値が保持されるようにするにはどうしたらよいのでしょうか?

原因が全く分からず、苦戦しております。
ご教授いただけると嬉しいです。
よろしくお願いします。

*Twigを使用しています

registartion_form.html (登録フォーム) 一部抜粋

  <!-- インラインチェックボックス 趣味 -->
        <div class="form-group">
            <label class="control-label col-md-4" for="checkbox">趣味 <span class="label label-info">任意</span></label>
            <div class="col-md-4">
              <div class="checkbox">
                  <label class="checkbox-inline">
                      <input name="hobby['baseball']" type="checkbox" value="野球" {% if hobby.baseball is defined %} checked {% endif %}> 野球
                    </label>
                    <label class="checkbox-inline">
                      <input name="hobby['football']" type="checkbox" value="サッカー" {% if hobby.football is defined %} checked {% endif %} > サッカー
                    </label>
              </div>
            </div>
          </div>

registartion_form.php (登録フォーム)

hp
// 開発時にこれを書かないのはNG
ini_set('display_errors', true);
error_reporting(E_ALL);

session_start();
print_r($_SESSION);


// 文字化けを治す
header("Content-type: text/html; charset=utf-8");

// 変数の定義(初期化)
$name = "";
$email = "";
$password = "";
$tel = "";
$prefectures = "";
$hobby = "";
$gender = "";
$contact = "";

$errorMsg = '';



// エラーメッセージ
if (count($errorMsg) >= 1) {
    $errorMsg = $_SESSION['errorMsg'];
}

//
// 確認フォームから戻った時のデータ保持
//

// name の入力データ保持
if ($_SESSION['name'] === $_SESSION['name']) {
    $name = $_SESSION['name'];

}

//email の入力データの保持
if ($_SESSION['email'] === $_SESSION['email']) {
    $email = $_SESSION['email'];

}

//password の入力データの保持
if ($_SESSION['password'] === $_SESSION['password']) {
    $password = $_SESSION['password'];

}

//tel の入力データの保持
if ($_SESSION['tel'] === $_SESSION['tel']) {
    $tel = $_SESSION['tel'];

}

//prefectures の入力データの保持
if ($_SESSION['prefectures'] === $_SESSION['prefectures']) {
    $prefectures = $_SESSION['prefectures'];

}

// hobby の入力データの保持
if ($_SESSION['hobby'] === $_SESSION['hobby']) {
    $hobby = $_SESSION['hobby'];

}


// gender の入力データの保持
if ($_SESSION['gender'] === $_SESSION['gender']) {
    $gender = $_SESSION['gender'];

}

// contact の入力データの保持
if ($_SESSION['contact'] === $_SESSION['contact']) {
    $contact = $_SESSION['contact'];

}





//
// Twig
//


// Composerで作成されたautoload.phpを読み込む
require_once('../vendor/autoload.php');
// Twig_loader_Filesystemを使う。registration_form.phpからのtemplatesディレクトリを指定。(相対パス)
$loader = new Twig_Loader_filesystem('../templates');
// $loaderをTwigの環境設定として twig instance を生成
$twig = new Twig_Environment($loader);



// render
echo $twig->render('registration_form.html', array(

  'name' => $name,
  'email' => $email,
  'password' => $password,
  'tel' => $tel,
  'prefectures' => $prefectures,
  'hobby' => $hobby,
  'gender' => $gender,
  'contact' => $contact,

  'errorMsg' => $errorMsg


  )
);

confirm.html(確認フォーム)

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="utf-8">
    <title>確認フォーム</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" media="screen">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">

</head>
<body>


  <form class="form-horizontal" action="registration_insert.php" method="post">
    <fieldset>

      <!-- Form Name -->
      <legend style=background-color:#65ace4;><h1 style=text-align:center;>確認フォーム</h1></legend>

      <ol class="breadcrumb">
          <li><a href="index.php"><span class="glyphicon glyphicon-home" aria-hidden="true"></span>トップ</a></li>
          <li><a href="registration.html">新規登録フォーム</a></li>
          <li class="active">確認フォーム</li>
        </ol>




   <div class="container">

      <div class="form-group">
          <label class="col-sm-5 control-label">氏名</label>
          <div class="col-sm-5">
              <p class="form-control-static"> {{ name }} </p>
          </div>
      </div>


      <div class="form-group">
          <label class="col-sm-5 control-label">メールアドレス</label>
          <div class="col-sm-5">
              <p class="form-control-static"> {{ email }} </p>
          </div>
      </div>


      <div class="form-group">
          <label class="col-sm-5 control-label">パスワード</label>
          <div class="col-sm-5">
              <p class="form-control-static"> {{ password }} </p>
          </div>
      </div>


   <div class="form-group">
     <label class="col-sm-5 control-label">電話番号</label>
     <div class="col-sm-5">
       <p class="form-control-static"> {{ tel }} </p>
     </div>
   </div>


   <div class="form-group">
     <label class="col-sm-5 control-label">都道府県</label>
     <div class="col-sm-5">
       <p class="form-control-static"> {{ prefectures }} </p>
     </div>
   </div>


   <div class="form-group">
     <label class="col-sm-5 control-label">趣味</label>
     <div class="col-sm-5">
         <p class="form-control-static">


        <!-- Twig -->
        {% for value in hobby %}

          {{ value }}

        {% endfor %}


        </p>
     </div>
   </div>

   <div class="form-group">
     <label class="col-sm-5 control-label">性別</label>
     <div class="col-sm-5">
         <p class="form-control-static"> {{ gender }} </p>
     </div>
   </div>


   <div class="form-group">
     <label class="col-sm-5 control-label">お問い合わせ</label>
     <div class="col-sm-5">
       <p class="form-control-static"> {{ contact }} </p>
     </div>
   </div>


   <div class="button-group">
     <div class="col-md-5 col-sm-offset-5 col-sm-7 col-xs-offset-4 col-xs-8">
       <a href="registration_form.php">
         <button type="button" name="singlebutton" class="btn btn-primary" id="singlebutton" onclick="history.back()">戻る</button>
       </a>
       <button type="submit" class="btn btn-primary">送信する</button>
       <p class="help-block" style=margin-top:15px;>以上の内容でよろしければ、送信ボタンを押してください。</p>
     </div>
   </div>





</div>
     </fieldset>
  </form>



  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
  </body>
  </html>

confirm.php (確認フォーム) 一部抜粋

<?php
// 開発時にこれを書かないのはNG
ini_set('display_errors', TRUE);
error_reporting(E_ALL);

session_start();
print_r($_SESSION);

// 文字化けを治す
header("Content-type: text/html; charset=utf-8");

// POST時
if (filter_input(INPUT_SERVER, 'REQUEST_METHOD') == 'POST') {


    $_SESSION["name"] = filter_input(INPUT_POST, 'name');
    $_SESSION["email"] = filter_input(INPUT_POST, 'email');
    $_SESSION["password"] = filter_input(INPUT_POST, 'password');
    $_SESSION["tel"] = filter_input(INPUT_POST, 'tel');
    $_SESSION["prefectures"] = filter_input(INPUT_POST, 'prefectures');
    $_SESSION["hobby"] = filter_input(INPUT_POST, 'hobby', FILTER_DEFAULT,FILTER_REQUIRE_ARRAY);
    $_SESSION["gender"] = filter_input(INPUT_POST, 'gender');
    $_SESSION["contact"] = filter_input(INPUT_POST, 'contact');

    $name  = $_SESSION["name"];
    $email  = $_SESSION["email"];
    $password  = $_SESSION["password"];
    $tel  = $_SESSION["tel"];
    $prefectures  = $_SESSION["prefectures"];
    $hobby  = $_SESSION["hobby"];
    $gender = $_SESSION["gender"];
    $contact  = $_SESSION["contact"];
}




//
// Twig
//

// Composerで作成されたautoload.phpを読み込む
require_once ('../vendor/autoload.php');
// Twig_loader_Filesystemを使う。confirm.phpからのtemplatesディレクトリを指定。(相対パス)
$loader = new Twig_Loader_filesystem('../templates');
// $loaderをTwigの環境設定として twig instance を生成
$twig = new Twig_Environment($loader);


// render
echo $twig->render('confirm.html', array (

   'name' => $name,
   'email' => $email,
   'password' => $password,
   'tel' => $tel,
   'prefectures' => $prefectures,
   'hobby' => $hobby,
   'gender' => $gender,
   'contact' => $contact,

   'errorMsg' => $errorMsg,
   'string' => $string


   )
);
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

history.backは完全にブラウザ依存の戻る機能になるため、戻ったあとの描画もブラウザまかせになります。なのでそれでうまくいかない場合はどうしようもない可能性があります。

戻るボタンをsubmitにして戻るようにすれば単純なpostの画面遷移なので自分で全部制御できます。(とはいえブラウザの戻る機能を使っちゃう人もいるので完全な解決はできませんのである程度は諦めるしかないと思いますが)

もしsubmitで戻るようにしてもおかしいようなら不具合があると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/02/03 11:06 編集

    submitで作成したところ、できました!
    ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.65%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる