検索フォームの作り方について
解決したいこと
検索フォームを作成中です。
DBはすでにあるものとします。
htmlの中にphpを組み込むまでは画面表示はされるのに、phpを組み込むと画面表示されなくなります。
(AWS Clud9を使っています)
キーワードを入れると、検索してくれてそれを表示させるものに仕上げるにはどうしたらいいのでしょうか?
前半のコードがphpを入力する前で、後半がform下にphpを挿入したコードとなります。
<!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>
<h4>検索キーワードは「<?php echo $_POST['keyword']; ?>」です。</h4>
<table>
<tr>
<th>No.</th>
<th width="900" height="20" class="top">合致した内容</th>
</tr>
<tr>
<td height="100"></td>
<td><?php echo $row[1]?></td>
</tr>
<tr>
<td height="100"></td>
<td><?php echo $row[2]?></td>
</tr>
<tr>
<td height="100"></td>
<td><?php echo $row[3]?></td>
</tr>
<tr>
<td height="100"></td>
<td></td>
</tr>
</table>
</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
try {
// 接続
$pdo = new PDO('sqlite:qa');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
// 選択
$stmt = $pdo->prepare("SELECT * FROM qa WHERE keyword = '%$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="20" class="top">合致した内容</th>
</tr>
<tr>
<td height="100"></td>
<td><?php echo $row[1]?></td>
</tr>
<tr>
<td height="100"></td>
<td><?php echo $row[2]?></td>
</tr>
<tr>
<td height="100"></td>
<td><?php echo $row[3]?></td>
</tr>
<tr>
<td height="100"></td>
<td></td>
</tr>
</table>
</body>
</html>
ここから下は登録画面用に作成した4つのファイルを記載します。
<?php
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
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
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>
### 自分で試したこと
ここに問題・エラーに対して試したことを記載してください。
0