複数ページでセッション変数を利用する
1枚目のページinput.phpの次へボタンを押し、
2枚目のページdogcat.phpの確認ボタンを押すと、
3枚目のページconfirm2.phpがNot Found
The requested URL /confirm2.php was not found on this server.
になります。ドキュメントルートもファイル保存場所も1枚目と2枚目のページと同じ
場所なのに何故confirm2.phpだけNot Foundになるのでしょうか。
お手すきの際で結構ですので、ご確認頂けると幸いです。
宜しくお願いします。
input.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>入力ページ</title>
<link href="../../css/style.css" rel="stylesheet">
</head>
<body>
<div>
アンケート(1/2) <br>
<form method="POST" action="dogcat.php">
<ul>
<li><label>名前:
<input type="text" name="name" placeholder="ニックネーム可" value="<?php echo es($name) ?>" ;>
</label></li>
<li><label>好きな言葉:
<input type="text" name="kotoba" value="<?php echo es($kotoba) ?>" ;>
</label></li>
<li><input type="submit" value="次へ"></li>
</ul>
</form>
</div>
</body>
</html>
dogcart.php
<?php
//セッションの開始
session_start();
require_once("util.php");
//$_POST変数に値があればセッション変数に受け渡す
if (isset($_POST[ 'name' ])) {
$_SESSION[ 'name' ] = $_POST[ 'name' ];
}
if (isset($_POST[ 'kotoba' ])) {
$_SESSION[ 'kotoba' ] = $_POST[ 'kotoba' ];
}
//セッション変数に値があれば受け渡す
if (empty($_SESSION[ 'dogcat' ])) {
$dagcat = [];
} else {
$dogcat = $_SESSION[ 'dogcat' ];
}
?>
<?php
//初期値でチェックするかどうか
function checked($value, $question) {
if (is_array($question)) {
//配列の時、値が含まれていればtrue
$isChecked = in_array($value, $question);
} else {
//配列ではない時、値が一致すればtrue
$isChecked = ($value===$question);
}
if ($isChecked) {
//チェックする
echo "checked";
} else {
echo "";
}
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>犬好き猫好きページ</title>
<link href="../../css/style.css" rel="stylesheet">
</head>
<body>
<div>
アンケート(2/2) <br>
<form method="POST" action="confirm2.php">
<ul>
<li><span>犬が好きですか?猫が好きですか?</span><br>
<label><input type="checkbox" name="dogcat[]" value="犬" <?php checked("犬", $dogcat); ?> >犬が好き</label><br>
<label><input type="checkbox" name="dogcat[]" value="猫" <?php checked("猫", $dogcat); ?> >猫が好き</label>
<li>
<input type="button" value="戻る" onclick="location.href='input.php' ">
<input type="submit" value="確認する" >
</ul>
</form>
</div>
</body>
</html>
confirm2.php
<?php
//セッションの開始
session_start();
require_once("util.php");
?>
<?php
//文字エンコードの検証
if (!cken($_POST)) {
$encoding = mb_internal_encoding();
$err = "Encoding Error! The expected encoding is " . $encoding;
$isError = true;
//エラーメッセージを出して、以下のコードを全てキャンセルする
exit($err);
}
?>
<?php
//入力データの取り出しとチェック
$error = [];
//セッション変数に値があれば受け渡す
if (empty($_SESSION[ 'name' ])) {
$error[] = "名前を入力して下さい。";
} else {
$name = $_SESSION[ 'name' ];
}
if (empty($_SESSION[ 'kotoba' ])) {
$error[] = "好きな言葉を入力して下さい。";
} else {
$kotoba = $_SESSION[ 'kotoba' ];
}
//POSTされた値をセッション変数に受け渡す
if (isset($_POST[ 'dogcat' ])) {
$dogcat = $_POST[ 'dogcat' ];
$_SESSION[ 'dogcat' ] = $dagcat;
//値のチェック
$diffValue = array_diff($dogcat, ["犬","猫"]);
//規定外の値が含まれていなければok
if (count($diffValue)>0) {
$error[] = "犬好き猫好きの回答にエラーがありました。";
}
$dogcatString = implode("好きで、", $dagcat) . "好きです。";
} else {
$dogcatString = "どちらも好きではありません。";
$_SESSION[ 'dogcat' ] = [];
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>確認ページ</title>
<link href="../../css/style.css" rel="stylesheet">
</head>
<body>
<div>
<form>
<?php if(count($error)>0 ) { ?>
<span class="error"><?php echo implode('<br>', $error); ?></span><br>
<span>
<input type="button" value="戻る" onclick="locaton.href='input.php' ">
</span>
<?php } else { ?>
<span>
名前:<?php echo es($name); ?><br>
好きな言葉:<?php echo es($kotoba); ?><br>
犬猫好き?:<?php echo es($dogcatString); ?><br>
<input type="button" value="訂正する" onclick="location.href='input.php' ">
<input type="button" value="送信する" onclick="location.href='thankyou2.php' ">
</span>
<?php } ?>
</form>
</div>
</body>
</html>
thankyou2.php
<?php
require_once("util.php");
//セッションの開始
session_start();
//セッションのチェック
$error = [];
if (!empty($_SESSION[ 'name' ]) && !empty($_SESSION[ 'kotoba' ])) {
//セッション変数から値を取り出す
$name = $_SESSION[ 'name' ];
$kotoba = $_SESSION[ 'kotoba' ];
$dogcat = $_SESSION[ 'dogcat' ];
$dogcatString = implode("好きで、", $dogcat) . "好きです。";
} else {
//セッション変数が空だった時
$error[] = "セッションエラーです。";
}
//HTMLを表示する前にセッションを終了する
killSession()
?>
<?php
//セッションを破棄する
function killSession() {
//セッション変数の値を空にする
$_SESSION = [];
//セッションクッキーを破棄する
if (isset($_COOKIE[session_name()])) {
$params = session_get_cookie_params();
setcookie(session_name(), ' ', time()-36000, $params[ 'path' ]);
}
//セッションを破棄する
session_destroy();
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>完了ページ</title>
<link href="../../css/style.css" rel="stylesheet">
</head>
<body>
<div>
<?php if (count($error)>0) { ?>
<span class="error"><?php echo implode('<br>' , $error); ?></span><br>
<span>
<input type="button" value="最初のページに戻る" onclick="location.href='input.php' ">
</span>
<?php } else { ?>
次のように受付けました。ありがとうございました。
<HR>
<span>
名前:<?php echo es($name); ?><br>
好きな言葉:<?php echo es($kotoba); ?><br>
犬猫好き?:<?php echo es($dogcatString); ?><br>
<a href="input.php" >最初のページに戻る</a>
</span>
<?php } ?>
</div>
</body>
</html>
エラーコード
[31-Jul-2018 07:41:15 UTC] PHP Notice: Undefined variable: dogcat in /Applications/MAMP/htdocs/dogcat.php on line 53
[31-Jul-2018 07:41:15 UTC] PHP Notice: Undefined variable: dogcat in /Applications/MAMP/htdocs/dogcat.php on line 54
[31-Jul-2018 07:43:41 UTC] PHP Notice: Undefined index: dogcat in /Applications/MAMP/htdocs/thankyou2.php on line 11
[31-Jul-2018 07:43:41 UTC] PHP Warning: implode(): Invalid arguments passed in /Applications/MAMP/htdocs/thankyou2.php on line 12