我想创建一个包含类别和名称的表单的页面,我应该从数据库中检索名称。我之前问过这个问题,现在我修改了我的代码,结果显示“查询为空”。我不知道为什么会这样说。这是我的所有页面代码。
<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>
答案 0 :(得分: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 injection attacks的攻击。在学习如何避免使用此代码之前,请不要使用此代码。
答案 1 :(得分:1)
第一个问题是您在查询中使用用户输入的数据。您应该考虑转移到mysqli_或PDO - 它们都可以帮助您编写更安全的代码。如果你无法切换,那么你需要sanitise the input以确保它不会对你的代码做任何讨厌的事情
第二个问题是:
$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']
也是如此。