現在PHPを使って、複数ページにわたる入力フォームを作っています。
ただ、SESSIONメソッドを使って複数ページにわたるデータを格納したいと思っていますが、1ページ目のデータしかSESSIONメソッドに格納できません。
プログラムは上から順番に実行していきます。
よろしくお願いいたします。
上記の3つのプログラムを実行した後、var_dump($_SESSION)では1つ目の$_SESSION['name']のみが出力されます。
$_SESSION['occupation']は定義されていませんとエラーが出ます。
PHP
1<?php 2session_start(); 3header('Expires:-1'); 4header('Cache-Control:'); 5header('Pragma:'); 6 ?> 7 8<!DOCTYPE> 9<html lang="ja"> 10<head> 11 <meta charset="utf-8"> 12 <link rel="stylesheet" href="./style.css"> 13</head> 14 15<body> 16 <form action="./b.php" method="post"> 17 <label class="company">会社名<span class="badge">必須</span></label> 18 <input type="text" name="name" class="control" placeholder="(例)dash株式会社" > 19 20 <input type="submit" name="btn_company" value="続ける"> 21 </form> 22</body> 23</html>
PHP
1<?php 2session_start(); 3header('Expires:-1'); 4header('Cache-Control:'); 5header('Pragma:'); 6 7 if(isset($_POST['btn_company'])){ 8 if(isset($_POST['name']) && $_POST['name'] != '') 9 $_SESSION['name'] = $_POST['name']; 10 else 11 $_SESSION['name'] = ''; 12 } 13 ?> 14 15<!DOCTYPE> 16<html lang="ja"> 17<head> 18 19 <meta charset="utf-8"> 20 <link rel="stylesheet" href="./style.css"> 21</head> 22 23<body> 24 <form action="./c.php" method="post"> 25 <label class="company">職種<span class="badge">必須</span></label> 26 <input type="text" name="occupation" class="control" placeholder="職種" > 27 28 <input type="button" name="btn_back" value="戻る" onclick="avascript:history.back()"> 29 <input type="submit" name="btn_basic_info" value="次に進む"> 30 </form> 31</body> 32</html>
PHP
1<?php 2 session_start(); 3 header('Expires:-1'); 4 header('Cache-Control:'); 5 header('Pragma:'); 6 7 if(isset($_Post['btn_basic_info'])){ 8 if(isset($_POST['occupation']) && $_POST['occupation'] != '') 9 $_SESSION['occupation'] = $_POST['occupation']; 10 else 11 $_SESSION['occupation'] = ''; 12 } 13?> 14 15<!DOCTYPE> 16<html lang="ja"> 17<head> 18 <meta charset="utf-8"> 19 <link rel="stylesheet" href="./style.css"> 20</head> 21 22<body> 23 <form method="post" action="./preview.php"> 24 <label class="company">電話番号(担当者様と連絡可能な番号)<span class="badge">必須</span></label> 25 <input type="tel" name="tel" class="control" placeholder="(例)03-1234-5678"> 26 27 <input type="button" name="btn_back" value="戻る" onclick="avascript:history.back()"> 28 <input type="submit" name="btn_details" value="確認する"> 29 </form> 30</body> 31</html>
$_SESSION['occupation'] .= $_POST['occupation'];
$_SESSION['occupation'] .= '';
.= を使っている理由を教えてください。
>$_post
本当にこのように書いてるならエラー出てるはずですが
あと、array()で毎回初期化されるプログラムがありますね。
'.='については記述ミスです。正しくは'='です。'$_post'は実行できていますが、些細なミスになりかねないので修正します。ご指摘ありがとうございます。
array()で毎回初期化される
->$_SESSION = array();は不要ですね。
$_postは見落としてました。m.ts10806さんの指摘が正しいと思います。
$_Postに修正したようですが、まだ駄目です。
"些細なミス"ではなく、大文字小文字を正しく記述しないと"致命的"になり得ます。
javahackさんの言う通りで、危機感がなさ過ぎました。
お恥ずかしながら、PHPの初心者で色々調べていますが、
解説サイトではPostをsessionに書き換えている例が多く、ページをまたいでsessionにデータを追加するサイトがなくて困っているのですが、どのように修正すればよろしいでしょうか。いざとなれば、1つのファイルにまとめてpostを使うという手段は残っていますが、管理が複雑になると思うのでできればファイルを分けたいのですが。よろしくお願いいたします。
https://www.php.net/manual/ja/language.variables.basics.php
> PHP の変数はドル記号の後に変数名が続く形式で表されます。 変数名は大文字小文字を区別します。
$_POST と $_Post は別物です。
$_POSTはPHPの定義済み変数として存在しますが、$_postや$_Postは存在しません。
https://www.php.net/manual/ja/reserved.variables.php
回答1件
あなたの回答
tips
プレビュー