在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>';
}
?>
答案 0 :(得分:1)
这是错误的:
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,并使用准备好的statemens进行查询。
使用正确的错误报告。不要只使用它:
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还是能够启用它。进行重定向的正确方法是header()
函数:
header("Location: index.html");
exit();
请注意header()
仅在前面没有输出时才有效。甚至不是空格,换行符或其他空格。