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