cakephp:使用电子邮件地址获取匹配的记录并在表单中显示

时间:2012-03-14 00:52:07

标签: php jquery ajax cakephp

当用户输入他的电子邮件地址时,我想使用电子邮件地址检查他/她的数据是否在数据库表中。如果它在那里,它应该获取匹配的记录(初始,名称,地址,城市,州,邮政编码)并在表格中显示它们。如果电子邮件地址不在数据库表中,则应允许用户填写表格的其余部分。

我在这个项目中使用cakePHP和MYSQL。可以使用AJAX完成吗?做上述事情的最佳方法是什么?

谢谢。

1 个答案:

答案 0 :(得分:1)

最好的方法是使用AJAX。我将一个函数绑定到电子邮件字段的类型事件,然后让它在控制器中执行一个操作,该操作专门返回带有相应数据的JSON对象(如果有),然后使用Javascript将这些数据填充到相应的字段中。 / p>

我在下面使用JQuery做了这个。

在您看来:

注意:controller/action是它应该在控制器中调用的操作,#emailbox也被认为是电子邮件表单的id。 #otherbox是其他表单元素的id的占位符。

<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 dev工具可以帮助您调试要返回的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));
            }
    }

这是你可以采取的一种方式。您需要做的工作是在chrome中调试JSON对象(使用命令shift j来访问dev工具)并找出对象内部数组的布局,以便您可以设置各个表单的值。我没有测试过这种方法的效率,如果你正在开发Facebook,你可能不应该做这样的事情。