▲TOPへ戻る

【PHP】POST送信された単語で、データベース内を検索し、結果を表示する方法

append appendChild

データベースの膨大な情報の中から、必要なデータを検索し、表示できたら、 とても便利です。今回は、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行目の閉じカッコ
?>

以下に、全体のコードがダウンロードできるようにしておきます。 ご自身の環境に合わせて、中身を書き換えてください。

profile

パソコン好きなガオ

コロナ禍によるステイホームを機にプログラミングを学ぶ。パソコンに関してはプロではないが、ちょっと詳しい程度。

パソコン

javascript

カメラ

ブログ