我已经做了一些狩猎,我还没有看到任何人问过我的问题。所以,我会问这里。
我对计算机很陌生,特别是对Web开发很陌生。我目前正在建立我的第一个网站。它有一个后端数据库,服务器端脚本,整个shebang。
此外,我正在使用LAMPP本地主机服务器的Linux / Apache / PHP平台上。
预赛讨论,我今天正在编写一个AJAX调用(我的第一个!)并且在前端遇到了一些奇怪的行为。我会发布代码,但我先简要解释一下。
我的代码是用于登录表单,用于验证您的密码和用户名,然后让您继续访问该站点或在屏幕上显示错误消息。我使用JS进行前端错误检查,以阻止从客户端到服务器的任何不必要的数据交换。
当然,你不能相信前端的任何东西,所以我也写了一些PHP来检查后端的错误。为了测试我的后端错误检查的功效,我故意更改后端代码的参数,以便我的输入将被JS接受但被PHP拒绝。
以下是代码:
function serverValidation(x, y){
var z;
if (window.XMLHttpRequest){z=new XMLHttpRequest();}
else{z=new ActiveXObject("Microsoft.XMLHTTP");}
z.onreadystatechange=function(){
if (z.readyState==4 && z.status==200 && z.responseText == "false"){
$("#submit_error_3").show();
$( "#submit_error_3" ).text("X INVALID ENTRY");
$( "#username, #password").css("border-color", "red");
}
if (z.readyState==4 && z.status==200 && z.responseText == "true"){
$("#hidden_form_profile").submit();
}
}
z.open("POST","login.php",true);
z.setRequestHeader("Content-type","application/x-www-form-
urlencoded");
z.send("username=" + x + "&" + "password=" + y);
}
正如您所看到的,我正在使用POST发送类似表单的数据,而我正在接收普通文本。响应是字符串“true”或字符串“false”。如果收到“true”,那么JS就是单向的。如果收到“假”,则JS会转到另一个。
这是后端:
<?php
session_start();
if(!isset($_POST['email']) && isset($_POST['username']) && isset($_POST['password'])){
$x = trim($_POST['username']);
$y = $_POST['password'];
if(validate($x, $y)){$_SESSION["logged_in"] = "true"; echo "true";}
else{
echo "false";
}
}
function validate($x, $y){
if( strlen($x) < 6 || strlen($y) < 6 ){
return false;
}
return true;
}
?>
这一切都很有效,就像预期一样。
但是,后端没有完成。一旦验证了输入的格式,我就计划进入数据库并匹配用户名和密码以查看输入是否有效。
为此,我在AJAX后端脚本的最顶部包含了一个带有:include "login_info.php";
的PHP文件。此文件仅包含数据库服务器地址,数据库名称,用户名和密码的基本变量。
一旦我收录了该文件,保存并刷新,事情变得非常奇怪。
基本上AJAX调用已停止工作。通过使用警告框等进行故障排除,我确定PHP脚本完成了它的工作,但前端脚本不会正确解释数据。
就JS而言,返回的数据是一个字符串,它在预期的情况下采用了值“true”和“false”,但if(z.responseText == "false")
和(z.responseText == "true")
都评估为在所有情况下均为假。
此外,if(z.responseText)
在所有情况下始终评估为真。也就是说,当我包含那个额外的文件时,不知何故,JS认为返回的数据是一个具有预期值的字符串,但将其视为一个始终为真的布尔值。
有人可以向我解释当我在后端脚本中包含该文件时发生了什么吗?