Как заполнить текстовое поле информацией базы данных после другого поля lostfocus - PullRequest
0 голосов
/ 11 января 2012

Не могли бы вы помочь мне найти способ решить мою проблему, пожалуйста?

У меня есть 4 поля для ввода текста: number, key, firstname и name.

Когда я заполняю таблицу из числового поля после его заполнения, я хотел бы проверить в своей базе данных, существует ли этот номер.

Если это так, мое приложение должно выбрать имя и имя, связанное с номером (в моей базе данных).и заполните другие поля имя и имя, а затем отключите эти поля.

Я думаю, что мне следует использовать ajax, но я не знаю, как использовать ajax и Zend для его достижения.

Я искал в Интернете и нашел несколько учебных пособий, которые мне не понятны.

Пожалуйста, не могли бы вы дать мне пошаговый способ сделать это?

Спасибо

Ответы [ 2 ]

1 голос
/ 11 января 2012

Просто общие мазки:

  1. Создайте свою форму стандартным способом, используя Zend_Form.
  2. На стороне клиента (например, с помощью jQuery) присоедините обработчик onchange к числовому полю.
  3. Обработчик onchange выполняет AJAX-вызов для действия, называемого чем-то вроде checkNumberExistsAction(), которое выполняет поиск в БД. Вернуть информацию в формате JSON, содержащую результаты вашей проверки.
  4. Функция успеха вашего вызова AJAX затем проверяет возвращаемый результат, заполняет и отключает другие элементы.

Одна вещь, которую следует запомнить: не полагайтесь исключительно на эту обработку на стороне клиента, чтобы предотвратить отправку отключенных полей. Пользователи могут отключить сценарии на стороне клиента, поэтому убедитесь, что на стороне сервера также имеется проверка.

0 голосов
/ 01 августа 2012

Я полностью согласен с подходом @David и отмечаю то же самое, публикуя этот скелетный код:

sampleview.phtml

echo '<div id="a">'.$this->form.'</div>';

<?php $this->jQuery()->onLoadCaptureStart(); ?>
jQuery('#category').change(checkNumberExistsAction);
<?php $this->jQuery()->onLoadCaptureEnd(); ?>


<script type="text/javascript">
    function checkNumberExistsAction(){         
    var p = $("#idOfNumberField").val();
    var response =   $.ajax({
        url: "<?php echo $this->url(array('controller'=>'index',
'action'=>'sampleview')) ?>", 
        type: "GET",       
        data: {number: p}, //where number is number columnName in database
        cache: false,
        success: function(text){
           response = text;
            $("#name").val($(text).find("input[name='name']").val());  //where name is id of name field
            $("#name").attr("disabled", "disabled");
            $("#firstName").val($(text).find("input[name='firstName']").val());  //where firstName is id of first name field
            $("#firstName").attr("disabled", "disabled");            
},
error: function(){ alert('Something went wrong.'); }
    });
}
</script>

IndexController.php

public function sampleviewAction(){
    if ($this->getRequest()->isXmlHttpRequest()){
        $id = $this->_getParam('number', 0);
        if ($id > 0){
        $albums = new Application_Model_DbTable_Albums();
        $form->populate($albums->getAlbum($id));}       
        }
}

Modelsampleview.php

public function getAlbum($id){
    $id = (int)$id;
    $row = $this->fetchRow('e_recNo = ' . $id);
    if (!$row){
    throw new Exception("Could not find row $id");
    }
    return $row->toArray();
}
...