[英]The config.php doesn't seem to work
在home.html文件中,我有一个div,单击它会显示要由要登录的用户填写的登录表单。 填写表单后,表单的配置应将其定向回home.html文件。
我遇到的问题是,当我尝试填写用户名和密码字段的形式并将其提交时,浏览器只是在config-haslogin.php中停止空白,而不是将其定向回home.html文件。
当我尝试用错误的用户名和密码填写结果时,结果是相同的。
配置-haslogin.php
<?php @session_start();
$_SESSION['id']= 0;
?>
<?php
error_reporting(E_ALL ^ E_NOTICE);
mysql_connect("mysql.com","usename","password") or die("cannot connect");
mysql_select_db("mytable") or die("Fail");
$myemail= $_POST['email'];
$mypassword= $_POST['password'];
$sql= "SELECT * FROM user WHERE email='".$myemail."' and password='".$mypassword."'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count==1 )
{
echo "Login successful";
echo '<script>window.location="index.html";</script>';
}
?>
这是错误的:
echo "Login successful";
'<script>window.location="index.html";</script>';
您在此处缺少echo语句:
echo "Login successful";
echo '<script>window.location="index.html";</script>';
代码中更多但不严重的问题部分:
@session_start();
禁止显示错误消息并不能解决问题,而只会创建新的错误消息。 您不会注意到何时会发生错误,并且会花费数小时为它找到解决方案,如果您有适当的错误消息,则只需几分钟即可解决。
error_reporting(E_ALL ^ E_NOTICE);
这只是租金的一半。 它仅定义要显示的错误级别,而根本不显示。 如果您的主机禁用了错误消息,则必须执行ini_set("display_errors", true);
否则,您将一无所获。
您的SQL代码容易受到SQL注入的攻击。 我可以在您的电子邮件字段中输入“ mail@host.com'-”,然后在不知道密码的情况下登录。 您应该切换到mysqli_*
或PDO并使用准备好的语句来查询。
使用正确的错误报告。 不要只使用这个:
or die("cannot connect");
而是中继实际的错误消息,以便您知道为什么它不起作用:
or die("Connection error: " . mysql_error());
在查询之后也要使用它,因此您知道查询失败的原因:
if ($result == false) echo "Query failed: " . mysql_error();
PDO和MySQLi具有类似的错误报告功能。 使用它们。
echo '<script>window.location="index.html";</script>';
您不应该使用JavaScript进行重定向。 您永远不会知道客户端是否启用了JavaScript或什至能够启用JavaScript。 进行重定向的正确方法是header()
函数:
header("Location: index.html");
exit();
注意, header()
仅在绝对没有输出之前才起作用。 甚至没有空格,换行符或其他空格。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.