みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

phpでDBを検索したい

最近PHP+mysqlの勉強を始めて、入門書片手に試行錯誤している状況です。

phpで検索ボックスを作って、データベースから名前を引っ張ってきたいのですが、うまくいきません…

因みに同じページに表示したいと思っています。
あと、多分使っている関数が古いとは思いますが、PDOやmysqliとかにすると今より更に知識不足でエラーになってしまうので、とりあえず古いままで使っていますが気にしないでください…

データベース名:mydb
テーブル名:table

id | name |
---+------------+--
1 | 名前太郎 |
2 | 氏名太郎 |
3 | 名字一郎 |
4 | 名前五郎 |
5 | 氏名花子 |

こういうテーブルがあったとして、
名前 というキーワードで検索したときに、セレクトボックスに
名前太郎と名前五郎の2つが表示できたらと思っています。

根本的に間違っているのかもしれませんが、どのように変えればいいのかご教示いただけると幸いです。
何卒よろしくお願い致します。


<?php

ちょっとした別の処理~省略

print <<<_FORM_

<label for="name_search">名前検索</label>
<form action="" method="post">
<input name="u_name" type="text" id="u_namae" value="" />
<input type="submit">
</form>

_FORM_;

if (isset($_POST['u_name'])){
$kensaku = htmlspecialchars($_POST['u_name']);
$kensaku = "'%". $kensaku ."%'";

require_once('dbconnect.php');
$sql = sprintf("SELECT * FROM table WHERE name LIKE $kensaku ");
$recordSet = mysql_query($sql);

print <<<_FORM_
<select name="u_name">
_FORM_;

while ($kekka = mysql_fetch_assoc($recordSet)) {
$val=htmlspecialchars($kekka['name']);
?>

<option value="<?php print(htmlspecialchars($kekka['id'])); ?>">
<?php print(htmlspecialchars($kekka['name'])); ?>
</option>

<?php
}
print <<<_FORM_
</select>
_FORM_;
}
?>

投稿日時 - 2014-01-21 07:10:04

QNo.8439494

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

PHPでデータベースに接続するときのまとめ
http://qiita.com/mpyw/items/b00b72c5c95aac573b71

Mysql関数でLIKE検索を行う際でも参考になる情報を掲載しているのでご覧ください。

サンプル
http://pastebin.com/YDH12zqe

Mysql関数使うと例外処理が非常に面倒なので、簡略化するためにErrorExceptionを使っています。こんなことするぐらいなら、上記まとめでも書いていますが「オブジェクト指向を毛嫌いせずに」学んでいった方が身のためだと思いますが…

投稿日時 - 2014-01-21 09:27:50

ANo.1

まず・・・。ネイティブなMySQL関数はすでにオワコンです。PDOを推奨します。

http://www.php.net/manual/ja/mysqlinfo.api.choosing.php

>PDOやmysqliとかにすると今より更に知識不足でエラーになってしまうので、
>とりあえず古いままで使っていますが気にしないでください…

だからといって「使えない知識」を増やしてどうするんですかね。

http://www.php.net/manual/ja/book.pdo.php


提示されていない部分だと思いますが、DB接続後に mysql_set_charset はありますか(クライアント文字セットの設定をしていないと、日本語の処理で躓きます)。

あと、

$kensaku = htmlspecialchars($_POST['u_name']);
$kensaku = "'%". $kensaku ."%'";

htmlspecialchars をSQL文の生成に使ってはいけません。MySQLのSQL文のエスケープには(MySQL関数であれば)mysql_real_escape_stringを使います。


というか今から書くならPDOでプレースホルダで書き直してください。

投稿日時 - 2014-01-21 08:53:49

あなたにオススメの質問