10-5. PHPからデータベースを操作する⑤結果の表示
半角スペースをチェックできるツールがあるらしい…
知らなかった…そうしたらエラーでうねらなかったのに。
ただあるあるネタにはまる自分が嬉しかったりする。。
今日は、挿入したデータを検索して表示する方法を勉強します。
1-1. 送信フォームの作成
まず、検索キーを送信するフォームsearch.htmlと受け取り検索処理のあとに結果を一覧表示するlist.phpを作成します。
search.htmlのコードは以下です。 <BODY bgcolor="#FFFFFF" text="#000000"> <FORM name="form1" method="post" action="list.php"> </body>
<html>
<head>
<title>PHPのテスト</title>
<META http-equiv="Content-Type" content="text/html;
charset=utf-8">
</head>
<FONT size ="4">PHPのテスト</FONT>
名前:<br>
<INPUT type="text" name="search_key">
<br>
<INPUT type="submit" value="検索する">
</FORM>
</html>
結果はこちら。
$dsn = "$db_type:host=$db_host; try{ $search_key = '%'. $_POST['search_key'].'%'; try{ 1-2.データ検索
データベースに接続して、データを検索します。
list.phpを作成しますが、内容は、前回やったview.phpと同じでPDOを利用します。
<html>
<head>
<title>PHPのテスト</title>
</head>
<body>
<?php
$db_user = "sampple";
$db_pass = "passward";
$db_host = "localhost";
$db_name = "sampledb";
$db_type = "mysql";
dbname=$db_name;charset=utf8";
$pdo = new PDO ($dsn, $db_user, $db_pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
print "接続しました
";
} catch(PDOException $Exception){
die('エラー:'. $Exception->getMessage());
}
$sql="SELECT*FROM member WHERE last_name like:
last_name OR first_name like :first_name";
$stmh = $pdo ->prepare($sql);
$stmh ->bindValue(':last_name',
$_POST['last_name'], PDO::PARAM_STR);
$stmh ->bindValue(':first_name',
$_POST['first_name'], PDO::PARAM_STR);
$stmh ->bindValue(':age',
$_POST['age'], PDO::PARAM_INT);
$stmh->execute();
$count = $stmh->rowCount();
print "検索結果は". $count. "件です
";
}catch(PDOException $Exception){
print "エラー":. $Exception->getMessage
}
「$search_key = '%'. $_POST['search_key'].'%';」の部分で、検索キーを入れます。
「%検索キー%」と%で挟むと中間一致検索を実行できます。前方部分に%を入れれば前方一致かと思いきや、そこは逆で「検索キー%」だと前方一致検索です。
$dsn = "$db_type:host=$db_host; dbname=$db_name;charset=utf8"; try{ $search_key = '%'. $_POST['search_key'].'%'; try{ <TABLE width="450" border="1" cellspacing="0" cellpadding="8"> 1-3.Htmlタグの無効化
先ほど作成したコードに続けて、検索結果の表示処理を記入します。
<html>
<head>
<title>PHPのテスト</title>
</head>
<body>
<?php
$db_user = "ユーザー名";
$db_pass = "パスワード";
$db_host = "localhost";
$db_name = "sampledb";
$db_type = "mysql";
$pdo = new PDO ($dsn, $db_user, $db_pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
print "接続しました
";
} catch(PDOException $Exception){
die('エラー:'. $Exception->getMessage());
}
$sql="SELECT*FROM member WHERE last_name like:
last_name OR first_name like :first_name";
$stmh = $pdo ->prepare($sql);
$stmh ->bindValue(':last_name', $search_key, PDO::PARAM_STR);
$stmh ->bindValue(':first_name',$search_key, PDO::PARAM_STR);
$stmh->execute();
$count = $stmh->rowCount();
print "検索結果は". $count. "件です
";
}catch(PDOException $Exception){
print "エラー:". $Exception->getMessage();
}
if ($count < 1){
print "検索結果がありません
";
}else{
?>
<TBODY>
<TR><TH>番号</TH><TH>氏</TH><TH>名</TH><TH>年齢</TH></TR>
<?php
while ($row = $stmh ->fetch(PDO::FETCH_ASSOC)){
?>
</TR>
<?php
}
?>
</TBODY></TABLE>
<?php
}
?>
</body>
</html>
そしてまたもエラーわろた
なんじゃこりゃーーーー