#セレクトボックスの選択の保持
from1.phpを以下のように編集する
<?php
$errors = array();
if(isset($_POST['submit'])){
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$body = $_POST['body'];
$name = htmlspecialchars($name,ENT_QUOTES);
$email = htmlspecialchars($email,ENT_QUOTES);
$subject = htmlspecialchars($subject,ENT_QUOTES);
$body = htmlspecialchars($body,ENT_QUOTES);
if($name ===""){
$errors['name']="お名前が入力されていません。";
}
if($email ===""){
$errors['email'] ="メールアドレスが入力されていません。";
}
if($body ===""){
$errors['body']="お問い合わせ内容が入力されていません";
}
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>お問い合わせ</title>
</head>
<body>
<?php
echo"<ul>";
foreach($errors as $value){
echo"<li>";
echo $value;
echo "</li>";
}
echo"</ul>";
?>
<form action="form1.php" method="post">
<table>
<tr>
<th>お名前</th><td><input type="text" name="name" value="<?php if(isset($name)){echo $name;}?>"></td>
</tr>
<tr>
<th>メールアドレス</th><td><input type="text" name="email" value="<?php if(isset($email)){echo $email;}?>"></td>
</tr>
<tr>
<th>お問い合わせの種類</th><td>
<select name="subject">
<option value="お仕事に関するお問い合わせ" <?php if(isset($subject) && $subject === "お仕事に関するお問い合わせ") { echo "selected";} ?>>お仕事に関するお問い合わせ</option>
<option value="その他のお問い合わせ" <?php if(isset($subject) && $subject === "その他のお問い合わせ") {echo "selected";} ?>> その他のお問い合わせ</option>
</select></td>
</tr>
<tr>
<th>お問い合わせ内容</th>
<td><textarea name="body" cols="40" rows="10"><?php if(isset($body)){echo $body;}?></textarea></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="確認画面へ"></td>
</tr>
</table>
</form>
</body>
</html>
Google Chromeを起動し「http://localhost/php_form/form1.php」にアクセスする
その後「お問い合わせの種類:その他のお問い合わせ」に変更し確認画面へを押下後
「お問い合わせの種類:お仕事に関するお問い合わせ」に代わっていないことを確認する
演算子:&&は左辺がtrueでなおかつ、右辺もturueだとturueを返す演算子
#セッション
確認画面の作成
from1.phpに以下のように編集する
<?php
session_start();
$errors = array();
if(isset($_POST['submit'])){
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$body = $_POST['body'];
$name = htmlspecialchars($name,ENT_QUOTES);
$email = htmlspecialchars($email,ENT_QUOTES);
$subject = htmlspecialchars($subject,ENT_QUOTES);
$body = htmlspecialchars($body,ENT_QUOTES);
if($name ===""){
$errors['name']="お名前が入力されていません。";
}
if($email ===""){
$errors['email'] ="メールアドレスが入力されていません。";
}
if($body ===""){
$errors['body']="お問い合わせ内容が入力されていません";
}
if(count($errors) === ){
$_SESSION['name'] = $name;
$_SESSION['email'] = $email;
$_SESSION['subject'] = $subject;
$_SESSION['body'] = $body;
header('Location:http//localhost/php_form/form2.php');
exit();
}
}
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>お問い合わせ</title>
</head>
<body>
<?php
echo"<ul>";
foreach($errors as $value){
echo"<li>";
echo $value;
echo "</li>";
}
echo"</ul>";
?>
<form action="form1.php" method="post">
<table>
<tr>
<th>お名前</th><td><input type="text" name="name" value="<?php if(isset($name)){echo $name;}?>"></td>
</tr>
<tr>
<th>メールアドレス</th><td><input type="text" name="email" value="<?php if(isset($email)){echo $email;}?>"></td>
</tr>
<tr>
<th>お問い合わせの種類</th><td>
<select name="subject">
<option value="お仕事に関するお問い合わせ" <?php if(isset($subject) && $subject === "お仕事に関するお問い合わせ") { echo "selected";} ?>>お仕事に関するお問い合わせ</option>
<option value="その他のお問い合わせ" <?php if(isset($subject) && $subject === "その他のお問い合わせ") {echo "selected";} ?>> その他のお問い合わせ</option>
</select></td>
</tr>
<tr>
<th>お問い合わせ内容</th>
<td><textarea name="body" cols="40" rows="10"><?php if(isset($body)){echo $body;}?></textarea></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="確認画面へ"></td>
</tr>
</table>
</form>
</body>
</html>
form2.phpを作成
<?php
session_start();
if(isset($_SESSION['name'])){
echo"<pre>";
var_dump($_SESSION);
echo"</pre>"
}
?>
count関数は、$errors連想配列のキーの数を数え、整数を返します。
count($errors) === 0は、$errors連想配列のキーの数が整数型で値が0と等しければ、===はtrueを返します。
$_SESSIONはPHPが実行時に自動で生成する連想配列です。
ここにユーザーの入力データを格納しておくと、サーバー側で一時保存される
#確認
Google Chromeを起動し「http://localhost/php_form/form1.php」にアクセスする
お名前、メールアドレス、お問い合わせ内容を入力して確認画面へを押下するその後、form2.phpが開かれていることを確認する
#セッションとは
Webの仕組みは、WebブラウザがWebサーバーにリクエストをして、WebサーバーがWebブラウザにデータを渡す(レスポンス)という往復通信です。この通信のルールがHTTPという使用で決められている
#Webサーバーはクライアント(Webブラウザ)の情報を保持しない
通常、Webサーバーは、クライアントの情報を保持しない。
また2回目以降の通信も、同じWebブラウザからのリクエストだということすら気が付かない。
このHTTPの特徴をステートレス性という
でもこのおかげでWebサーバーは、多様なWebクライアントのリクエストを裁くことができる
#header関数
WebサーバーからWebブラウザへのレスポンスヘッダに追加する関数
WebブラウザがWebサーバーへリクエストして、WebサーバーはWebブラウザにレスポンスでHTMLを返すが、このHTMLの頭に、ヘッダ情報が付与される
#確認画面作成
form2.phpを以下のように編集する
<?php
session_start();
if(isset($_SESSION['name'])){
$name = $_SESSION['name'];
$email = $_SESSION['email'];
$subject = $_SESSION['subject'];
$body = $_SESSION['body'];
}
?>
<!doctype html>
<html>
<htad>
<meta charset="utf-8">
<title>確認画面 - お問い合わせ</title>
</htad>
<body>
<form action="form3.php" method="post">
<table>
<tr>
<th>お名前</th><td><?php echo $name; ?></td>
</tr>
<tr>
<th>メールアドレス</th><td><?php echo $email; ?></td>
</tr>
<tr>
<th>お問い合わせの種類</th><td><?php echo $subject; ?></td>
</tr>
<tr>
<th>お問い合わせ内容</th><td><?php echo nl2br($body); ?></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="送信する"></td>
</tr>
</table></form>
</body>
</html>
Google Chromeを起動し「http://localhost/php_form/form1.php」にアクセスする
お名前、メールアドレス、お問い合わせ内容を入力して確認画面へを押下するその後、form2.phpが開かれていることを確認する
#以上