1

Zend フレームワーク (php) と MySQL を使用しています。私の果物という名前のテーブルには2つの列があります。名前と由来。Name のドロップダウン リストがあり、ユーザーが選択した値に基づいて、Origin の 2 番目のドロップダウンがデータベースのクエリ後に入力されます。

モデル

<?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>

誰か助けてくれませんか?2 番目のドロップダウン リストに出力がありません。

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)
            );

また、HTMLselectには異なる値が必要です

<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 の quote 関数を使用して、データをエスケープおよびサニタイズします。

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