下拉列表人口

时间:2013-12-22 17:10:57

标签: php jquery html sql

两个下拉列表 - 选择第一个值,然后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']); 
}
?>

1 个答案:

答案 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,请使用带有绑定的预准备语句。