【PHP】POST送信された単語で、データベース内を検索し、結果を表示する方法
データベースの膨大な情報の中から、必要なデータを検索し、表示できたら、 とても便利です。今回は、PHPファイル1ページで完結する検索方法を紹介します。
検索フォーム
1行目 : PHPファイル一つで完結するので、actionは、 空欄でOK。
3行目 : nameは、ここではsearch
としておきます。
<form action="" method="POST">
<label for="">search</label><br>
<input type="text" name="search"/><br>
<input type="submit" name="submit"/>
</form>
PHPでPOSTを受け取る
1行目 : issetで、POSTを受け取った時の処理を書く。
3行目 : POST送信(inputの中身)が空白だったら、エラーを表示。
if(isset($_POST["submit"])){
if ($_POST['search'] === "" ){
echo '<div class="err">単語が入力されていません。</div>';
}else{
// 処理を書く
}
}
データベースに接続する
1行目 : データベースに接続する関数を作っておく。
function dbc(){
$dsn = 'mysql:host=localhost;dbname=xxxxxxxx;charset=utf8';
$user = 'xxxxxxxx';
$pass = 'xxxxxxxx';
try {
$dbh = new PDO($dsn,$user,$pass,[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);
} catch(PDOException $e) {
echo '接続失敗'. $e->getMessage();
exit();
};
return $dbh;
}
if(isset($_POST["submit"])){
if ($_POST['search'] === "" ){
echo '<div class="err">単語が入力されていません。</div>';
}else{
$dbh = dbc(); // データベースに接続
}
}
POST送信された単語で検索
7行目 : データベースのテーブル名とカラム名は ご自身のものを指定してください。
if(isset($_POST["submit"])){
if ($_POST['search'] === "" ){
echo '<div class="err">単語が入力されていません。</div>';
}else{
$dbh = dbc();
try{
$getSerachData = $dbh->prepare(" SELECT * FROM テーブル名 WHERE name LIKE :name ORDER BY date desc");
$getSerachData->bindValue(":name", '%' . addcslashes($_POST['search'], '\_%'). '%');
$getSerachData->execute();
$getSerachData = $getSerachData->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e){
print('Error:'.$e->getMessage());
$errors['error'] = "データベース接続失敗しました。";
}
}
}
検索結果をテーブルに表示
17行目 : いったんPHPを閉じ、HTMLを書きます。
30-35行目 : 得られた検索結果の長さ分だけforeachで繰り返す。
40、41行目 : ここの閉じカッコをお忘れなく。
<?php
if(isset($_POST["submit"])){
if ($_POST['search'] === "" ){
echo '<div class="err">単語が入力されていません。</div>';
}else{
$dbh = dbc();
try{
$getSerachData = $dbh->prepare(" SELECT * FROM テーブル名 WHERE name LIKE :name ORDER BY date desc");
$getSerachData->bindValue(":name", '%' . addcslashes($_POST['search'], '\_%'). '%');
$getSerachData->execute();
$getSerachData = $getSerachData->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e){
print('Error:'.$e->getMessage());
$errors['error'] = "データベース接続失敗しました。";
}
?> <!--いったんPHPを閉じる-->
<div>
<span class="searchData"><?php echo $_POST['search'];?></span>
で検索しました。
</div>
<div class="wrapper">
<table>
<tr>
<th>日付</th>
<th>名前</th>
</tr>
<?php foreach($getSerachData as $data):?> <!--検索結果の長さ分だけ繰り返す-->
<tr>
<td><?php echo $data['date'] ?></td>
<td><?php echo $data['name'] ?></td>
</tr>
<?php endforeach; ?> <!--ここまでを繰り返す-->
</table>
</div>
<?php
} // 6行目の閉じカッコ
} // 2行目の閉じカッコ
?>
以下に、全体のコードがダウンロードできるようにしておきます。 ご自身の環境に合わせて、中身を書き換えてください。