php sample1-1

php 実践初級 1-1

早速実践形式でサンプルプログラムを作成してみましょう。
内容はお問合せフォームの構築
実践では、設計書を元にプログラムを作成していきますので、簡易設計書に沿って構成を考えてみましょう

設計書は下記からダウンロードしてください。

php講座設計書

エクセルのシートはsample1シートを参照

設計書は下記のような構成になっています。

お問合せの内容は
お名前、年齢、性別、メールアドレス、備考となります。

プログラムを書く前に、まずは、設計書をじっくりと読んでみましょう。
設計書が理解できないとプログラムを組む事はできません。

設計書の画面項目1を内容は下記の通りとなります。

  • お名前は必須項目であり、空の場合は、エラーメッセージを出力します。
  • 年齢は半角数字以外の場合はエラーメッセージを出力します
  • 性別は初回アクセスした時は、男性にチェックが付いている事
  • メールアドレスは必須項目であり、空の場合と、メール形式が異なる場合はエラーメッセージを出力します。
  • 備考は最大100文字までとなり、100文字を超える場合は、エラーメッセージを出力します。

上記の内容に沿ってまずは、日本語でプログラム構成を組んでいきます。

初回画面を開いたとき
初期値設定を行う
それ以外の場合
必須項目のチェックを行う
エラーがある場合
エラーメッセージを変数にセットする
メールの型チェックを行う
エラーメッセージを変数にセットする
文字数のチェックを行う
エラーメッセージを変数にセットする
入力項目に1つでもエラーがある場合
再度、入力画面を表示し、各エラー項目を部品の下に出力する
全ての項目にエラーが無い場合
完了画面に遷移する

※インデントは条件分岐になります
大体日本語で組んだらこのような構成になると思います。

※これはあくまで私個人の考えかたであって、他に簡素化できる場合はそちらがいい設計と思います。

上記に日本語で書いたプログラムをロジックに置き換えた内容は下記になります。

<?php
ini_set('display_errors', "On");
// フォーム部品の変数定義
$form = [
    'name' => '',
    'age' => '',
    'gender' => '',
    'mail' => '',
    'memo' => '',
];
// エラーメッセージ用配列
$errors = [
    'name' => '',
    'age' => '',
    'gender' => '',
    'mail' => '',
    'memo' => '',
];
$is_error = false;
if($_SERVER["REQUEST_METHOD"] === "GET"){
    //初期値設定を行う
    $form['gender'] = 1; // 男性
} else {
    $form = $_POST;
    // 必須項目のチェックを行う
    if ($form['name'] === '') {
        //メールアドレス 空文字の場合
        $errors['name'] = '必須です';
        $is_error = true;
    }

    if ($form['age'] != '') {
	if ((substr($form['age'], 0, 1) == '0' and strlen($form['age'] >= 1))  or  !is_numeric($form['age'])) {
          $errors['age'] = '数字を入力してください';
          $is_error = true;
	}
    }

    // 必須項目のチェックを行う
    if ($form['mail'] === '') {
        //お名前 空文字の場合
        $errors['mail'] = '必須です';
        $is_error = true;
    } elseif (!filter_var($form['mail'], FILTER_VALIDATE_EMAIL)) {
        $errors['mail'] = 'メールアドレス形式が違います';
        $is_error = true;
    }
    if (mb_strlen($form['memo'], 'UTF-8') >= 100) {
        $errors['memo'] = '100文字以内で入力してください';
        $is_error = true;
    }
    if ($is_error === false) {
        // エラーがない場合 完了画面に遷移する
        header('Location: finish.php');
        exit;
    }
    // ここは必然的にエラーになっている
}
?>


<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
</head>
<body>
<form action="" method="post">
<table>
<tr>
<td>お名前</td>
<td>
<input type="text" name="name" value="<?= $form['name']; ?>">
<br>
<span style="color:red;"><?= $errors['name']; ?></span>
</td>
</tr>
<tr>
<td>年齢</td>
<td>
<input type="text" name="age" value="<?= $form['age']; ?>">
<br>
<span style="color:red;"><?= $errors['age']; ?></span>
</td>
</tr>
<tr>

 <td>性別</td>
<td>

 <label>男性:<input type="radio" name="gender" value="1" <?= $form['gender'] == 1 ? 'checked' : ''; ?>></label>
<label>女性:<input type="radio" name="gender" value="2" <?= $form['gender'] == 2 ? 'checked' : ''; ?>></label>


 </td>
</tr>
<tr>
<td>メールアドレス</td>
<td>
<input type="text" name="mail" value="<?= $form['mail']; ?>">
<br>
<span style="color:red;"><?= $errors['mail']; ?></span>
</td>
</tr>
<tr>
<td>備考</td>
<td>
<textarea name="memo"><?= $form['memo']; ?></textarea>
<br>
<span style="color:red;"><?= $errors['memo']; ?></span>
</td>
</tr>
<tr>
<td>ボタン</td>
<td>
<input type="submit" value="登録ボタン">
</td>
</tr>
</table>
</form>
</body>
</html>

ロジックに起こした結果となります。
実際にvagrant centos7 php80 の開発環境にアップしてブラウザで実行してみましょう。
アップの仕方は色々ありますが、vangrantシンクロを使うと、windowsとlinux間でファイルの共有ができます。
ただ、windows環境で注意することがあります。
それは、ファイルの大文字と小文字の区別がつかない事です。

test.php
Test.php
上記はwindowsでは同じファイル名として扱われるので注意してください。
linuxでは別々のファイルになります。
シンクロ環境は万全とは言えませんので注意してください。

vagrantシンクロの設定は下記の通りになります。

//シンクロの設定
// vagrantfileのコメントを外して設定 左はvagrantfileからの相対パス 右はサーバーの絶対パスになります。
config.vm.synced_folder "../html", "/var/www/html/"

ブラウザで開いて確認した画像がこちら。

URLはhttp://192.168.33.10/sample1/にアクセスしてください。

何も入力しないで登録ボタンを押下してエラーメッセージを出力した結果

コメント

タイトルとURLをコピーしました