PHPについて学習内容を備忘録としてまとめます。
ユーザーの検索機能を実装しましたので、作成方法を記載します。
##検索フォーム作成
まずはユーザーを検索するためのフォーム画面を表示させます。
内部では入力した値が入ったユーザー名を検索する処理を行います。
//ユーザーを検索するフォーム
<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=search
でtype
の値を指定し、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
https://qiita.com/nyann123/items/7320d98d17768986add0