0

カテゴリと名前を含むフォームを持つページを作成したいのですが、データベースから名前を取得する必要があります。以前にこの質問をしたことがありますが、コードを変更したところ、「クエリが空でした」という結果が表示されました。なんでそんなこと言われるのかわからない。これがすべてのページコードです。

<html>
<head>
<title>Assign Examiner</title>
</head>

<body>

<?php include('../include/dbconnect.php');

$names=$_POST['user'];
$exp = $_POST['expert'];

$mysql_i=mysql_query("SELECT name FROM user WHERE expert='".$exp."'");
$mysql_res = mysql_query($mysql_i) or die(mysql_error());

mysql_close();

?>

<form name="examiner" action="" method="post">

<table align="center" width="50%" border="1">

<tr>
<td>Category :</td>
    <td><select name="expertise"><option value="multimedia">Multimedia
                     <option value="security">Security & Networking
                                 <option value="mobile">Android Mobile
                                 <option value="web">Web Development
                                 </option></option</option></option>
        </select>
    </td>
</tr>
<tr>
<td>Name :</td>
    <td><select name="exam"><option value="<?php echo $mysql_i;?>">PLEASE CHOOSE</option></select></td>
</tr>
</body>
</html>
4

2 に答える 2

1

mysql_query()関数を 2 回呼び出していますが、これは正しくありません。コードはもっと似ているはずです

$mysql_i = mysql_query("SELECT name FROM user WHERE expert='".$exp."'");

$actual_data = mysql_fetch_assoc($mysql_i);

echo $actual_data['some_table_field'];

mysql_query()ステートメント ハンドル (またはブール値false- 失敗した場合) を返します。そのハンドルは、さまざまなfetch()関連するメタデータ関数で使用されます。

また、 SQL インジェクション攻撃に対して脆弱であることにも注意してください。それらを回避する方法を学ぶまで、このコードを使用しないでください。

于 2013-09-06T16:55:31.110 に答える
1

最初の問題は、クエリでユーザーが入力したデータを使用していることです。代わりに、mysqli_ または PDO への移行を検討する必要があります。どちらも、より安全なコードを作成するのに役立ちます。切り替えることができない場合は、入力をサニタイズして、コードに悪影響を与えないようにする必要があります

2番目の問題はこれです:

$mysql_i=mysql_query("SELECT name FROM user WHERE expert='".$exp."'");
$mysql_res = mysql_query($mysql_i) or die(mysql_error());

mysql_query を 2 回呼び出しており、2 回目は最初のクエリの結果を渡しています。それではどうにもなりません。あなたに必要なのは:

$exp = mysql_real_escape_string($exp);    // sanitise your input!!!!

$sql = "SELECT name FROM user WHERE expert='".$exp."'";
$mysql_res = mysql_query($sql) or die(mysql_error());

あなた<form>が呼んだ「専門家」にも何もないので、$_POST['expert']空白になる可能性があります - 「専門家」を意味していましたか? についても同様です$_POST['user']

于 2013-09-06T16:55:38.603 に答える