cakephp: выборка соответствующих записей с использованием адреса электронной почты и отображение в форме - PullRequest
0 голосов
/ 14 марта 2012

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

Я использую cakePHP и MYSQL для этого проекта. Можно ли это сделать с помощью AJAX? Каков наилучший способ сделать выше?

Спасибо.

1 Ответ

1 голос
/ 14 марта 2012

Наилучшим способом действительно является использование AJAX.Я бы связал функцию с событием типа поля электронной почты, затем дал бы ему ПОЛУЧИТЬ действие в вашем контроллере, которое, в частности, возвращает объект JSON с соответствующими данными, если они есть, и затем заполнил бы эти данные в соответствующие поля, используя Javascript.

Я сделал это ниже, используя JQuery.

На ваш взгляд:

примечания: controller/action - это действие, которое должно вызываться в контроллере, также предполагается, что #emailboxбыть идентификатором формы электронной почты.#otherbox является заполнителем для идентификаторов других элементов формы.

<script type="text/javascript">                                         
   $(document).ready(function () {    
    $('input#emailbox').keyup(function () {

        // could do other stuff here, like show load bar or clear old results
        //run the ajax
        getPage();
    }); 
});


function getPage() {

    //generate the parameter for the php script
    var data = {email: $("#emailbox").val()};
    $.ajax({
        url: '/controller/action',  
        type: 'GET',        
        data: data,
        dataType: 'json',     
        cache: false,
        success: function (data) {  

            //add the content retrieved from ajax into whatever forms you like
            $("#otherbox").val(data.[User][information][here]);
            $("#otherbox").val(data.[User][information][here]);
            $("#otherbox").val(data.[User][information][here]);
            $("#otherbox").val(data.[User][information][here]);
        }       
    });
}                                 
 </script>

Обратите внимание, что инструменты разработчика Chrome могут помочь в отладке возвращаемого объекта JSON, чтобы вы могли выяснить, как получить доступ к соответствующим элементам.данные для каждого поля.

В вашем контроллере:

public function searchForDetails() {
        if($this->request->is('ajax')) {
            $this->autoRender = false;
//Get the email parameter data- this is one way to do it, you could also do it plenty of other ways
$email = $this->request->query['email'];
//Get user data- I have given an example of how to do so:
$userdata = $this->User->find('first', array(
    'conditions' => array(
        'User.email' => $email,
        'recursive' => -1));
return(json_encode($userdata));
            }
    }

Это один из способов сделать это.Работа, которую вы должны сделать, - отладить объект JSON в chrome (используйте команду shift j, чтобы получить доступ к инструментам разработки) и выяснить расположение массивов внутри объекта, чтобы затем вы могли установить значения отдельных форм.Я не проверял эффективность этого подхода, и вам, вероятно, не следует делать что-то подобное, если вы разрабатываете Facebook.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...