我正在创建一个有登录页面的网站。用户必须输入他们的用户和密码,如果信息正确,网站应该打开/显示包含一些信息的新网站。现在我被困在网站将显示另一个页面的部分,这里是我使用的表格(login.php)
<form method="POST" action="home.php" autocomplete="off">
<input name="user" id="fields" type="text" placeholder="user" required><br/>
<input name="password" id="fields" type="password" placeholder="password" required></br>
<input id="button" type="submit" value="OK"></center>
</form>
</div>
<?php
$user=$_POST["user"];
$password=$_POST["password"];
if($user=="user"&&$password=="password"){ //dummy user & psswd
echo "<script type='text/javascript'><!--window.location = 'reports_home.php'//--></script>";
}
else{
echo "<center> <p style='color:red';>".ERROR."</center>";
}
?>
当我运行login.php时,一切都很好,但是如果在字段中输入任何名称或文本并点击提交,则home.php文件将打开。但是,如果删除action="reports_home.php
(并移除"<script type=
部分),该页面将验证输入,但不会打开新网站。
任何可以向我解释为什么会发生这种情况或者应该如何编码的人? 如果你有更多信息,请告诉我。
答案 0 :(得分:1)
删除保留在同一页面上的操作:
<?php
if ( isset($_POST) && !empty($_POST) ) {
$user = $_POST["user"];
$password = $_POST["password"];
if ( $user == "user" && $password == "password" ){ //dummy user & psswd
header("Location: http://example.com/reports_home.php");
}
else{
$message = ERROR;
}
}
?>
<form method="POST" action="" autocomplete="off">
<input name="user" id="fields" type="text" placeholder="user" required><br/>
<input name="password" id="fields" type="password" placeholder="password" required></br>
<input type="submit" id="button" value="OK"></center>
</form>
</div>
<?php if ( isset($message) ): ?>
<center> <p style='color:red';><?php echo $message; ?></center>
<?php endif; ?>
编辑:我在本地尝试过,它有效。打开前检查空间
<?php
。如果它不起作用,则显示所有错误以进行调试。
答案 1 :(得分:1)
在这里,试一试,看看关于密码存储的脚注。
旁注:action="home.php"
已更改为action=""
,因为它在同一文件中执行。
您可以使用header()
和ob_start()
重定向成功。
否则你会收到类似的警告:
警告:无法修改标头信息 - 已经发送的标头(在/ file.php处开始输出)...
<强>代码:强>
<?php
ob_start();
?>
<div>
<form method="POST" action="" autocomplete="off">
<input name="user" id="fields" type="text" placeholder="user" required><br/>
<input name="password" id="fields" type="password" placeholder="password" required></br>
<input id="button" name="submit" type="submit" value="OK"></center>
</form>
</div>
<?php
if(isset($_POST['submit'])){
$user=$_POST["user"];
$password=$_POST["password"];
if($user=="user" && $password=="password"){ //dummy user & psswd
// change this to your URL
header("Location: http://www.example.com/success.php");
}
else{
echo "<center> <p style='color:red';>".ERROR."</center>";
}
}
?>
或者,您可以将PHP放在HTML表单的顶部,而无需ob_start()
。
<?php
if(isset($_POST['submit'])){
$user=$_POST["user"];
$password=$_POST["password"];
if($user=="user" && $password=="password"){ //dummy user & psswd
header("Location: http://www.example.com/success.php");
}
else{
echo "<center> <p style='color:red';>".ERROR."</center>";
}
}
?>
<div>
<form method="POST" action="" autocomplete="off">
<input name="user" id="fields" type="text" placeholder="user" required><br/>
<input name="password" id="fields" type="password" placeholder="password" required></br>
<input id="button" name="submit" type="submit" value="OK"></center>
</form>
</div>
密码存储
我注意到您可能以纯文本格式存储密码。不建议这样做。
使用以下其中一项:
crypt()
bcrypt()
scrypt()
password_hash()
功能。其他链接:
答案 2 :(得分:0)
从操作中删除home.php位,并使用位置替换脚本部分和php标头调用,这将是
header('Location: http://example.com/reports_home.php');