• ベストアンサー

php入力画面から確認画面へ情報の受け渡しについて

php 参考書を見て、入力フォームを作成しているのですが、入力画面から確認表示画面へ情報の受け渡しについて。コードは下に記載してます。 最初の入力画面ではmethod=postで送信した値を$name = $_POST['name'];に格納して次ページに値を渡すそうですが、 しかし最初の入力画面のコードに$name = $_POST['name'];と、もうひとつ、$name = $_SESSION['name'];でセッションに保存して、次ページに送るそうですが、 保存したSESSIONの値は次ページの確認表示画面から戻る際に値を保持する際に使うからだそうですが、値を次ページに送る役割が$_POSTやSESSIONにあるならば、SESSIONの記述のみで 次ページに送れると思うのですが、なぜこのコードの場合、$_POSTに値を格納する必要があるのでしょうか? 以下のような解釈で正しいでしょうか?? 「$_POSTは送られた値をフォームのvalue内にechoで出力するため、SESSIONはページから戻る場合に値を保持するため」 回答よろしくお願いいたします。 コード 入力初期画面 <?php session_start(); $errors = array(); if(isset($_POST['submit'])){ $name = $_POST['name']; if($name === ""){ $errors['name'] = "お名前が入力されていません。"; } if(count($errors) ===0){ $_SESSION['name'] = $name; header('Location:https:次ページへform2.php'); exit(); } } ?> <body> <form action="form1.php" method="post"> お名前 <input type="text" name="name" value="<?php if(isset($name)){echo $name;}?>"> <input type="submit" name="submit" value="確認画面へ"> </body> コード 確認表示画面 <?php session_start(); if(isset($_SESSION['name'])){ $name = $_SESSION['name']; } <body> <form action="form3.php" method="post"> お名前 <?php echo $name;?> <input type="submit" name="submit" value="送信する"> p><a href="form1.php?action=edit">入力画面へ戻る</a></p> </body>

  • PHP
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

