所以,我有这个非常奇怪的问题。我已经在家用电脑上构建了一个带有登录表单的Web应用程序,但是当我尝试将其迁移到带域的服务器时,php变得疯狂,现在一切都不再起作用了。
所以我有一个登录表单,它通过AJAX POST调用将数据发送到php文件,该文件将给定的数据与接口进行比较。但似乎以这种或那种方式,数据没有被php接收。让我告诉你我的设置是什么:
Javascript:
console.log(username);
$.ajax({
url: "server/login_server.php",
type: "POST",
datatype: "JSON",
data: {username: username, password: password},
complete: function(data) {
console.log(data.responseText);
if(data.responseText == "SUCCESS") {
location.assign("pages/overview.html");
}else if(data.responseText == "ERROR_CONNECT") {
showError("kan niet verbinden met server");
}else if(data.responseText == "ERROR_CODE") {
showError("Er is iets misgelopen...");
}else if(data.responseText == "ERROR_FALSE") {
showError("Inloggegevens ongeldig");
}else if(data.responseText == "ERROR_MULTIPLE") {
showError("Er zijn meerdere resultaten gevonden");
}else if(data.responseText == "ERROR_FORBIDDEN") {
showError("Dit account heeft geen admin-privileges");
}
$("#login_password").val("");
},
error: function(data) {
console.log(data);
}
});
有些行是用荷兰语写的,但不要担心,它没有说什么重要。控制台(第1行)清楚地写了用户名,所以我知道用户名值不是空的。
PHP文件:
<?php
session_start();
$config = include('config.php');
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
$conn = new mysqli($config['db_host'], $config['db_user'], $config['db_password'], $config['db_name']);
$result = "SUCCESS";
if($conn->connect_error) {
$result = $conn->connect_error;
die($result);
}
$sql = "SELECT * FROM users WHERE userName='".$username."'";
$status = mysqli_query($conn, $sql);
if(!$status) {
$result = "ERROR_CODE";
die($result);
}
$num_rows = mysqli_num_rows($status);
$row = mysqli_fetch_array($status);
if($num_rows == 0) {
$result = "ERROR_FALSE";
die($username);
}else if($num_rows > 1) {
$result = "ERROR_MULTIPLE";
die($result);
}else{
if($row['isAdmin'] == "false") {
$result = "ERROR_FORBIDDEN";
die($result);
}else{
$_SESSION['logedIn'] = "true";
$result = "SUCCESS";
die($result);
}
}
echo $username;
?>
这是我想要做的简单表示,但这是出错的地方。它从post调用中获取用户名,并将其作为data.responsetext返回给javascript文件。
javascript文件依次打印出一个空字符串作为php文件的结果。
Firebug日志:
添加完整的错误日志会给我以下内容:
"<br />
<b>Notice</b>: Undefined variable: conn in <b>/home/netwerklevensein/public_html/dagboek/server/login_server.php</b> on line <b>8</b><br />
<br />
<b>Warning</b>: mysql_real_escape_string() expects parameter 2 to be resource, string given in <b>/home/netwerklevensein/public_html/dagboek/server/login_server.php</b> on line <b>8</b><br />
<br />
<b>Notice</b>: Undefined variable: conn in <b>/home/netwerklevensein/public_html/dagboek/server/login_server.php</b> on line <b>9</b><br />
<br />
<b>Warning</b>: mysql_real_escape_string() expects parameter 2 to be resource, string given in <b>/home/netwerklevensein/public_html/dagboek/server/login_server.php</b> on line <b>9</b><br />
"
我希望你们能帮帮我。
答案 0 :(得分:3)
你在这里混合MySQL API(用mysqli_连接然后使用mysql_ escape函数)。
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
应该读作
$username = mysqli_real_escape_string($conn,$_POST['username']);
$password = mysqli_real_escape_string($conn,$_POST['password']);
那些不同的API不会混合。
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:只应在暂存时进行显示错误,而不是生产。
同时检查查询错误:
$status = mysqli_query($conn, $sql) or die(mysqli_error($conn));
答案 1 :(得分:0)
您可以打印
echo json_encode(array('username' => $username2));
原因,你设置的输出格式是JSON。 另外,你可以在ajax请求上使用 success 处理程序,并且只使用响应消息(并非所有XMLHttpRequest响应)
答案 2 :(得分:0)
我不是一个php专家,但看起来你在Ajax调用上缺少一些东西。
以下是我的建议: 要发布Json,您需要使用JSON.stringify(数据)进行字符串化 也不要忘记将processdata选项设置为false。
请在数据后将吹线放在您的ajax通话中:{username:username,password:password},
data:JSON.stringify(data), processData:false,
答案 3 :(得分:0)
在php中试试这个,
echo json_encode(
array('responseText' => $result)
);
您正尝试从数据对象访问responseText
属性。并仅回显$username
字符串
答案 4 :(得分:0)
我在你的AJAX代码中看到你说你正在接收JSON数据,但是在php文件中你刚刚发出了一个echo或die而且那个JSON数据是纯文本。因此,请尝试将datatype: "text"
放在AJAX代码上。