セレクトボックスの選択の保持、セッション、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」にアクセスする
その後「お問い合わせの種類：その他のお問い合わせ」に変更し確認画面へを押下後
「お問い合わせの種類：お仕事に関するお問い合わせ」に代わっていないことを確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686519/a8d301c1-0e18-3b1f-7d49-d687c0898e80.png)

演算子：&&は左辺が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が開かれていることを確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686519/e8cc89f2-3bd2-1b7a-e2de-ae535a6e205a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686519/62ba5719-4b0e-c6da-6abb-087e3066ac8d.png)

#セッションとは
　Webの仕組みは、WebブラウザがWebサーバーにリクエストをして、WebサーバーがWebブラウザにデータを渡す(レスポンス)という往復通信です。この通信のルールがHTTPという使用で決められている

#Webサーバーはクライアント(Webブラウザ)の情報を保持しない
　通常、Webサーバーは、クライアントの情報を保持しない。
　また２回目以降の通信も、同じ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が開かれていることを確認する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686519/9e7002ff-edfc-4366-9c30-6c454e6db764.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686519/e8b19830-86e6-5ac9-db71-f5b2feb14e9c.png)

#以上