php ajax msql jquery zend framework


php ajax msql jquery zend framework

我使用的是Zend框架(php)和MySQL。我的水果桌有两列。名称和原产地。我有一个Name的下拉列表,根据用户选择的值,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>

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

您的服务器脚本必须是

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>

注意

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

你的问题是你的$orgin没有被引号包围,也没有以任何方式转义/消毒。

使用Zend_Db_Adapter的引号函数来转义和清除数据。

$select = "SELECT Name FROM fruit where origin = ".$db->quote($orgin);