SELECT文とwhere句を使って検索機能を実装してみる

PHP

今回はoutput.phpに検索枠を作り、その枠に入力した値で検索できるようにしましょう。

<form action="out.php" method="post">
ID:<input type="text" name="id"><br>
性別:<input type="text" name="gender"><br>
地域:<input type="text" name="area"><br>
<input type="submit" value="検索">
<input type="button" value="リセット"  onClick="resetBtn()">
</form>


リセットボタンの作成

<script>
function resetBtn(){
location.href = "http://localhost:8888/db-form2/out.php";
}
</script>

検索機能の追加

id検索
'SELECT * FROM mytable WHERE id="'.$id.'"  ';
性別か地域のOR検索
'SELECT * FROM mytable WHERE area="'.$area.'" or gender="'.$gender.'" ';
性別と地域のAND検索
'SELECT * FROM mytable WHERE area="'.$area.'" and gender="'.$gender.'" ';
IDか性別と地域の複合検索
'SELECT * FROM mytable WHERE id="'.$id.'" or area="'.$area.'" and gender="'.$gender.'" ';

さらに登録した時間も記録出来るようにデータベースに送信するファイルに以下の変数を追加しておきましょう

$mydate = date('Y-m-d G:i:s');

gray-code.com

入力画面

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>会員登録|入力画面</title>
</head>

<body>
<h1>会員登録|入力画面</h1>
<form method="post" action="submit.php">
<dl>
<dt>お名前</dt>
<dd><input type="text" name="name" placeholder="山田太郎" required></dd>
<dt>メールアドレス</dt>
<dd><input type="email" name="email" required></dd>
<dt>性別</dt>
<dd>
<input type="radio" name="gender" required id="male" value="男性"><label for="male">男性</label>
<input type="radio" name="gender" required id="female" value="女性"><label for="female">女性</label>
</dd>
<dt>お住いの地域</dt>
<dd>
<select name="area">
<option value="北海道">北海道</option>
<option value="東北">東北</option>
<option value="関東">関東</option>
<option value="中部">中部</option>
<option value="近畿">近畿</option>
<option value="中国">中国</option>
<option value="四国">四国</option>
<option value="九州・沖縄">九州・沖縄</option>
</select>
</dd>
</dl>
<input type="submit" value="送信">
</form>
</body>
</html>


送信画面

<?php
$name = $_POST['name'];
$email = $_POST['email'];
$gender = $_POST['gender'];
$area = $_POST['area'];
$myDate =  date('Y-m-d G:i:s');


// セッションの開始
session_start();
$_SESSION['name'] = $name;
$_SESSION['email'] = $email;
$_SESSION['gender'] = $gender;
$_SESSION['area'] = $area;
$_SESSION['myDate'] = $myDate;
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>会員登録|送信画面</title>
</head>

<body>
<h1>登録ありがとうございました。</h1>

<?php
//データベースと接続
$user = 'root';
$pass = '';
$dsn = 'mysql:host=localhost;dbname=mydb-1011;charset=utf8';
$conn = new PDO($dsn, $user, $pass);

// データの送信
$sql = 'INSERT INTO mytable(name, email, gender, area, date) VALUES("'.$name.'","'.$email.'","'.$gender.'","'.$area.'",  "'.$myDate.'"   )';

$stmt = $conn -> prepare($sql);
$stmt -> execute();

//セッションの破棄
session_destroy();
?>
</body>
</html>

検索結果画面

<?php
include('db.php');
?>

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>結果表示画面</title>
</head>

<body>
<form method="post" action="output.php">
ID:<input type="text" name="id">
性別:<input type="text" name="gender">
お住いの地域:<input type="text" name="area">
<input type="submit" value="検索">
<input type="button" value="リセット" onClick="resetBtn();">
</form>
<script>
function resetBtn(){
location.href = "http://localhost/yajima-php1011/member/output.php";
}
</script>
<?php
if(!empty($_POST['id']) || !empty($_POST['gender']) || !empty($_POST['area'])){

$id = $_POST['id'];
$gender = $_POST['gender'];
$area = $_POST['area'];
//var_dump($gender);

//テーブルの中の全てのデータを参照
//$sql = 'SELECT * FROM mytable WHERE 1';

//IDを指定してデータを表示
$sql = 'SELECT * FROM mytable WHERE id="'.$id.'" or area="'.$area.'" and gender="'.$gender.'"    ';
$stmt = $conn -> prepare($sql);
$stmt -> execute();

//データがあるだけ全部取得
while(1) {
 $rec = $stmt -> fetch(PDO::FETCH_ASSOC);

//もうデータがなければ「break」でループから抜ける
    if($rec == false) {
        break;
    }

// stmtから取得したデータを表示
echo $rec['id'].':&nbsp;';
echo $rec['name'].':&nbsp;';
echo $rec['email'].':&nbsp;';
echo $rec['gender'].':&nbsp;';
echo $rec['area'].':&nbsp;';
echo $rec['date'];
echo "<br>";
}

//データベース接続切断
 $dbh = null;

}
?>

</body>
</html>

データベース接続情報画面

<?php
//データベースと接続
$user = 'root';
$pass = '';
$dsn = 'mysql:host=localhost;dbname=mydb-1011;charset=utf8';
$conn = new PDO($dsn, $user, $pass);
?>

コメント

タイトルとURLをコピーしました