预测MySQLi服务器返回以进行错误处理

时间:2015-04-10 16:24:55

标签: php jquery ajax json mysqli

我正在开发HTML5 CSS3 jQuery Mobile Cordova / PhoneGap应用程序。

第一页是登录名,其中包含用户名&密码并通过我的服务器上的PHP脚本运行它以连接到SQL数据库。

一切正常,但我似乎无法正确处理错误的登录。因为它是一个cordova应用程序,所以通过使用JSONP插件可以克服跨域问题,因此从服务器返回的任何信息都必须使用JSON格式化,否则ajax将引发错误。

即使我在登录时使用以下内容抑制默认错误消息: (0)使用error_reporting; 要么 将@更改为mysqlconnect / select db variables(不是函数本身)

服务器仍将返回垃圾:

    Reload the page to get source for: http://www.heatingassets.com/authenticate.php?jsoncallback=jQuery111209247028061671368_1428682105651
   &usrnm=xxxxx&pswd=xxxxx&_=142868210565

以明显非JSON格式搞砸了ajax。

我能做些什么来完全阻止从服务器返回的任何东西,除了我编码和返回的东西之外?

如果没有人知道有更安全的方式将用户名/密码信息传递给服务器,我会很感激!

更新:

上述从服务器返回的是在php文件中包含error_reporting(0)时发送的响应,否则返回您在注释中提到的内容。

JS:

$.ajax({
        url: 'http://www.heatingassets.com/authenticate.php',
        type: 'POST',
        dataType: 'jsonp',
        jsonp: 'jsoncallback',
        timeout: '5000',
        data: formData,
        success: function(data){
           if(data['success'] == true){

               $("body").pagecontainer("change", "#pagetwo", {
                allowSamePageTransition:true
            });

           } else if (data['success'] == false){
               if(data['errors']['combo']){

                   if(data['errors']['opendb']){
                       alert('There was a problem opening the database :(');
                   } else {
                       alert('Incorrect login combo bro!');
                   }

               }

           }


        },
        error: function(){
                alert("First ajax function error");

        }
});

PHP:

<?php
    header('Content-type: application/json');
    header('Access-Control-Allow-Origin: *');
    header('Access-Control-Allow-Headers: X-Requested-With, Content-Type'); 

    session_start();

    $errors         = array();      // array to hold validation errors
    $data           = array();      // array to pass back data



    $username = $_REQUEST['usrnm'];
    $password = $_REQUEST['pswd'];

    $database = "u727397756_hadb";
    $server = "mysql.hostinger.co.uk";
    $con = mysqli_connect($server, $username, $password);
    $opendb = mysqli_select_db($con, $database);
        if(!$con) {
            $errors['combo'] = 'Incorrect user pass combo. ';
        };  

        if(!$opendb){
            $errors['opendb'] = 'Could not open the database.';
        }
    if ( ! empty($errors)) {
        $data['success'] = false;
        $data['errors']  = $errors;
    } else {
        $data['success'] = true;


        $_SESSION['username'] = $username;
        $_SESSION['password'] = $password;
        mysqli_close($con);

        echo $_REQUEST['jsoncallback'] . '(' . json_encode($data) . ');';
    }
?>

0 个答案:

没有答案