0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

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

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

演算子:&&は左辺が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

image.png

#セッションとは
 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が開かれていることを確認する

image.png

image.png

#以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?