これ、目的はバリデーションですね。 if($name === ""){ $errors['name'] = "お名前が入力されていません。"; } if(count($errors) ===0){ $_SESSION['name'] = $name; $nameが適切な値だった場合に、セッション格納という 判定を加えているためですね。なので、 絶対に問題がない確信があるなら、 $_SESSION['name'] = $_POST['name']; 確かにこれでもいい! しかし、これでは、nameという変数があるのかないのか? nameの中身があるのかないのか?が 一切チェックできない。。 の理由から、バリデーターを挟んでいるソース。 に見えます。

hayosat
質問者

お礼

回答ありがとうございます。

その他の回答 (1)

回答No.2

確かに、 「$_POSTは送られた値をフォームのvalue内にechoで出力するため、SESSIONはページから戻る場合に値を保持するため」 これのみが目的なら、 <?php echo $name;?> <input type="hidden" name="name" value="<?= $name ?>"> <input type="submit" name="submit" value="送信する"> でもよさそうですが。

hayosat
質問者

お礼

回答ありがとうございます。

関連するQ&A

  • 前画面遷移した際に前回入力した値を入力してある状態

    前画面遷移した際に前回入力した値を入力してある状態にしたいです。 javascriptとPHPで入力フォームのコードを書いているのですが、入力フォーム(①画面)にて両方の言語で重複で値を保持したいです。 流れとしては、①入力フォーム→②確認画面なのですが。 PHPでは保持のコードは書けています。これをJavaScriptでも保持して重複保持したいです。 以下のURLを参考にしたのですが、 値の保持にsessionStorageというのがあるらしいです。 https://developer.mozilla.org/ja/docs/Web/API/Window/sessionStorage URLを参考に下の方にコードを書いてみたのですが、入力フォームを埋めて送信ボタンを押しても付属画像のようにメッセージが出て、次に進めません。どこが間違っているで ましょうか? 回答よろしくお願いいたします。 ●●①入力フォームのコード <?php session_start(); $errors = array(); if(isset($_POST['submit'])) { $name = $_POST['name']; $name = htmlspecialchars($name, ENT_QUOTES); if($name === "") { $errors['name'] ="名前が入力されていません。 "; } if(count($errors) === 0) { $_SESSION['name'] = $name; /* 確認画面の表示, */ header('Location:http:▼▼'); exit(); } } if(isset($_GET['action']) && $_GET['action'] === 'edit'){ $name = $_SESSION['name']; } ?> <?php echo "<ul>";foreach($errors as $value) { echo "<li>"; echo $value; echo "</li>"; } echo "</ul>"; ?> <!DOCTYPE html> <html lang="ja"> <head> <meta content="text/html; charset=utf-8" /> <title></title> <script src="jquery-3.6.0.min.js"></script> <style type="text/css"> </style> </head> <body> <form action="orm1.php" method="post" id="form"> <p> 名前 </p> <input type="text" class="name" name="name" id="name" value="<?php if(isset($name)){ echo $name; } ?>" /> <button type="submit" id="submit" name="submit" class="auto-style4"> 送信</button> </form> </body> <script> const form = document.querySelector('#form'); const name = document.querySelector('#name'); form.addEventListener('submit', function(event) { let msg = ""; if (name.value == "") msg += "名前が入力されていません。\n"; if (msg == "") return; event.preventDefault(); alert(msg); }); var key = 'date_key'; var set_value = sessionStorage.getItem(key); $('name').val(set_value); $('name').on('change', function () { var value = $('#name').val(); sessionStorage.setItem(key, value); }); </script> </html>

  • PHP、確認画面の画像を自作の画像をクリックする

    PHP、確認画面の画像を自作の画像をクリックすることで、入力情報の確認表示画面を表示させたいのですが、上手くいきません。今までは入力された情報確認画面の表示で 一番したの方にある<p colspan="2"><input type ="submit" name ="submit"value="確認画面へ"></p> "確認画面へ" というボタンを押すことで次ページに行けたのですが、 "確認画面へ"のボタンをオリジナルの画像(付属画像名sss.png)という画像をクリックして同じように確認画面の次ページに行きたいのですが、以下のコードで <a href="sample2.html"><img src=”sss.png" alt="次へ"></a> で一応画像をクリックすれば、次ページに行けますが情報が送られていません。 <p colspan="2"><input type ="submit" name ="submit"value="確認画面へ"></p> のコードに画像を加えたコードはどう書いたらよいでしょうか? 困っています。回答よろしくお願い致します。 <?php session_start(); $errors = array(); if(isset($_POST['submit'])) { $email = $_POST['email']; if($email === "") { $errors['email'] ="メールアドレスが入力されていません。 "; } if(count($errors) === 0) { $_SESSION['email'] = $email; header('Location:http://◎◎◎.php'); exit(); } } if(isset($_GET['action']) && $_GET['action'] === 'edit'){ $email = $_SESSION['email']; } ?> <!DOCTYPE html> <html> <head> <meta content="text/html; charset=utf-8"/> <title>お問い合わせ</title> <link rel="stylesheet" href="syoki.css"> <style> <?php echo "<ul>";foreach($errors as $value) { echo "<li>"; echo $value; echo "</li>"; } echo "</ul>"; ?> </head> <body> <form action ="hpform1.php" method ="post" class="auto-style1"> <div class="auto-style1"> <p class="px-num"> メールアドレス:※ </p> <input type="text" class="email" name="email" id="email" value="<?php if(isset($email)){ echo $email; } ?>"/> <p></p> <p colspan="2"><a href="sample2.html"></a><input type ="submit" name ="submit"value="確認画面へ"></p> <a href="sample2.html"><img src="next.png" alt="次へ"></a> </form> </body></html>

    • ベストアンサー
    • PHP
  • htmlとphpのデータ受け渡し???

    いつもお世話になり誠にありがとうございます。 標記の件。 まだ、ボク自身、解っていないようです。 htmlとphpのソースコードを提示します。 どうすればデータの受け渡しができるか? 添削してくださらないでしょうか? html <!--入力画面--> <form action = "./Blog.php" method = "get"> <label class="label" for="name">お名前(ニックネーム)</label> <center><input id="name" type="text" name="name"></center> <label class="label" for="e-mail">メール</label> <input id="e-mail" type="e-mail" name="e-mail"> <label class="label" for="category">カテゴリー</label> <input id="category" type="category" name="categoryl"> <label class="label" for="message">本文</label> <textarea name="area1" style="color:rgb(8, 8, 8); font-size:100%;" cols="50" rows="30"></textarea><br> <input type="submit" name="confiem" value="確認"> </form> CSS <meta charset="utf-8"> <?php session_start(); $mode = 'input'; if( isset($_POST['back']) && $_POST['back'] ){ //何もしない } else if( isset($_POST['confirm']) && $_POST['confirm'] ){ $_SESSION['name'] = $_POST['name']; $_SESSION['e-mail'] = $_POST['e-mail']; $_SESSION['category']= $_POST['category']; $_SESSION['message'] = $_POST['message']; $mode = 'confirm'; } else if( isset($_POST['send']) && $_POST['send'] ){ $mode = 'send'; } else { $_SESSION['name'] =""; $_SESSION['e-mail'] =""; $_SESSION['category']=""; $_SESSION['message'] =""; } ?> <!--確認画面--> <?php if( $mode == 'input' ){ ?> お名前(ニックネーム)<?php echo $_POST['name'] ?><br> Eメール<?php echo $_POST['e-mail'] ?><br> カテゴリー<?php echo $_POST['category'] ?><br> 本文<br> <?php echo nl2br($_POST['message']) ?><br> <input type="submit" name="back" value="戻る" /> <input type="submit" name="send" value="送信" /> <?php } else { ?> <!--完了画面--> <?php } ?> 上記の通りです。 全然ダメだと思います。 添削のほど、宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • セレクトボックスの選択を保持したい。入力フォーム。

    セレクトボックスの選択を保持したい。入力フォーム。PHP 送付画像のような、セレクトボックスの「時間指定1」で選択したい時間をセレクトボックスから選んで、確認画面へのボタンをクリックすると、「時間指定1」にまた、戻ってしまいます。ここのセレクトボックスの選択をキープしたいのですが、どうコードを書けば良いのかわかりません 提示したコードにもあるように 参考書に書いてあったのですが、セレクトボックスの選択をキープするプログラミングコードを以下のようにすれば良いと。そのまま書いてみたのですが、確認画面へのボタンをクリックすると、やはり「時間指定1」に戻ってしまいます。 <option value="10:00~11:00"><?php if(isset($timehh1) && $timehh1==="10:00~11:00") { echo "selected" ;} ?>>10:00~11:00</option> どこが間違っているのでしょうか? コードを教えて頂けないでしょうかいただけないでしょうか?よろしくお願いいたします。困っています。 以下書いたコードになります。 <?php session_start(); $errors = array(); if(isset($_POST['submit'])) { $time4 =$_POST['time4']; $timehh1 =$_POST['timehh1']; if($time4 === "") { $errors['time4'] ="第1希望:※月と日付を選択してください。 "; } if($timehh1 === "") { $errors['timehh1'] ="第1希望:※時間指定1を選択してください。 "; } if(count($errors) === 0) { $_SESSION['time4'] = $time4; $_SESSION['timehh1'] = $timehh1; } if(isset($_GET['action']) && $_GET['action'] === 'edit'){ $time4 = $_SESSION['time4']; $timehh1 = $_SESSION['timehh1']; } ?> <!DOCTYPE html> <html> <head> <meta content="text/html; charset=utf-8"/> <?php echo "<ul>";foreach($errors as $value) { echo "<li>"; echo $value; echo "</li>"; } echo "</ul>"; ?> </head> <body> <form action ="form1.php" method ="post"> <td class="b">第1希望:<span class="fontS">※</span></td> <input type="date" id="input_date1" class="cal lt_004 hasDatepicker" name="time4" value="<?php if(isset($time4)){ echo $time4; } ?>"/></td > <select id="input_time1" name="timehh1"> <option value="">時間指定1</option> <option value="10:00~11:00"><?php if(isset($timehh1) && $timehh1==="10:00~11:00") { echo "selected" ;} ?>>10:00~11:00</option> <option value="11:00~12:00"><?php if(isset($timehh1) && $timehh1==="11:00~12:00") { echo "selected" ;} ?>>11:00~12:00</option> </select > <input type ="submit" name ="submit"value="確認画面へ"/> </form> </body></html>

    • ベストアンサー
    • PHP
  • 入力フォームのエラーメッセージをJavaScrip

    付属の写真のようにエラーが出るようにしたいです。 提示したコードだけでは、エラーメッセージ文字が上の方に出てくるだけで、四角い図形も出てきません。 javascriptでエラーメッセージを出せれば、写真のようなになると思います。 そこでなのですが、 PHPのコードはそのまま崩さずjavascriptでも同じエラーメッセージ出すコードが書けません。どうコードを書いたら よいでしょうか? nameとquestionの2つフォームとがあります。 回答よろしくお願いいたします。 <?php session_start(); $errors = array(); if(isset($_POST['submit'])) { $plan = $_POST['plan']; $name = $_POST['name']; $question = $_POST['question']; if($name === "") { $errors['name'] ="名前が入力されていません。 "; } if($question === "") { $errors['question'] ="お問い合わせ内容入力(150文字以内)が入力されていません。 "; } if(count($errors) === $_SESSION['name'] = $name; $_SESSION['question'] = $question;     /* 確認画面の表示, */     header('Location:http://▼▼php');     exit();      }   }     if(isset($_GET['action']) && $_GET['action'] === 'edit'){   $name = $_SESSION['name']; $question = $_SESSION['question'];   }     ?> <!DOCTYPE html> <html lang="ja"> <head>     <meta content="text/html; charset=utf-8" />        <title>お問い合わせ画面</title>     <style type="text/css">       /* 入力フォームの位置 */       .auto-style1 { text-align: center; } </style> <?php echo "<ul>";foreach($errors as $value) { echo "<li>"; echo $value; echo "</li>"; } echo "</ul>"; ?> </head> <body> <form action="companyhp6form1.php" method="post"> <div class="auto-style1">  <p class="tel-titile">    名前:※             </p>             <input type="text" class="name" name="name" id="name" value="<?php if(isset($name)){ echo $name; } ?>" />   </div>     <div class="auto-style1">    <p class="tel-titile">                 お問い合わせ内容入力(150文字):             </p>                <textarea name="question" class="question" id="question" cols="40" rows="10" placeholder="150文字以内で入力して下さい。"></textarea>                                     </div>                     <div class="auto-style1">             <button type="submit" id="submit" name="submit" class="auto-style4">                送信</button>         </div>             </form>   </body>  <script src="main.js"></script> </html>

  • php $_SESSIONで値が消える。

    いつもお世話になり誠にありがとうございます。 標記の件。 インプット画面ー>確認画面ー>戻るー>インプット画面 インプット画面に戻った時、どうしても最初のインプット画面で打った内容が消えてしまいます。 プログラムを診て、誤りを指摘して頂けないでしょうか? どうぞよろしくお願い致します。           記 <?php session_start(); $mode = 'input'; if( isset($_POST['back']) && $_POST['back'] ){ //何もしない } else if( isset($_POST['confirm']) && $_POST['confirm'] ){ $_SESSION['name'] = $_POST['name']; $_SESSION['email'] = $_POST['email']; $_SESSION['category']= $_POST['category']; $_SESSION['message'] = $_POST['message']; $mode = 'confirm'; } else if( isset($_POST['send']) && $_POST['send'] ){ $mode = 'send'; } else { $_SESSION['name'] =""; $_SESSION['email'] =""; $_SESSION['category']=""; $_SESSION['message'] =""; } ?> <!DOCTYPE html> <html lang="ja"> <head> </head> <body> <div class="v_line_fix"> <h1>Blog K・T</h1> <h2><a href="index.html">トップページ</a></h2> <?php if( $mode=='input'){ ?> <form method=post> お名前(ニックネーム)<br> <input type="text" name="name" value="<?php echo $_SESSION['name'] ?>"><br> Eメール<br> <input type="email" name="email" value="<?php echo $_SESSION['email'] ?>"><br> カテゴリー<br> <input type="text" name="category" value="<?php echo $_SESSION['category'] ?>"><br> 本文<br> <textarea style="font-size:1.5em;" cols="30" rows="80" name="message"><?php echo $_SESSION['message'] ?></textarea><br> <input type="submit" name="confirm" value="確認" /> </form> <?php }else if( $mode=='confirm'){ ?> <!--確認画面--> <form method="post"> <?php echo $_SESSION['name']?><br> <?php echo $_SESSION['email']?><br> <?php echo $_SESSION['category']?><br> <br> <?php echo nl2br($_SESSION['message'])?><br> <input type="submit" name="back" value="戻る"/> <input type="submit" name="send" value="送信"/> } </form> <?php } else { ?> <!--完了画面--> <?php } ?> </body> </html>

    • ベストアンサー
    • PHP
  • 評価の星を選択した情報を確認画面で表示させたいです

    アマゾンの評価のような星をクリックすると星の数が選択されるスター評価のコードを書いてます。 選択した評価で星の数の情報をphpで確認表示画面に送るコードを書いたのですが、submitを押して次の画面には行くのですが、phpが間違っていると思いますが、選択した星が表示されなくて困っています。 コードは星選択フォーム画面と確認画面の2つのコードを提示しています。 回答よろしくお願いいたします。 ●星評価選択フォームの画面 b.php <?php session_start(); $errors = array(); if ($_POST) { $rate = filter_input(INPUT_POST, 'rate'); if (empty($rate)) { $errors[] = "評価をタップして下さい。"; } else { // 各星のラジオボタンに評価値を設定 $_SESSION['rate'] = $rate; header('Location:b2.php'); exit(); } } if (isset($_GET['action']) && $_GET['action'] === 'edit') { $rate = $_SESSION['rate']; } ?> <style> /* 選択の星のスタイル */ .rate-form { display: flex; flex-direction: row-reverse; justify-content: flex-end; } .rate-form input[type=radio] { display: none; } .rate-form label { position: relative; padding: 0 5px; color: #ccc; cursor: pointer; font-size: 35px; } .rate-form label:hover { color: #ffcc00; } .rate-form label:hover ~ label { color: #ffcc00; } .rate-form input[type=radio]:checked ~ label { color: #ffcc00; } <body> <form action="b2.php" method="post" id="form"> <div class="rate-form"> <!-- 各星に評価値を設定 --> <input id="star3" type="radio" name="rate" value="3"> <label for="star3">★</label> <input id="star2" type="radio" name="rate" value="2"> <label for="star2">★</label> <input id="star1" type="radio" name="rate" value="1"> <label for="star1">★</label> </div> <button id="submit" class="yohaku"></button> </form> ●確認表示画面のPHP <?php session_start(); // セッションから評価値を取得 $rate = isset($_SESSION['rate']) ? $_SESSION['rate'] : ''; ?> <style> /* 出力する星の大きさ */ .w { font-size: 35px; color: #ffcc00; } </style> <body> <form action="b3.php" method="post"> <div class="w"><?php echo $rate; ?></div> <input type="submit" name="submit" value="評価を送信"> </form> </body>

    • ベストアンサー
    • PHP
  • phpでSESSION変数の管理

    今私は、phpでページ間で変数をやり取りできる処理を作成しています。処理的には、ページAのテキストボックスtitleとテキストエリアsyosaiに入力された値をデータベースに追加し、ページBに画面を移動させるようにしたいと考えていますが、入力した値がnullになってしまい困っております。 ソースは以下のとおりです。 全部は書けませんので、怪しい部分だけ書きます。質問などがありましたら、その都度指摘をお願いします>△</ ページA ソース <form action="B.php" method="post"> <input type="text" name="title" value=""> <TEXTAREA name="syosai" cols="70" rows="10"> <input type="submit" name="b1" value="ページBへ"> <?php session_start(); if(!isset($_SESSION['title2']) || !isset($_SESSION['syosai2'])) { $_SESSION['title']=$_POST['title']; $_SESSION['syosai']=$_POST['syosai']; }else{} try{ $pdo = new PDO("mysql:host=localhost; dbname=****","****","****"); $stmt = $pdo->prepare("INSERT INTO user(clandername , syosai) VALUES(:rere3, :yuyu5)"); $stmt->bindValue(":rere3", $_SESSION['title']); $stmt->bindValue(":yuyu5", $_SESSION['syosai']); $stmt->execute(); }catch(PDOException $e){} ?> ページB ソース <form action="A.php"> <input type="submit" name="name" value="ページAへ" style="WIDTH: 70px; HEIGHT:50px"> <?php session_start(); ?> よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPで変数のデータ受け渡しについて

    HTMLで下記のようにして入力された データを次ページに受け渡し、 issetで変数に値が代入されていれば ifで分岐処理させたいのですが、 elseの処理しかできません。    <FORM action="次ページ.php" method="GET">    キーワード<BR>    <INPUT type="text" name="keyword">    <INPUT type="submit" value="ボタン"> ボタンをクリックしたら次ページで    if (isset($keyword)) {     分岐処理1;     }    else{     分岐処理2;     } と行いたいのですが、$keywordに値が 代入されているにも関わらず elseの処理がされてしまいます。 どこか構文が間違っているのでしょうか。 どうか教えてください。

    • ベストアンサー
    • PHP
  • PHP チェックボックスのhidden値受け渡し

    こんばんは。いつもお世話になっております。 初歩的な質問かと思いますが、hiddenでのデータの受渡で、配列でのチェックボックスが上手くわたせずに悩んでおります。 if($_POST['send']){ **メール送信の処理します** $from_addres="xxxxxx@xxxxxxx.jp"; $to_addres=$mailadd; $make_subject="メール送信"; $message="-入力内容- アドレス:{$mailadd} なぜ:{$why}"; mailsend($to_addres,$from_addres,$make_subject,$message);//はぶいてますがfunction()書いています }elseif($_POST['submit']){ **内容確認** foreach ($_POST['why'] as $key => $why){ if($why==0){$why0="0です";} if($why==1){$why1="1です";} if($why==2){$why2="2です";} } **入力内容表示** <form method="post" action="<?=$_SERVER['../SCRIPT_NAME']?>"> <input type="hidden" name="why[]" value="<?php echo $_POST['why'];?>"> <input type="submit" name="return" value="修正"> </form> <form method="post" action="<?=$_SERVER['../SCRIPT_NAME']?>"> <input type="hidden" name="why[]" value="<?php echo $_POST['why'];?>"> <input type="submit" name="send" value="送信"> </form> }else{ <form method="post" action="<?=$_SERVER['../SCRIPT_NAME']?>"> <input name="why[]" type="checkbox" value="0"<?if($why==0){ print " checked";}?>>0 <input name="why[]" type="checkbox" value="1"<?if($why==1){ print " checked";}?>>1 <input name="why[]" type="checkbox" value="2"<?if($why==2){ print " checked";}?>>2 <input type="submit" name="submit" value="確認画面へ"> </form> } 同一ページにてif分で分岐して処理しています。 確認画面での値受け取りはできています。 その後の、送信・修正へのhiddenへの値受け渡しが上手くいきません。 結果、どう動作して欲しいかといいますと、 ・returnで戻った時に、値を保持してチェックしてあったチェックボックスに"checked"をつけたい ・sendへの値の受け渡し ・メールをとばすので、その本文への値の入れ方 foreach ($_POST['why'] as $key => $why){ if($why==0){$why0="0です";} if($why==1){$why1="1です";} if($why==2){$why2="2です";} } をメールをとばすところでも記述して$why0 $why1 $why2をprintすれば良いのでしょうか? ググってみたり、色々検索してみたのですが、調べ方がよくないので見つからず、質問をさせていただきました。 よろしくお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう