在oop-php中用pdo获取数据并用ajax显示

在oop-php中用pdo获取数据并用ajax显示,php,jquery,mysql,ajax,oop,Php,Jquery,Mysql,Ajax,Oop,有些事情困扰了我一段时间。我正在学习使用oop php、ajax和使用pdo的引导程序来创建登录系统 到目前为止,我已经得到了登录和注册部分的权利。 用户在表单中输入信息,然后提交给auth.php,auth.php通过一个ajax文件在User.php中运行其各自的方法,如下所示 $(function(){ $('.form').on('submit', function(e){ e.preventDefault(); $form = $(this)

有些事情困扰了我一段时间。我正在学习使用oop php、ajax和使用pdo的引导程序来创建登录系统

到目前为止,我已经得到了登录和注册部分的权利。 用户在表单中输入信息,然后提交给auth.php,auth.php通过一个ajax文件在User.php中运行其各自的方法,如下所示

$(function(){

    $('.form').on('submit', function(e){
        e.preventDefault();

        $form = $(this);

        submitForm($form);
    });

});

function submitForm($form){

    $footer = $form.parent('.modal-body').next('.modal-footer');

    $footer.html('<img src="images/ajax-loader.gif">');
    $.ajax({
        url: $form.attr('action'),
        method: $form.attr('method'),
        data : $form.serialize(),
        success : function( response ){
            response = $.parseJSON( response );

            if(response.success){
                if(!response.signout){
                    $footer.html( response.message );
                    setTimeout(function(){
                        $footer.html( response.message );
                        window.location = response.url;
                    }, 1500
                    );
                } 
                else if(response.signout == 2){
                    $footer.html( response.message );
                    setTimeout(function() {
                        $('#signup').modal('hide');
                        $('#login').modal('show');
                    }, 2000
                    );
                }
                else if(response.signout == 3){
                    $footer.html( response.idid );
                }   
            }
            else if(response.error){
                $footer.html( response.message );
            }
            console.log(response);
        }
    })
}
但是我使用了太多的会话变量。这是一种好的做法吗

我还需要帮助在profile.php中显示数据,而不使用会话变量。我想在user.php中运行sql语句,从表中选择所有当前用户数据,并在他的profile.php页面中显示为表

到目前为止,我得到的是

public function displayInfo($user, $db){

    $sql = "SELECT `name`, `email`,`institute_name`, `country_code`, `phone_number`,  FROM `users` WHERE `email`=? OR `phone_number`=?" ;
    $statement = $db->prepare($sql);
    if( is_object($statement) ){

        $statement->bindParam(1, $user['adminFetch'], PDO::PARAM_STR);
        $statement->bindParam(2, $user['adminFetch'], PDO::PARAM_STR);
        $statement->execute();
        if($row = $statement->fetch(PDO::FETCH_OBJ)){
            if (!empty($_SESSION['logged_in']['isBossMan'])) {
                return 'success';
                echo json_encode($row);
            }
        }
    }
}
我该怎么办?我知道row变量包含我想要显示的必要信息,但是如何在profile.php页面上显示这些信息呢? 我是否需要编写另一个用于显示的ajax代码,或者可以使用同一个代码来执行此操作

到目前为止,我取得了一些进展: 我在profile.php页面上有一个字段,用户在其中输入任何人的电子邮件,然后按下按钮从数据库获取该用户的信息从表中获取用户信息,并在profile.php的div中显示我为其编写的新获取ajax代码:

function fetchForm($fetch){
    $fetchFooter = $fetch.parent('.modal-body').next('.modal-fetchFooter');
    $fetchFooter.html('<img src="images/ajax-loader.gif">');
    $fetchBody = $fetchFooter.next();
    $.ajax({
        url: $fetch.attr('action'),
        method: $fetch.attr('method'),
        data : $fetch.serialize(),
        success : function( data ){
            data = $.parseJSON( data );
            $fetchFooter.html(data);

            if(data.error){
                $fetchFooter.html(data.message);
            }
        else{
            $fetchFooter.html(data);
        }       
     }
    })
}
如果您不输入任何内容并按下按钮,则工作正常。div被错误代码替换

但是,当用户键入正确的现有电子邮件或电话号码时,该方法和fetch.php将返回2个json对象。 一个具有用户信息,另一个具有错误状态

我做错了什么,如何使它只返回1个json,其中信息为真,错误为假?

已解决。 我所要做的就是在user.php中返回$row,并在fetch.php中编码$status,如下所示

<?php
    require_once 'includes/init.php';    
    $status = $user->displayInfo($_POST, $db);

    if( $status === 'missing_fields'){
        echo json_encode([
            'error'=> 'error', 
            'message'=> '<p class="alert alert-danger">Please enter a e-mail address or phone number to fetch data.</p>',

        ]);
    }
    else{echo json_encode($status)}

我注意到的第一件事是,在返回语句之后有
echo json\u encode($row)
。这行代码永远不会被执行。如果删除
返回“success”行,您可以开始了。在回答您的问题“会话变量是否太多?”时,这取决于。因为您可以运行一个便宜的查询来获取数据,所以我建议您只保存登录用户的id,如果需要其他的,则运行查询。除非这意味着您要运行查询数百万次,否则这就不太好了。所以这在很大程度上取决于您需要访问这些数据的频率。我明白了,但我对oop和ajax还不熟悉,所以我想知道是否需要user.php文件中的
json\u encode
。因为view.php文件(类似于auth.php)正在运行这个
displayInfo
方法,并且已经有了一个json编码,这取决于user.php返回的内容,就像auth.php文件一样。那么,我是否需要
json_encode
,或者是否有办法将
$row
转发到view.php,然后显示在profile.php页面上?
function fetchForm($fetch){
    $fetchFooter = $fetch.parent('.modal-body').next('.modal-fetchFooter');
    $fetchFooter.html('<img src="images/ajax-loader.gif">');
    $fetchBody = $fetchFooter.next();
    $.ajax({
        url: $fetch.attr('action'),
        method: $fetch.attr('method'),
        data : $fetch.serialize(),
        success : function( data ){
            data = $.parseJSON( data );
            $fetchFooter.html(data);

            if(data.error){
                $fetchFooter.html(data.message);
            }
        else{
            $fetchFooter.html(data);
        }       
     }
    })
}
<?php
    require_once 'includes/init.php';    
    $status = $user->displayInfo($_POST, $db);

    if( $status === 'missing_fields'){
        echo json_encode([
            'error'=> 'error', 
            'message'=> '<p class="alert alert-danger">Please enter a e-mail address or phone number to fetch data.</p>',

        ]);
    }
public function displayInfo($user, $db){
        if(empty($user['adminFetch'])){
            return 'missing_fields';
        }

        else if(!$this->emailExists($user['adminFetch'],$db) AND !$this->phoneExists($user['adminFetch'],$db)){
            return 'emailphone_dosent_exist';
        }

        else{
            $sql = "SELECT `name`, `email`,`institute_name`, `country_code`, `phone_number` FROM `users` WHERE `email`=? OR `phone_number`=?" ;
            $statement = $db->prepare($sql);
            if( is_object($statement) ){

                $statement->bindParam(1, $user['adminFetch'], PDO::PARAM_STR);
                $statement->bindParam(2, $user['adminFetch'], PDO::PARAM_STR);
                $statement->execute();
                if($row = $statement->fetch(PDO::FETCH_ASSOC)){
                    if (!empty($_SESSION['logged_in']['isBossMan'])) {                      
                       echo json_encode($row);

                    }
                }
            }
        }
        return 'missing_fields';    
    }
<?php
    require_once 'includes/init.php';    
    $status = $user->displayInfo($_POST, $db);

    if( $status === 'missing_fields'){
        echo json_encode([
            'error'=> 'error', 
            'message'=> '<p class="alert alert-danger">Please enter a e-mail address or phone number to fetch data.</p>',

        ]);
    }
    else{echo json_encode($status)}