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()两次调用函数,这是不正确的。代码应该更像

$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 - 它们都可以帮助您编写更安全的代码。如果你不能切换,那么你需要清理输入以确保它不会对你的代码做任何讨厌的事情

第二个问题是这样的:

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

你调用 mysql_query 两次,第二次,你传入第一个查询的结果。那不会有任何作用。所有你需要的是:

$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 回答