LoginSignup
1
0

PHP初級課題 フォーム編

Posted at

豚野郎です。
お久しぶりです。

ここ最近なのですが、社員への学習用の課題作りを始めた都合で
更新をしていませんでした。

今回はせっかく作った課題なので、もしPHP初学者の方で
if文かfor文レベルを抜け出したい方がいたら力になればと思い公開します。

※ 念の為書くと、この課題は自分で休日に作ったコードで会社の資産ではないです。

セキュリティ対策は抜きにして、バリデーションエラーも抜きで
まずは登録できればいいという課題にしています。

以下で行いました。
・XAMPPをインストール
・PHP8.2.4

1.課題
2.模範解答
という順番で書いています。

模範解答に関して、私の解答が100%合っているか保証はありません。
「自分はこう書いた方がいい!」という方はご自由に書いてください。
※ なぜこういう形式の課題かというと、「初学者に1から作らせるのは厳しい」という理由です。好きなように書いてください。

1. 課題

PHPで掲示板の登録フォームを作ってもらいます。
登録できるようにすることだけ考えてください。

①〜⑧の順番で行ってください。

Controllers/MessageController.php
<?php
    // ②""に入るものは?(ヒント:input.phpの①の答え)
    if ($_SERVER["REQUEST_METHOD"] == "") {
        // ③どうやってMessageControllerクラスのcreateメソッドを呼び出す?
    }

    class MessageController
    {
        public function create() {
            // ④どうやってMessageModelクラスのregistメソッドを呼び出す?(ヒント:PHPのファイル読み込みで調べてください)

            // ⑧完了画面を表示させてください(ヒント:④でどうやってファイルを読み込んだ?)
        }
    }

    // echo 'デバッグ用ソース';
    // exit();

Models/MessageModel.php
<?php
    class MessageModel
    {
        // 接続情報
        const DSN = 'mysql:dbname=board;host=127.0.0.1';
        const USER = 'root';
        const PASSWORD = '';

        // ⑤registメソッドでどうやってinput.phpから送信された値を取得する?
        public function regist() {
            // ⑥DB接続してください(PHPのDB接続で調べてください)

            // ⑦SQLを作成し、データを登録してください(PHPのデータ登録で調べてください)

            return;
        }

    }

view/create/input.php
<html>
    <head>
        <title>掲示板</title>
    </head>
    <body>
        <!--- 送信をクリックしら後どうやってMessageController.phpのへ入力された値を送信する --->
        <form method="" action="">
            <h1>投稿</h1>
            <li>名前</li>
            <input type="text">
            <li>性別</li>
            <select>
                <option value="0"></option>
                <option value="1"></option>
            </select>
            <li>メッセージ</li>
            <textarea></textarea>
            <br><br>
            <input type="submit" value="送信">
        </form>
    </body>
</html>
view/create/complete.php
<html>
    <head>
        <title>掲示板</title>
    </head>
    <body>
        <?php 
            if($flag == 1) {
                echo "登録が完了しました。";
            } else {
                echo "登録に失敗しました。";
            }
        ?>
        
    </body>
</html>

2. 模範解答

Controllers/MessageController.php
<?php
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        require(__DIR__ . "/../Models/MessageModel.php");
        $messageController = new MessageController;
        $messageController->create($_POST);
    }

    class MessageController
    {
        public function create($POST) {
            $messageModel = new MessageModel;
            $flag = $messageModel->regist($POST);

            require(__DIR__ . "/../view/create/complete.php");
        }
    }
Models/MessageModel.php
<?php
    class MessageModel
    {
        // 接続情報
        const DSN = 'mysql:dbname=board;host=127.0.0.1';
        const USER = 'root';
        const PASSWORD = '';

        public function regist($POST) {
            // BD接続
            $dbh = new PDO(self::DSN, self::USER, self::PASSWORD);

            $name = $POST['name'];
            $sei = $POST['sei'];
            $text = $POST['text'];
            $date = date("Y/m/d H:i:s");

            $data = array($name, $sei, $text, 0, $date, $date);

            // 登録
            $sql = "INSERT INTO t_message (
                name, sei, text, delete_flg, create_date, update_date
            ) VALUES ( 
                ?, ?, ?, ?, ?, ?
            )";

            $stmt = $dbh->prepare($sql);
            $flag = $stmt->execute($data);

            // DB切断
            $dbh = null;

            return $flag;
        }

    }

view/create/input.php
<html>
    <head>
        <title>掲示板</title>
    </head>
    <body>
        <form method="post" action='../../Controllers/MessageController.php'>
            <h1>投稿</h1>
            <li>名前</li>
            <input type="text" name="name">
            <li>性別</li>
            <select name="sei">
                <option value="0"></option>
                <option value="1"></option>
            </select>
            <li>メッセージ</li>
            <textarea name="text"></textarea>
            <br><br>
            <input type="submit" value="送信">
        </form>
    </body>
</html>
view/create/complete.php
<html>
    <head>
        <title>掲示板</title>
    </head>
    <body>
        <?php 
            if($flag == 1) {
                echo "登録が完了しました。";
            } else {
                echo "登録に失敗しました。";
            }
        ?>
        
    </body>
</html>
1
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
1
0