検索ボックスを作成するにあたり、検索結果が表示されない
解決したいこと
検索ボックスにキーワードを入力し、そのキーワードを含む文章を表示させたいと思っています。
しかし、うまくいっておりません。
ご助言いただければと思います。
php含む5つのファイルをアップするので長くなってしまい、見にくいかと思いますが、よろしくお願いします。
該当するソースコード
<?php
ini_set('display_errors', 'On');
try {
// 接続
$pdo = new PDO('sqlite:qa');
// SQL実行時にもエラーの代わりに例外を投げるように設定
// (毎回if文を書く必要がなくなる)
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// デフォルトのフェッチモードを連想配列形式に設定
// (毎回PDO::FETCH_ASSOCを指定する必要が無くなる)
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
// テーブル削除
//$pdo->exec("DROP TABLE qa");
// テーブル作成
$pdo->exec("CREATE TABLE IF NOT EXISTS qa(
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_name VARCHAR(20),
user_id VARCHAR(20),
category VARCHAR(120),
detail VARCHAR(2000)
)");
} catch (Exception $e) {
echo $e->getMessage() . PHP_EOL;
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ナレッジ登録</title>
</head>
<body>
<h2>ナレッジ登録内容</h2>
<form action="knowledge_confirm.php" method="post">
<table>
<tr>
<td>登録者</td>
<td>
<input type="text" name="user_name">
</td>
</tr>
<tr>
<td>社員ID</td>
<td>
<input type="text" name="user_id">
</td>
</tr>
<tr>
<td>業務種別</td>
<td>
<select name="category">
<option value="操作関連">操作関連</option>
<option value="不具合について">不具合について</option>
<option value="その他">その他</option>
</select>
</td>
</tr>
<tr>
<td>内容</td>
<td>
<!-- cols属性=入力欄の幅(文字数)、rows属性=入力欄の高さ(行数) -->
<textarea name="detail" cols="30" rows="10" wrap="hard"></textarea>
</td>
</tr>
</table>
<input type="submit" value="送信">
</form>
</body>
</html>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ナレッジ登録</title>
</head>
<body>
<h2>入力内容の確認</h2>
<p>登録者:<?php echo $_POST['user_name']; ?></p>
<p>社員ID:<?php echo $_POST['user_id']; ?></p>
<p>業務種別:<?php echo $_POST['category']; ?></p>
<p>内容:<?php echo nl2br($_POST['detail']); ?></p>
<!-- ここにFORMとbuttonが必要です。 -->
<form action="knowledge_regist.php" method="post">
<!-- ここにinput hiddenが必要です -->
<input type="hidden" name="user_name" value="<?php echo $_POST['user_name']; ?>">
<input type="hidden" name="user_id" value="<?php echo $_POST['user_id']; ?>">
<input type="hidden" name="category" value="<?php echo $_POST['category']; ?>">
<input type="hidden" name="detail" value="<?php echo $_POST['detail']; ?>">
<input type="submit" value="送信">
<p>
<?php
ini_set('display_errors', 'On');
if (preg_match_all('/\A[A-Z]+[0-9]+\z/', $_POST['user_id'])) {
echo '正しい社員IDの形式です。';
} else {
echo '社員IDの形式が正しくありません。';
}
?>
</p>
</form>
</body>
</html>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ナレッジ登録</title>
</head>
<body>
<h1>ナレッジを登録しました</h1>
<?php
ini_set('display_errors', 'On');
try {
// DBへ接続
$pdo = new PDO('sqlite:qa');
// SQL実行時にもエラーの代わりに例外を投げるように設定
// (毎回if文を書く必要がなくなる)
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// デフォルトのフェッチモードを連想配列形式に設定
// (毎回PDO::FETCH_ASSOCを指定する必要が無くなる)
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
// 挿入のステートメントを作成する。
$stmt = $pdo->prepare("INSERT INTO qa".
"(user_name, user_id, category, detail) ".
"VALUES(?,?,?,?)");
// ステートメントを実行する。
$stmt->execute([
$_POST['user_name'],
$_POST['user_id'],
$_POST['category'],
$_POST['detail']
]);
} catch (Exception $e) {
echo $e->getMessage() . PHP_EOL;
}
?>
</body>
</html>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="https://cdn.simplecss.org/simple.min.css">
<title>ナレッジ検索</title>
<style>
.s_button {
width: 120px;
height: 50px;
}
.top {
text-align: center;
}
</style>
</head>
<body>
<h2>ナレッジ検索</h2>
<form action="knowledge_box.php" method="post">
<table>
<tr>
<td>検索キーワード</td>
<td>
<input type="text" name="keyword" value="<?php echo $_POST['keyword']; ?>" required>
</td>
</tr>
</table>
<input type="submit" class="s_button" value="検索開始">
</form>
<?php
ini_set('display_errors', 'On');
try {
// 接続
$pdo = new PDO('sqlite:qa');
// SQL実行時にもエラーの代わりに例外を投げるように設定
// (毎回if文を書く必要がなくなる)
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// デフォルトのフェッチモードを連想配列形式に設定
// (毎回PDO::FETCH_ASSOCを指定する必要が無くなる)
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
// 選択 (プリペアドステートメント)
$stmt = $pdo->prepare("SELECT * FROM qa WHERE keyword LIKE ='%keyword%'");
$stmt->execute();
$r1 = $stmt->fetchAll();
// 結果を確認
var_dump($r1);
} catch (Exception $e) {
echo $e->getMessage() . PHP_EOL;
}
?>
<h4>検索キーワードは「<?php echo $_POST['keyword']; ?>」です。</h4>
<table>
<tr>
<th>No.</th>
<th width="900" height="10" class="top">合致した内容</th>
</tr>
<?php foreach ($r1 as $row) {?>
<tr>
<td height="100"></td>
<td><?php echo $row[1]?></td>
<td><?php echo $row['detail']; ?></td>
</tr>
<tr>
<td height="100"></td>
<td><?php echo $row[2]?></td>
<td><?php echo $row['detail']; ?></td>
</tr>
<tr>
<td height="100"></td>
<td><?php echo $row[3]?></td>
<td><?php echo $row['detail']; ?></td>
</tr>
<tr>
<td height="100"></td>
<td><?php echo $row[3]?></td>
<td><?php echo $row['detail']; ?></td>
</tr>
<?php } ?>
</table>
</body>
</html>
自分で試したこと
ここに問題・エラーに対して試したことを記載してください。
0