LoginSignup
1
3

More than 3 years have passed since last update.

【PHP】ユーザーの検索機能

Posted at

PHPについて学習内容を備忘録としてまとめます。
ユーザーの検索機能を実装しましたので、作成方法を記載します。

anime.gif

検索フォーム作成

まずはユーザーを検索するためのフォーム画面を表示させます。
内部では入力した値が入ったユーザー名を検索する処理を行います。

//ユーザーを検索するフォーム
<form method="post" action="#" class="search_container">
    <input type="text" name="search_input" placeholder="ユーザー検索">
    <input type="submit" name="search_user">
</form>

placeholderを設定しフォーム画面にはデフォルトでユーザー検索と表示させます。

検索機能を動かす

先ほど作成した検索フォームと同じphpファイルに下記コードをかきます。
header関数があるのでなるべくファイルの上部にかくことを推奨します。

<?php
if (!empty($_POST['search_user'])){
    $hoge = $_POST['search_input'];
    header("Location:user_list.php?type=search&query=${hoge}");
  }
?>

こちらは検索フォームが検索されたときに動く処理です。

user_list.phpはユーザー一覧画面になっており、今回の検索機能を実装する対象のファイルなのですが、
検索機能が動いたときにuser_list.phpにリダイレクトしtype=searchtypeの値を指定し、query=${hoge}で検索フォームの値を取り出しています。

検索機能の処理

それでは受け取った値を元にユーザーを表示させていきます。

$page_type = $_GET['type'];

switch ($page_type) {
    case 'all';
    $users = get_users('all','');
    break;

    case 'search':
    $users = get_users('search',$_GET['query']);
    break;
  }

foreach((array)$users as $user): 

 print'<br />';
 print '<a href="../user/user_disp.php?user_id='.$user['id'].'">'.$user['name'].'</a>'; 

endforeach

まず$page_type = $_GET['type'];でURLからtypeの値を取り出して$page_typeに渡します。
そして$page_typeの値によって出力するユーザーを変更します。
ユーザーを取り出す際にはget_users関数を使って取り出します。

get_users関数は下記のようになっています。

  function get_users($type,$query){
    try {
      $dsn='mysql:dbname=shop;host=localhost;charset=utf8';
      $user='root';
      $password='';
      $dbh=new PDO($dsn,$user,$password);

      switch ($type) {
        case 'all':
        $sql = "SELECT id,name,password,profile
                FROM user
                WHERE delete_flg = 0";
        $stmt = $dbh->prepare($sql);
        $stmt->execute();
        return $stmt->fetchAll();
        break;

        case 'search':
          $sql = "SELECT id,name,password,profile
                  FROM user
                  WHERE name LIKE CONCAT('%',:input,'%') AND delete_flg = 0";
          $stmt = $dbh->prepare($sql);
          $stmt->bindValue(':input', $query);
          $stmt->execute();
          return $stmt->fetchAll();
        break;
      }
    } catch (\Exception $e) {
      error_log('エラー発生:' . $e->getMessage());
      set_flash('error',ERR_MSG1);
    }
  }

引数で渡された値を元に処理を分岐して$queryの値から取り出すユーザーを指定しています。
WHERE name LIKE CONCAT('%',:input,'%')で検索フォームに入力された値が入っているユーザー名を出力しています。


foreach((array)$users as $user): 

 print'<br />';
 print '<a href="../user/user_disp.php?user_id='.$user['id'].'">'.$user['name'].'</a>'; 

endforeach

最後に取り出したユーザー名を表示させれば実装完了です。

参考URL

1
3
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
1
3