2013-07-10 8 views
1

Я использую фреймворк Zend (php) и MySQL. В моей таблице с именем fruit есть 2 столбца. Имя и происхождение. У меня есть раскрывающийся список для имени и на основе того значения, которое выбрал пользователь, после выписки из базы данных будет выведен второй выпадающий список для Origin.php ajax msql jquery zend framework

Модель

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

Аякса/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> 

Может кто-нибудь, пожалуйста, помогите мне? Во втором выпадающем списке я не получаю никакого вывода.

+5

Претендент " лучший из лучших n название ". – Jimbo

+0

Хорошо, что ваш использование Zend_Table неверен – DevZer0

+0

яблоко и апельсин имеют одинаковый знак –

ответ

1

ПРИМЕЧАНИЕ

Поскольку orgin представляет собой целое число это не решает основную проблему, но не делает это оставит вас широко открыты для инъекции SQL. Это должно использоваться как часть более комплексного решения.

Проблема заключается в том, что ваш $ orgin не окружен кавычками или не экранирован.

Используйте функцию цитаты Zend_Db_Adapter, чтобы избежать и дезинформировать ваши данные.

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

origin - целое число. Это не проблема. – DevZer0

+1

@ DevZer0 Теперь я вижу ... – Orangepill

+0

Да, я тоже это пропустил :) – DevZer0

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> 
+0

Нет, это не обязательно – DevZer0

+0

В то время как первый снипп не верен, я верю, что второй адрес проблемы, см. Мой пост, чтобы правильно построить свой чтобы защитить себя от инъекций. Удалите первый фрагмент (данные могут быть строкой в ​​этом формате на основе документации jQuery ajax), и я буду повышать – Orangepill

+0

@Orangepill. Я удалил фрагменты благодаря исправлению –