我的博客页面上有一个基本的登录表单,当我输入正确的用户名和密码时,它表示用户名+密码是正确的,但我没有重定向到index1.php页面。
这是我的代码:
<?php
require_once('header.php');
require_once('config.php');
$db = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
//check to see if form has been submitted
if (isset($_POST['submit'])) {
if ($_POST['username'] == 'bruce' && ($_POST['password'] == 'wayne')) {
echo 'Correct username and password.';
}
else {
echo 'Incorrect username or password. Please try again.';
}
$result = mysqli_query($db, $sql);
$numrows = mysqli_num_rows($result);
if($numrows == 1) {
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
$_SESSION['USERNAME'] = $row['username'];
$_SESSION['USERID'] = $row['id'];
header("Location:"."index1.php");
}
else {
header("Location"."login.php?error=1");
}
}
else {
if(isset($_GET['error'])) {
echo "Incorrect login, please try again!";
}
}
?>
<form action="<?php echo $_SERVER['index1.php'] ?>" method="post">
<table id='login'>
<tr>
<td>Username</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="submit" value="Login!"></td>
</tr>
</table>
</form>
下面的index1.php!
<?php
require("header.php");
$db = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$sql = "SELECT entries.*, categories.cat FROM entries, categories
WHERE entries.cat_id = categories.id
ORDER BY dateposted DESC
LIMIT 1;";
$result = mysqli_query($db,$sql);
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
echo "<h2><a href= 'viewentry.php?id=" . $row['id'] . "'>" . $row['subject']. "</a></h2><br />";
echo "<i>In <a href='viewcat.php?id=" . $row['cat_id'] . "'>" . $row['cat'] ."</a> - Posted on " .
date("D jS F Y g.iA", strtotime($row['dateposted'])) ."</i>";
echo "<p>";
echo nl2br($row['body']);
echo "</p>";
require("footer.php");
?>
答案 0 :(得分:0)
使用die()
功能后的header()
或{{1}}功能。否则,脚本将不会终止。这是一个相关的例子:
Why I have to call 'exit' after redirection through header('Location..') in PHP?
答案 1 :(得分:0)
首先,你需要在php中使用session之前使用session_start();
,如果你没有,那么$ _SESSION就会变成普通数组,不再被记住。
答案 2 :(得分:0)
除非使用输出缓冲,否则在重定向之前无法回显。我评论了你的回声。
我一直都在使用它。你必须在重定向后调用exit。
/**
* This is designed to redirect using a quick, easy function.
*/
function gfRedir($_NewPath){
header('Location: '.$_NewPath);
exit();
}
您可以使用它:
<?php
require_once('header.php');
require_once('config.php');
$db = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
//check to see if form has been submitted
if (isset($_POST['submit'])) {
if ($_POST['username'] == 'bruce' && ($_POST['password'] == 'wayne')) {
//you cannot echo before a redirect unless you are using output buffering.
//echo 'Correct username and password.';
}
else {
//you cannot echo before a redirect unless you are using output buffering.
//echo 'Incorrect username or password. Please try again.';
}
//where is this $sql at that you are passing into the below function?
$result = mysqli_query($db, $sql);
$numrows = mysqli_num_rows($result);
if($numrows == 1) {
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
$_SESSION['USERNAME'] = $row['username'];
$_SESSION['USERID'] = $row['id'];
gfRedir('index2.php');
}
else {
gfRedir('login.php?error=1');
}
}
else {
if(isset($_GET['error'])) {
echo "Incorrect login, please try again!";
}
}
function gfRedir($_NewPath){
header('Location: '.$_NewPath);
exit();
}
?>
<form action="<?php echo $_SERVER['index1.php'] ?>" method="post">
<table id='login'>
<tr>
<td>Username</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td></td>
<td><input type="submit" name="submit" value="Login!"></td>
</tr>
</table>
</form>
答案 3 :(得分:-1)
请尝试使用此语法进行重定向。
header("Location:index1.php");
exit();
谢谢