セレクトボックスの選択の保持、セッション、header関数、確認画面の作成


セレクトボックスの選択の保持

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が開かれていることを確認する

以上