1

我正在使用 Zend 框架 (php) 和 MySQL。我的名为fruit 的表有2 列。名称和来源。我有一个名称的下拉列表,根据用户选择的任何值,查询数据库后将填充 Origin 的第二个下拉列表。

该模型

<?php
    class Application_Model_fruit extends Zend_Db_Table_Abstract
    {
        public function getname($origin)
        {
            $db = $this->getDefaultAdapter();
            $auth = Zend_Auth::getInstance();
            $select = "SELECT Name FROM fruit where origin = $origin";
            $stmt = $db->query($select);
            $result = $stmt->fetchAll();
            return $result;
        }
    }
?>

控制器

<?php
    class fruitController extends Zend_Controller_Action
    {
        private $_db;
        private $info;

        public function init()
        {
            $this->_db = Zend_Registry::get('db');
            $this->info = new Application_Model_fruit();
        }

        public function nameAction()
        {
            $origin=$this->getRequest()->getParam('Origin');
            echo $data = $this->info->getname($origin);
        }
    }
?>

.phtml

<div>
    Name:
    <select id="name">
        <option value="1">Apple</option>
        <option value="1">Orange</option>
    </select>
</div>


<div>
    Origin:
    <select id="origin">
    </select>
</div>

Ajax/Jquery

<script language="Javascript">
    $(document).ready(function(){
        $("#name").change(function(){

            $.ajax({
                type:"POST",
                url: "<?php echo SITE_URL;?>fruit/name",
                data:"Name="+$("#name").val(),

                success:function(ret){
                    $("#origin").val(ret);
                }
            }); 
        });
    });
</script>

有人可以帮我吗?我在第二个下拉列表中没有得到任何输出。

4

2 回答 2

2

您的服务器脚本必须是

public function nameAction()
{
   $origin=$this->getRequest()->getParam('Name');

....

还可以保护您的数据库免受 sql 注入

$select = "SELECT Name FROM fruit where origin =?";
    $stmt = $db->query(
                 $select,
                array($orgin)
            );

HTML也select必须有不同的价值

<select id="name">
 <option value="1">Apple</option>
 <option value="2">Orange</option>
 </select>
于 2013-07-10T13:57:32.803 回答
1

笔记

由于 orgin 是一个整数,这并不能解决核心问题,但不这样做会让你为 SQL 注入敞开大门。这应该用作更全面的解决方案的一部分。

你的问题是你的 $orgin 没有被引号包围或以任何方式转义/清理。

使用 Zend_Db_Adapter 的引用函数来转义和清理您的数据。

$select = "SELECT Name FROM fruit where origin = ".$db->quote($orgin);
于 2013-07-10T13:55:26.957 回答