7
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【PHP】名前検索機能:部分一致検索と検索KW保存処理

Posted at

DBに登録してある個人情報を部分一致で検索できる機能の実装。
※HTMLとPHPの記述の組み合わせが汚いなー笑

今回のポイントは
・検索窓に入力したKWがそのまま保持される
・曖昧検索
です。

特に曖昧検索では「%」を入力すると全データ引っ張ってきてしまうので
エスケープ処理をしなければいけません。
※参考にさせていただいた方のURLは後ほど記載します。

select.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>名前検索機能</title>
</head>
<body>
<form action="" method="post">
<p>検索したい人の名前を入力してください</p>
<input type="search" name="search" placeholder="キーワードを入力" value="
<?php
	if (!empty($_POST['search'])) {
		echo $_POST['search'];
	}
?>">
<input type="submit" name="submit" value="検索">
</form>
<?php
$db = 'mysql:host=hogehoge; dbname=hogehoge-hogehoge';
$user = 'hogehoge';
$password = 'xxxxxx';
$dbh = new PDO($db, $user, $password);

try {
	if (!empty($_POST['search'])) {
?>
<?php
		$dbh = new PDO($db, $user, $password);
		$stm = $dbh->prepare("SELECT * FROM user WHERE name LIKE :user_name");
		$stm->bindValue(":user_name", '%' . addcslashes($_POST['search'], '\_%') . '%');
		$stm->execute();
		if ($stm->rowCount()) {
?>
<table border='1'>
<tr>
<th>id</th>
<th>名前</th>
<th>身長</th>
<th>誕生日</th>
<th>趣味</th>
</tr>
<?php
			foreach ($stm as $value) {
				echo '<tr>';
				echo '<td>' . $value['id'] . '</td>';
				echo '<td>' . $value['name'] . '</td>';
				echo '<td>' . $value['height'] . '</td>';
				echo '<td>' . $value['birthday'] . '</td>';
				echo '<td>' . $value['hobby'] . '</td>';
				echo '<tr>';
			}
		} else {
			echo '該当するユーザーがいません';
		}
	} else {
		echo '文字を入力してください';
	}
} catch (PDOException $e) {
		echo 'エラーです!';
}
?>
</body>
</html>

アウトプットはこんな感じ。
※何も入力していない状態
スクリーンショット 2019-09-02 7.11.59.png

「%」で検索した場合
※予め名前の一部に%を入れている。
スクリーンショット 2019-09-02 7.12.10.png

この部分がエスケープ処理の該当箇所

select.php
$stm->bindValue(":user_name", '%' . addcslashes($_POST['search'], '\_%') . '%');
7
10
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
7
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?