我刚刚开始使用PHP,试图获得一个表单,该表单将根据用户数据库配置文件中的重定向URL重定向用户。然而,我目前拥有的代码无法正常工作。登录表单提交并打开本应处理信息的PHP页面,但之后什么也没发生。我将包括所有代码和一个更简单的解决方案的实时测试。
现场示例:http://previews.justinwidener.com/
HTML代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Testing</title>
<link href="styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form name="custlogin" id="custlogin" action="custlogin.php" method="post">
<input class="custlogin_input" name="username" type="text" placeholder="Username" /><br />
<input class="custlogin_input" name="password" type="password" placeholder="Password" /><br />
<input class="custlogin_sub" name="log_btn" type="submit" value="LOGIN" />
</form>
</body>
</html>
PHP代码:
<?php
session_start();
if ( ($_SERVER['REQUEST_METHOD'] != 'POST') && !isset($_SESSION['username']) ){
header('Location: $redirect');
}
?>
<?php
error_reporting(E_ALL); ini_set('display_errors', 1);
$host="localhost";
$username="********";
$password="**********";
$db_name="************";
$tbl_name="testtable";
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$username=$_POST['username'];
$password=$_POST['password'];
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);
$sql = "SELECT * FROM $tbl_name WHERE username='$username' and password='$password'";
$result = mysql_query($sql);
$count = mysql_num_rows($result);
if($count == 1){
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
$result = mysql_fetch_array($result);
$redirect = trim($result['redirect']);
if ($redirect == '') {
echo "No redirect value was set!";
}
else {
header('Location: $redirect');
exit;
}
}
else {
echo "Wrong password!";
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Widener Web Designs - Preview</title>
<link href="styles.css" rel="stylesheet" type="text/css" />
</head>
<body>
</body>
</html>
我认为数据库正在进行连接,因为没有抛出错误,但问题仍然在于重定向失败。如果这是一个简单的问题,请不要把我当成白痴。我正在努力学习,但没能成功。提前谢谢。
在调用header
之前,您似乎已经有了输出。输出已发送后,无法重定向。你应该会收到一条错误消息,上面写着,你可能想确认你已经启用了错误报告。
还有两件重要的事情:
- 不要存储纯文本密码。曾经查看密码哈希
- 不要使用
mysql_*
函数。看看mysqli或PDO
首先,重定向将不起作用,因为在重定向代码之前已经有HTML输出。
其次,即使重定向有效,您当前的代码也无法插入提交的数据并将"用户名"添加到会话超级全局数组,因为您的测试if (!isset($_SESSION['username'])) {
位于处理表单提交并创建$_session['username']变量的代码之前。因此,它将始终返回false,并且您的用户将不断被重定向。
要解决这些问题,请从当前位置删除此代码:
<?php
session_start();
if (!isset($_SESSION['username'])) {
header('Location: $redirect');
}
?>
并在打开<HTML>标签:
<?php
session_start();
if ( ($_SERVER['REQUEST_METHOD'] != 'POST') && !isset($_SESSION['username']) ){
header('Location: $redirect');
}
?>
在php脚本中的代码顶部编写ob_start();
。或者使用此代码在php中重定向window.location.href = 'http://www.google.com';
//将带您进入谷歌。像
<?php
echo "window.location.href = 'http://www.google.com'";
?>