PHP 検索フォームの作成方法
Q&A
Closed
解決したいこと
PHP 検索フォームの作成方法を教えて下さい。
今週からPHP&SQLを始めたド素人です、、、CRUD処理を猛勉中
ブログタイトルから該当するレコードを抽出したいです
DB
環境
・Windows10
・xampp
ディレクトリー
/xampp
blog.php
dbc.ph
index2.php
env.php
index2.php
<?php
use function Blog\Dbc\getAllBlog;
use function Blog\Dbc\setCategoryName;
require_once('blog.php');
$blog = new Blog();
// 取得したデーターを表示
$blogData = $blog->getAll();
function h($s)
{
return htmlspecialchars($s, ENT_QUOTES, "UTF-8");
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ブログ一覧</title>
</head>
<body>
<h2>ブログ一覧</h2>
<p><a href="/form.html">新規作成</a></p>
<br>
<!-- 検索 -->
<form action="blog_read.php" method="post">
<p>
ブログタイトル検索:
<input type="text" name="read_title">
<input type="submit" name="submit" value="検索">
</P>
<table>
<tr>
<th>タイトル</th>
<th>カテゴリー</th>
<th>投稿日時</th>
<th>Detail</th>
<th>Update</th>
<th>Delete</th>
</tr>
<?php foreach ($blogData as $column) : ?>
<tr>
<td><?php echo h($column['title']) ?></td>
<td><?php echo h($blog->setCategoryName($column['category'])) ?></td>
<td><?php echo h($column['post_at']) ?></td>
<td><a href="/detail.php?id=<?php echo $column['id'] ?>">詳細</a></td>
<td><a href="/update_form.php?id=<?php echo $column['id'] ?>">編集</a></td>
<td><a href="/blog_delete.php?id=<?php echo $column['id'] ?>">削除</a></td>
</tr>
<?php endforeach; ?>
</table>
</body>
</html>
blog.php
<?php
require_once('dbc.php');
class Blog extends Dbc
{
protected $table_name = 'blog';
// 3カテゴリー名を表示
public function setCategoryName($category)
{
if ($category === '1') {
return '日常';
} elseif ($category === '2') {
return 'プログラミング';
} else {
return 'その他';
}
}
public function blogCreate($blogs)
{
$sql = "INSERT INTO
$this->table_name(title,content,category,publish_status)
VALUES
(:title,:content,:category,:publish_status)";
$dbh = $this->dbConnect();
// トランザクションの開始
$dbh->beginTransaction();
try {
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':title', $blogs['title'], PDO::PARAM_STR);
$stmt->bindValue(':content', $blogs['content'], PDO::PARAM_STR);
$stmt->bindValue(':category', $blogs['category'], PDO::PARAM_INT);
$stmt->bindValue(':publish_status', $blogs['publish_status'], PDO::PARAM_INT);
$stmt->execute();
$dbh->commit();
echo 'ブログを投稿しました';
} catch (PDOException $e) {
$dbh->rollBack();
exit($e);
}
}
public function blogUpdate($blogs)
{
$sql = "UPDATE $this->table_name SET
title =:title,content = :content,category = :category,publish_status = :publish_status
WHERE
id = :id";
$dbh = $this->dbConnect();
// トランザクションの開始
$dbh->beginTransaction();
try {
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':title', $blogs['title'], PDO::PARAM_STR);
$stmt->bindValue(':content', $blogs['content'], PDO::PARAM_STR);
$stmt->bindValue(':category', $blogs['category'], PDO::PARAM_INT);
$stmt->bindValue(':publish_status', $blogs['publish_status'], PDO::PARAM_INT);
$stmt->bindValue(':id', $blogs['id'], PDO::PARAM_INT);
$stmt->execute();
$dbh->commit();
echo 'ブログを更新しました';
} catch (PDOException $e) {
$dbh->rollBack();
exit($e);
}
}
// ブログのバリエーション
public function blogValidate($blogs)
{
if (empty($blogs['title'])) {
exit('タイトルを入力してください');
}
if (mb_strlen($blogs['title']) > 191) {
exit('タイトルは191文字以下にしてください');
}
if (empty($blogs['content'])) {
exit('本文を入力してください');
}
if (empty($blogs['category'])) {
exit('カテゴリーは必須です');
}
if (empty($blogs['publish_status'])) {
exit('公開ステータスは必須です');
}
}
}
dbc.php
<?php
require_once('env.php');
class Dbc
{
// namespace Blog\Dbc;
protected $table_name;
// 1データーベース接続
protected function dbConnect()
{
$host = DB_HOST;
$dbname = DB_NAME;
$user = DB_USER;
$pass = DB_PASS;
$dsn = "mysql:host=$host;dbname=$dbname;charset=utf8";
try {
$dbh = new \PDO($dsn, $user, $pass, [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
]);
} catch (\PDOException $e) {
echo '接続失敗' . $e->getMessage();
exit();
};
return $dbh;
}
// 2データを取得する
public function getAll()
{
$dbh = $this->dbConnect();
// 1SQLの準備
$sql = "SELECT*FROM $this->table_name";
// 2SQLの実行
$stmt = $dbh->query($sql);
// 3SQLの結果を受け取る
$result = $stmt->fetchAll(\PDO::FETCH_ASSOC);
return $result;
$dbh = null;
}
public function getById($id)
{
if (empty($id)) {
exit('IDが不正です。');
}
$dbh = $this->dbConnect();
// SQL準備
$stmt = $dbh->prepare("SELECT*FROM $this->table_name Where id = :id");
$stmt->bindValue(':id', (int)$id, \PDO::PARAM_INT);
// SQL実行
$stmt->execute();
// 結果を取得
$result = $stmt->fetch(\PDO::FETCH_ASSOC);
if (!$result) {
exit('ブログがありません');
}
return $result;
}
public function delete($id)
{
if (empty($id)) {
exit('IDが不正です。');
}
$dbh = $this->dbConnect();
// SQL準備
$stmt = $dbh->prepare("DELETE FROM $this->table_name Where id = :id");
$stmt->bindValue(':id', (int)$id, \PDO::PARAM_INT);
// SQL実行
$result = $stmt->execute();
echo 'ブログを削除しました';
return $result;
}
}
1