两个下拉列表 - 选择第一个值,然后mysql_query返回答案,并将此数据填充到第二个下拉列表中。 问题是 - 第二个列表似乎没有填充。代码工作正常 - 我在firebug中看到输出。
<form method="post" action="showResult.php" >
<input type=hidden name="style" value="segment">
Choose wisely
<select name="pillow" id="pillow">
<option value="0">choose</option>
<option value="1">Red</option>
<option value="2">Blue</option>
</select>
Now, what do you want to start with?
<select id="ANSWER" name="ANSWER" size="1">
<option value="0">-</option> // this doesn't want to populate
</select>
<script type="text/javascript">
$("#pillow").change(function(){
$("#ANSWER").load(".test.php", {
id: $("#pillow option:selected").val()
});
});
</script>
</form>
test.php
:
<?php
include 'init.php';//here we do all stuff with connections and etc.
$name = $_REQUEST["id"];
//prevent simple injection
if(strstr($name,'.') || strstr($name, "\0")) die ("Be sure - it won't work =)");
mysql_query('SET NAMES "utf8"'); // should it be here?
$result = mysql_query("SELECT DISTINCT action FROM table WHERE pillow='$name'") or die('MySQL error!'. mysql_error());
while($row = mysql_fetch_assoc($result)){
//I see this log in firebug, but not in the dropdown list
printf('<option value="%s">%s</option>',$row['action'],$row['action']);
}
?>
答案 0 :(得分:1)
您需要在发送到服务器的id参数周围加上引号。在您当前的实现中,您将发送一个变量值作为键而不是键“id”。
改变这个:
id: $("#pillow option:selected").val()
到此:
"id": $("#pillow option:selected").val()
我将在接下来的回答中提到脚本中的安全漏洞:
1)不推荐使用mysql_函数集,请考虑尽快切换到mysqli
2)至少将转义值作为值传递给查询,目前您允许将任何值放入查询中,让您对sql注入攻击开放。如果您使用的是已弃用的mysql_函数集,请使用mysql_real_escape_string()来清理变量。如果您使用的是mysqli,请使用带有绑定的预准备语句。