Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 预测MySQLi服务器返回以进行错误处理_Php_Jquery_Ajax_Json_Mysqli - Fatal编程技术网

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

Php 预测MySQLi服务器返回以进行错误处理,php,jquery,ajax,json,mysqli,Php,Jquery,Ajax,Json,Mysqli,我正在开发HTML5 CSS3 jQuery移动Cordova/PhoneGap应用程序 第一个页面是一个登录名,它使用用户名和密码,并通过我服务器上的PHP脚本运行它,以连接到SQL数据库 这一切工作,但我似乎不能正确处理不正确的登录。由于它是cordova应用程序,跨域问题可以通过使用JSONP插件来解决,因此从服务器返回的任何信息都必须用JSON格式,否则ajax将抛出错误 即使我在使用以下命令登录时禁止显示默认错误消息: 错误报告0; 或 perpending@to mysqlconne

我正在开发HTML5 CSS3 jQuery移动Cordova/PhoneGap应用程序

第一个页面是一个登录名,它使用用户名和密码,并通过我服务器上的PHP脚本运行它,以连接到SQL数据库

这一切工作,但我似乎不能正确处理不正确的登录。由于它是cordova应用程序,跨域问题可以通过使用JSONP插件来解决,因此从服务器返回的任何信息都必须用JSON格式,否则ajax将抛出错误

即使我在使用以下命令登录时禁止显示默认错误消息: 错误报告0; 或 perpending@to mysqlconnect/select数据库变量本身不起作用

服务器仍将返回垃圾:

    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_reporting0时发送的响应,否则返回您在注释中提到的内容

js:

PHP:


您需要从PHP返回登录尝试失败的消息。。你能展示一下你的一些作品吗?“服务器仍然会返回垃圾:重新加载页面以获取[…]的源代码”-这不是调用所提到的URL时的实际返回-它会返回一个PHP警告,说“警告:mysqli_connect:28000/1045:用户“xxxxx”@“10.2.1.41”的访问被拒绝,使用密码:YES in[…]警告:mysqli_select_db希望参数1是mysqli,而不是[…]中给出的布尔值。因此,您要做的是为此类情况实现一些适当的错误处理,而不是让PHP发出警告。是否要通过网络传递实际的数据库凭据,则是另一个问题。您没有详细说明您在这里创建的是哪种应用程序,但通常web应用程序的用户不会通过数据库本身进行身份验证,而是通过比较存储在数据库中的用户数据来进行身份验证[因此,只有执行该检查的PHP脚本保存数据库凭据,服务器端]。我已更新以添加代码。最初的返回正如您所说的,是一个警告,指出用户/通行证组合不正确。但是关闭php错误报告后,它仍然发送“垃圾”。问题是格式不正确,但我不确定如何处理PHP中的错误,以便将其格式化为JSON,然后传递给javascript以采取适当的操作。您真的希望应用程序的每个用户都有一个单独的数据库用户吗?
$.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
    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) . ');';
    }
?>