我有一个php登录功能。当我尝试使用正确的用户登录时,它会显示如下错误:
警告:无法修改标题信息 - 已在第150行的/home/hapshou1/public_html/index.php中发送的输出(/home/hapshou1/public_html/index.php:15上的输出)
-
include "config.php";
if($_SERVER["REQUEST_METHOD"] == "POST")
{
function antiinjection($data)
{
$filter_sql = mysql_real_escape_string(stripslashes(strip_tags(htmlspecialchars($data,ENT_QUOTES))));
return $filter_sql;
}
$username = antiinjection($_POST['username']);
$pass = antiinjection($_POST['password']);
$login=mysql_query("SELECT username, password FROM user WHERE (username='$username' OR email='$username') AND password='$pass'");
$found=mysql_num_rows($login);
$r=mysql_fetch_array($login);
if
((!empty($username)) &&
(!empty($pass)))
{
if ($found > 0)
{
session_register("username");
session_register("password");
$_SESSION[username] = $r[username];
$_SESSION[password] = $r[password];
date_default_timezone_set("Asia/Jakarta");
$date_log = date("j-F-Y, G:i ");
mysql_query("update user set status='online', date_logged_in='$date_log' WHERE username='$_SESSION[username]'");
header('location:home');
}
else
{
echo '<div class="error_log">
<p>Wrong username or password. Please try again.</p>
</div>';
}
}
else
{
echo '
<div class="error_log">
<p>Username and password are required.</p>
</div>
';
}
}
我的代码出了什么问题?
答案 0 :(得分:3)
那么,看看第15行的内容。
最可能的情况是此声明导致输出:
$found=mysql_num_rows($login);
这又是由于您的mysql_query
返回false
而导致的。
你可以考虑这个来报告任何错误:
if (false === ($login=mysql_query("SELECT username, password FROM user WHERE (username='$username' OR email='$username') AND password='$pass'"))) {
die(mysql_error());
}
不建议在生产环境中使用die()
这样的语句,因此请考虑使用记录器
顺便说一下,学习如何使用PDO / mysqli; PDO有一种模式,可以将所有错误转化为异常,这有助于我更快地发现错误。
答案 1 :(得分:0)
将ob_start();
放在代码顶部,并将ob_flush();
放在最后
始终在exit();
重定向
header
答案 2 :(得分:0)
将您的代码包含在
中 ob_start();
...
ob_flush();
发生此错误的原因是,当请求设置标头值时,网页正文的某些部分已经发送给用户。
同样总是将exit();
放在header()语句之后,以便在header()调用之后当前页面上的其余代码不会被执行。
答案 3 :(得分:0)
例证:header('Location: http://www.example.com/');
Naga,试试这段代码:
session_start();
date_default_timezone_set("Asia/Jakarta");
include "config.php";
if(isset($_POST['username']) && isset($_POST['password']))
{
function antiinjection($data)
{
$filter_sql = mysql_real_escape_string(stripslashes(strip_tags($data)));
return $filter_sql;
}
$username = antiinjection($_POST['username']);
$pass = antiinjection($_POST['password']);
$login = mysql_query("SELECT username, password FROM user WHERE (username='$username' OR email='$username') AND password='$pass'");
$r = mysql_fetch_array($login);
if((!empty($username)) && (!empty($pass)) && is_array($r))
{
if (count($r) > 0)
{
$_SESSION['username'] = $r['username'];
$_SESSION['password'] = $r['password'];
$date_log = date("j-F-Y, G:i");
mysql_query("UPDATE user SET status = 'online', date_logged_in = '$date_log' WHERE username = '$_SESSION[username]'");
header('Location: http://domen.com/');
}
else
{
echo '<div class="error_log">
<p>Wrong username or password. Please try again.</p>
</div>';
}
}
else
{
echo '
<div class="error_log">
<p>Username and password are required.</p>
</div>
';
}
} else {
// do some action
}