リスを倒す 『初めてのPHP,MySQL,JavaScript&CSS』

『初めてのPHP,MySQL,JavaScript&CSS』勉強奮闘記

10-5. PHPからデータベースを操作する⑤結果の表示

半角スペースをチェックできるツールがあるらしい…
知らなかった…そうしたらエラーでうねらなかったのに。
ただあるあるネタにはまる自分が嬉しかったりする。。

今日は、挿入したデータを検索して表示する方法を勉強します。

1-1. 送信フォームの作成


まず、検索キーを送信するフォームsearch.htmlと受け取り検索処理のあとに結果を一覧表示するlist.phpを作成します。

search.htmlのコードは以下です。


<html>
<head>
<title>PHPのテスト</title>
<META http-equiv="Content-Type" content="text/html;
charset=utf-8">
</head>

<BODY bgcolor="#FFFFFF" text="#000000">
<FONT size ="4">PHPのテスト</FONT>

<FORM name="form1" method="post" action="list.php">
名前:<br>
<INPUT type="text" name="search_key">
<br>
<INPUT type="submit" value="検索する">
</FORM>

</body>
</html>

結果はこちら。
f:id:taro-blog2323:20160927223440p:plain

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";

$dsn = "$db_type:host=$db_host;
dbname=$db_name;charset=utf8";

try{
$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());
}

$search_key = '%'. $_POST['search_key'].'%';

try{
$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'].'%';」の部分で、検索キーを入れます。
「%検索キー%」と%で挟むと中間一致検索を実行できます。前方部分に%を入れれば前方一致かと思いきや、そこは逆で「検索キー%」だと前方一致検索です。

1-3.Htmlタグの無効化


先ほど作成したコードに続けて、検索結果の表示処理を記入します。

<html>
<head>
<title>PHPのテスト</title>
</head>
<body>
<?php
$db_user = "ユーザー名";
$db_pass = "パスワード";
$db_host = "localhost";
$db_name = "sampledb";
$db_type = "mysql";

$dsn = "$db_type:host=$db_host; dbname=$db_name;charset=utf8";

try{
$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());

$search_key = '%'. $_POST['search_key'].'%';

try{
$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{
?>

<TABLE width="450" border="1" cellspacing="0" cellpadding="8">
<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>

そしてまたもエラーわろた なんじゃこりゃーーーー