config.php似乎不起作用

时间:2014-09-02 06:29:52

标签: php

在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>';
}
 ?>

1 个答案:

答案 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()仅在前面没有输出时才有效。甚至不是空格,换行符或其他空格。