豚野郎です。
お久しぶりです。
ここ最近なのですが、社員への学習用の課題作りを始めた都合で
更新をしていませんでした。
今回はせっかく作った課題なので、もし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>