繁体   English   中英

config.php似乎不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM