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

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

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

Q&A

解決済

4回答

6852閲覧

【PHP】セッションでデータを渡せない!

een

総合スコア6

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

セッション

Sessionはクライアントがサーバに送ったすべてのリクエストのことを指します。

0グッド

0クリップ

投稿2015/03/12 13:34

アンケートフォーム(regform_input.php)をつくり、
名前や生年月日などが記入条件をクリアすれば、
完了などの画面を出力(regform.php)し、
もし記入漏れがあるなど、条件をクリアしなければ、
リダイレクトでアンケートフォーム(regform_input.php)のページへ戻し、
その際に記入していたデータはセッションを使い、保持をしたままにしたいのですが、
つまづいています。

具体的には、セッションでregform.phpからregform_input.phpにデータを送り、
アンケートフォームに記入していた内容を出力するように書いているつもりなのですが、
Undefined variableと出力されてしまいます。

そうすればよいでしょうか。。

まだ途中ですが、以下がコードです。(とりあえず名前の部分さえ出力されれば、他の欄にもおなじように書けばできると思うので途中にしたままです。申し訳ございません。)

regform_input.php

lang

1<?php 2session_start(); 3?> 4<!DOCTYPE html> 5<html> 6<head> 7<meta charset="UTF-8"> 8<title>PHP基礎</title> 9</head> 10<body> 11 12<form action="regform.php" method="post"> 13 名前:<br /> 14 <input type="text" name="name1" size="12" maxlength="10" value="<?php echo $name1; ?>"><br /> 15 名前(確認):<br /> 16 <input type="text" name="name2" size="12" maxlength="10" value=""><br /> 17 なまえかな:<br /> 18 <input type="text" name="kana1" size="20" maxlength="15"><br /> 19 なまえかな(確認):<br /> 20 <input type="text" name="kana2" size="20" maxlength="15"><br /> 21 生年月日(例:1990年08月04日):<br /> 22 <input type="text" name="year" size="4" maxlength="4">年<input type="text" name="month" size="4" maxlength="2">月<input type="text" name="date" size="2" maxlength="2">日<br /> 23 性別:<br /> 24 <input type="radio" id="male" name="sex" value="男性"><label for="male">男性</label> 25 <input type="radio" id="female" name="sex" value="女性"><label for="female">女性</label> 26 <br /> 27 自己紹介:<br /> 28 <textarea name="intro" cols="30" rows="5"></textarea><br /> 29 <input type="submit" value="送信"> 30</form> 31 32 33</body> 34</html>

regform.php

lang

1<?php 2session_start(); 3$_session['name1']=htmlspecialchars($_POST['name1'],ENT_QUOTES); 4$name1=$_session['name1'] 5$_session['name2']=htmlspecialchars($_POST['name2'],ENT_QUOTES); 6$name2=$_session['name2'] 7$kana1=htmlspecialchars($_POST['kana1'],ENT_QUOTES); 8$kana2=htmlspecialchars($_POST['kana2'],ENT_QUOTES); 9$year=htmlspecialchars($_POST['year'],ENT_QUOTES); 10$month=htmlspecialchars($_POST['month'],ENT_QUOTES); 11$date=htmlspecialchars($_POST['date'],ENT_QUOTES); 12$sex=htmlspecialchars($_POST['sex'],ENT_QUOTES); 13$intro=htmlspecialchars($_POST['intro'],ENT_QUOTES); 14if(($name1=="")or($name2=="")or($kana1=="")or($kana2=="")or($year=="")or($month=="")or($date=="")or($intro=="")or($sex=="")){ 15header("Location: regform1_input.php"); 16exit; 17} 18else{ 19 if ($name1!=$name2) { 20 header("Location: regform1_input.php"); 21 exit; 22 } 23 if (preg_match("/^[ぁ-ん]+$/u", $kana1)==false){ 24 header("Location: regform1_input.php"); 25 exit;} 26 if ($kana1!=$kana2) { 27 header("Location: regform1_input.php"); 28 exit;} 29 if (!checkdate($month, $date, $year)) { 30 header("Location: regform1_input.php"); 31 exit;} 32} 33?> 34<!DOCTYPE html> 35<html> 36<head> 37</head> 38<body> 39</body> 40</html>

よろしくおねがいします!

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

本当にこの通りコードを書いていますか?

であれば、セッションの定義済み変数は

$_session

ではなく、

$_SESSION

です。

$_SESSION['name1']=htmlspecialchars($_POST['name1'],ENT_QUOTES);
$name1=$_SESSION['name1']
$_SESSION['name2']=htmlspecialchars($_POST['name2'],ENT_QUOTES);
$name2=$_SESSION['name2']

投稿2015/03/13 09:15

編集2015/03/13 09:24
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/03/13 09:20

というわけで 名前:<br /> <input type="text" name="name1" size="12" maxlength="10" value="<?php echo $_SESSION['name1']; ?>"><br /> というのが、あなたのしたい事ではないでしょうか? ちょっとコードが平成1桁っぽいので、目がちかちかして、間違っていたらすいません。
een

2015/03/13 15:34

luckerさん、 ありがとうございます。 おっしゃるとおり、$_sessionと書いてしまっており、 そのせいでデータが渡せていなかったようです。 大変助かりました。 本当にありがとうございます。
guest

0

yokoyam49さんの回答ですでに解決済みかと思いますが、一点気になったので記載します。

regform_input.php のラジオですが、下記のようにデフォルトで男性を指定すると良いですね。
<input type="radio" id="male" name="sex" checked="checked" value="男性">

投稿2015/03/13 03:02

bm000999

総合スコア57

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

een

2015/03/13 15:36

bm000999さん、 ありがとうございます。 ここも気になっていたところでした! ありがとうございます!!
guest

0

$name1がセットされていないのにechoしているから出てるNoticeだと思いますが…。
下記のようにすればいいかと思います。

regform_input.php

<?php session_start(); //↓追加 if(isset($_session['name1'])){ $name1 = $_session['name1']; }else{ $name1 = ""; } //追加終わり ?>

投稿2015/03/13 01:34

編集2015/03/13 01:36
yokoyam49

総合スコア23

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

een

2015/03/13 15:38

yokoyam49さん、 ありがとうございます。 こちらも忘れていました! 本当に助かりました! ありがとうございます!
guest

0

下記の通り、regform.php の4行目、6行目の最後にセミコロンをつければ解決すると思います。

$_session['name1']=htmlspecialchars($_POST['name1'],ENT_QUOTES);
$name1=$_session['name1'];
$_session['name2']=htmlspecialchars($_POST['name2'],ENT_QUOTES);
$name2=$_session['name2'];

投稿2015/03/12 14:48

bm000999

総合スコア57

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

een

2015/03/13 01:11

回答ありがとうございます。 ただ、依然として変化がありません。 <br /><b>Notice</b>: Undefined variable: name1 in <b>C:\xampp\htdocs\phpkiso\regform1_input.php</b> on line <b>14</b><br /> とでてきてしまいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問