5月31日授業内容(php(セッションを使う,empty(空とみなされる値(空文字)の場合は次の画面に進めない)(複数回練習要)))

ユーザーの状態を管理する
web-design-exercise.hatenablog.jp

P223〜
Cookie情報・・・ブラウザー側でコントロールできる(パソコンにログイン情報が漏れる)

セッション情報・・・サーバー側(サーバー側にデータが残るので入力内容を引き継ぐことができるが、使用者がみえない情報なのでセキュリティーが保たれる。ブラウザーを閉じると情報が消える)



セッション情報
web-design-exercise.hatenablog.jp

フォーム実践3
web-design-exercise.hatenablog.jp


セッションを使う(複数回練習要


複数回セッション情報を確認しているとデータが残っている場合があるのでMAMP(黒いフォルダ)→tmp→phpのフォルダの中のデータをすべて消すこと

入力側(※出力側の戻るボタンを押してもセッションファイルに記憶されたデータが出力側に表示される)
f:id:paris1204:20160531174811p:plain

出力側
f:id:paris1204:20160531174823p:plain



入力側

<?php
//初期化
$name = '';
$age = '';
$tel = '';

session_start();
if(isset($_SESSION['your_name'])){
  $name = $_SESSION['your_name'];//セッションに記憶した値をname='your_nameに戻す'
}
if(isset($_SESSION['your_age'])){
  $age = $_SESSION['your_age'];
}
if(isset($_SESSION['your_tel'])){
  $tel = $_SESSION['your_tel'];
}

?>
<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>セッションを使う(input.php)</title>
</head>

<body>
<form action="check.php" method="post">
<p>お名前:<input type="text" name="your_name" value="<?php echo $name ?>"></p>
<p>年齢:<input type="text" name="your_age" value="<?php echo $age ?>"></p>
<p>電話番号:<input type="text" name="your_tel" value="<?php echo $tel ?>"></p>
<p><input type="submit" value="送信"></p>
</form>
</body>
</html>


出力側

<?php 

if(!isset($_POST['your_name']) || !isset($_POST['your_age']) || !isset($_POST['your_tel'])){//もしinput.phpで入力したyour_name,your_age,your_telのデータを入力せず直接check.phpにアクセスした場合に入力画面に戻す処理
header('Location:index.php');//inputのheaderに飛ばす(output.phpに直接アクセスするのを防止するため)
	exit;//
	}


$name=htmlspecialchars($_POST['your_name'],ENT_QUOTES,'UTF-8');
$age=htmlspecialchars($_POST['your_age'],ENT_QUOTES,'UTF-8');
$tel=htmlspecialchars($_POST['your_tel'],ENT_QUOTES,'UTF-8');


session_start();//セッションファイルができて値が入力される。データは前後のページに持っていける
$_SESSION['your_name']=$name;//元の入力データをセッションページに入力する。
$_SESSION['your_age']=$age;//※htmlspecialcharsを入れると修正されてしまうので入れないこと
$_SESSION['your_tel']=$tel;

?>
<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>セッションを使う(check.php)</title>
</head>

<body>

<?php echo '<p>あなたの名前は'.$name.'ですね。</p>'."<br>\n"; ?>
<?php echo '<p>年齢は'.$age.'歳ですね。</p>'."<br>\n"; ?>
<?php echo '<p>電話番号は'.$tel.'ですね。</p>'."<br>\n"; ?>
<p><a href="index.php"><button>戻る</button></a></p>




</body>
</html>




emptyは(空とみなされる値(空文字)の場合は次の画面に進めない)

f:id:paris1204:20160531181856p:plain

f:id:paris1204:20160531181905p:plain


入力画面(空で入力する)
f:id:paris1204:20160531181659p:plain

出力画面でデータが空文字であることを表示する

f:id:paris1204:20160531182044p:plain


※入力側の記述は先程とpost先以外は同じです




出力側

<?php 

if(!isset($_POST['your_name']) || !isset($_POST['your_age']) || !isset($_POST['your_tel'])){//issetは空文字('や")でも値として認識してしまうので、
header('Location:index2.php');//値の有無を判断するには向かないので別でemptyを設定する
	exit;//
	}

//入力値チェック
if(empty($_POST['your_name'])){//emptyだともし空文字に該当すると次の画面に進めない
	echo 'お名前を入力してください。';
	exit;}
	
	if(empty($_POST['your_age'])){
	echo '年齢を入力してください。';
	exit;}
	
	if(empty($_POST['your_tel'])){
	echo '電話番号を入力してください。';
	exit;}

$name=htmlspecialchars($_POST['your_name'],ENT_QUOTES,'UTF-8');
$age=htmlspecialchars($_POST['your_age'],ENT_QUOTES,'UTF-8');
$tel=htmlspecialchars($_POST['your_tel'],ENT_QUOTES,'UTF-8');


session_start();//セッションファイルができて値が入力される。データは前後のページに持っていける
$_SESSION['your_name']=$name;//元の入力データをセッションページに入力する。$_POST['your_name'];で元データに戻すことも可能
$_SESSION['your_age']=$age;//※htmlspecialcharsを入れると修正されてしまうので入れないこと
$_SESSION['your_tel']=$tel;

?>
<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>セッションを使う(check.php)</title>
</head>

<body>

<?php echo '<p>あなたの名前は'.$name.'ですね。</p>'."<br>\n"; ?>
<?php echo '<p>年齢は'.$age.'歳ですね。</p>'."<br>\n"; ?>
<?php echo '<p>電話番号は'.$tel.'ですね。</p>'."<br>\n"; ?>
<p><a href="index2.php"><button>戻る</button></a></p>




</body>
</html>