電子書籍の厳選無料作品が豊富!

FORMで入力された値をもとにデータベースから値を拾ってきて
それを画面に表示させる、という処理をしたいと思っています。

具体的には、usersという「名前」と「ID」が格納されたテーブルがあり、
名前を入力するとその名前に紐付いたIDを表示させるというものです。

usersテーブルには、

id | name
---------
1 | abc
2 | def
3 | ghi

というようなデータが入っています。

下記のように書いているのですが、
IDを拾ってきてくれません。
何を入力しても「あなたのIDはです」
と表示されます。

FORMで入力した値が"abc"なら
「あなたのIDは1です」と表示したいです。


echo $user_name;
を実行すると入力した名前が出てくるので
データベースから抜き出す処理がうまくいっていないと考えてます。

つたない文章になってしまい、
申し訳ありませんが、
お助けいただければと思います。

よろしくお願いいたします。

-------
<?php
if ($_SERVER['REQUEST_METHOD']=="POST") {

foreach($_POST as $k => $v) {
if(get_magic_quotes_gpc()) {
$v=stripslashes($v);
}
$v=htmlspecialchars($v);
$array[$k]=$v;
}
extract($array);

$con = mysql_connect('localhost', '【ユーザー名】', '【パスワード】');
if (!$con) {
exit('DBに接続できませんでした。');
}

$result = mysql_select_db('【データベース名】', $con);
if (!$result) {
exit('データベースを選択できませんでした。');
}

$db = mysql_query('SELECT * FROM users where name='.$user_name, $con);
$db = mysql_fetch_array($db);

$message="あなたのIDは".$db['id']."です";
echo $message;
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dt …
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php print $language->language ?>" lang="<?php print $language->language ?>" dir="<?php print $language->dir ?>">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<title>テスト</title>
</head>

<body>
<form action="<?= $_SERVER['PHP_SCRIPT']; ?>" method="post" accept-charset="UTF-8">
<b>名前:</b><br>
<input type="text" name="user_name" value="" />
<br><br>
<input type="submit" value="ID確認" /><INPUT type="reset" name="reset" value="リセット">
</form>
</body>
-------

A 回答 (2件)

まず大前提としてpostデータをextractするのは最悪なのでやってはいけません


面倒でも変数への代入は指定して処理をしましょう。

そのうえで今回の問題点はここ。
>$db = mysql_query('SELECT * FROM users where name='.$user_name, $con);
$user_nameを文字列としてSQLで参照するならクォートで囲まなくてはいけません。
またmysqlに投げる際には全ての変数はmysql_real_escape_stringするのが基本です。
それと$dbに取った結果を、同じ名前の$dbに受け直すのもあまり美しくありません。

そうじてこんな感じになります。

$user_name=$_POST["user_name"];
$user_name=mysql_real_escape_string($user_name);
$db = mysql_query("SELECT * FROM users where name='".$user_name."'", $con);
$val = mysql_fetch_array($db,MYSQL_ASSOC);
$message="あなたのIDは".$val['id']."です";
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
おかげさまで正常に動くようになりました。

また、extractするのは良くないとの
助言もいただきありがとうございました。
見つけた時は便利だと思いましたが、
1つ1つ指定して代入するようにしました。

お礼日時:2011/12/20 16:46

こんにちは。



動作確認したわけでは無いので違っていたら申し訳ないのですが

$db = mysql_query('SELECT * FROM users where name='.$user_name, $con);
のSQLが間違っています。

$db = mysql_query("SELECT * FROM users where name='".$user_name."'", $con);
name='abc'
文字は''で囲まないといけません。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
文字列は"で囲まないといけないという
初歩的なミスですみません・・・
おかげさまで正常に動くようになりました。

お礼日時:2011/12/20 16:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!