PHPとMYSQLで検索機能を実装する:今すぐできる!

php-PHPとMYSQLで検索機能を実装-アイキャッチ PHP

PHPとMYSQLで検索フォームを実装する方法をご紹介します。

複数の特定カラムから、キーワードにマッチするデータを抽出することができます。

MYSQLにテーブル作成

MYSQLにデータを準備します。


 
 

コード

PHPとHTMLを作成します。

sample.php


<?php
//データベース接続
$dsn='mysql:dbname=sample;host=localhost;charset=utf8';
$user='root';
$password='';
$dbh=new PDO($dsn,$user,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

//「検索」ボタン押下時
if (isset($_POST["search"])) {

//「名前」だけ入力されている場合
if (isset($_POST["search_fname"]) && empty($_POST["search_fsanchi"])){
$search_fname = $_POST["search_fname"];
$search_fsanchi = '';
}

//「産地」だけ入力されている場合
if (empty($_POST["search_fname"]) && isset($_POST["search_fsanchi"])){
$search_fname = '';
$search_fsanchi = $_POST["search_fsanchi"];
}

//「名前」「産地」両方が入力されている場合
if (isset($_POST["search_fname"]) && isset($_POST["search_fsanchi"])){
$search_fname = $_POST["search_fname"];
$search_fsanchi = $_POST["search_fsanchi"];
}

//実行
$sql="SELECT * FROM fruit WHERE f_name like '%{$search_fname}%' and f_sanchi like '%{$search_fsanchi}%'";
$rec = $dbh->prepare($sql);
$rec->execute();
$rec_list = $rec->fetchAll(PDO::FETCH_ASSOC);

}else{

//「検索」ボタン押下してないとき
$sql='SELECT * FROM fruit WHERE 1';
$rec = $dbh->prepare($sql);
$rec->execute();
$rec_list = $rec->fetchAll(PDO::FETCH_ASSOC);
}

//データベース切断
$dbh=null;
?>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>

<!--検索-->
<form action="sample.php" method="POST">
<table border="1" style="border-collapse: collapse">
<tr>
<th>名前</th>
<td><input type="text" name="search_fname" value="<?php if( !empty($_POST['search_fname']) ){ echo $_POST['search_fname']; } ?>"></td></td>
<th>産地</th>
<td><input type="text" name="search_fsanchi" value="<?php if( !empty($_POST['search_fsanchi']) ){ echo $_POST['search_fsanchi']; } ?>"></td>
<td><input type="submit" name="search" value="検索"></td>
</tr>
</table>
</form>
<br />

<!--検索解除-->
<?php if (isset($_POST["search"])) {?>
<a href="http://localhost/sample.php">検索を解除</a><br />
<?php } ?>

<table border="1" style="border-collapse: collapse">
<tr>
<th>ID</th>
<th>名前</th>
<th>値段</th>
<th>産地</th>
</tr>

<!--MySQLデータを表示-->
<?php foreach ($rec_list as $rec) { ?>
<tr>
<td><?php echo $rec['f_id'];?></td>
<td><?php echo $rec['f_name'];?></td>
<td><?php echo $rec['f_price'];?></td>
<td><?php echo $rec['f_sanchi'];?></td>
</tr>
<?php } ?>
</table>

</body>
</html>

 

結果

「名前」と「産地」の検索フォームを上部に表示します。


 

「名前」に ”リンゴ” と入力し、検索ボタンをクリックすると、
”リンゴ” のデータに絞り込みします。


 

「産地」に ”北海道” と入力し、検索ボタンをクリックすると、
”北海道” のデータに絞り込みします。


 

「名前」に ”バナナ” 、「産地」に ”沖縄” と入力し、検索ボタンをクリックすると、
”バナナ” と ”沖縄” のデータに絞り込みします。


 

「検索を解除」のリンクをクリックすると、
検索前の画面に戻ります。


 
 
PHPは独学なので、ここまで作るのに試行錯誤しました(;´Д`)
思うように動作するコードを作ることができました。

この記事がお役に立ちますと幸いです。
 

PHP MYSQLテーブルからキーワードにマッチする行表示
...

 

「1週間でPHPの基礎が学べる本」
1週間でPHPがちょっとだけ使えるようになれる!
わかりやすい!と評判の良い参考書です

広告
PHP
kirinote.com