以PHP格式登录时获取空白页面

时间:2011-03-12 11:28:11

标签: php

我正在为我的项目创建一个新网站。我创建了一个index.php页面并设置了一个登录表单,并将表单操作设置为log.php页面。登录后,还必须转到account.php页面。它适用于本地服务器。但是当我上网时,登录时会在log.php页面中显示空白页面。但是登录发生了,如果我通过在地址栏中输入来转到account.php,它可以正常工作。与注册页面相同。

这是Log.php代码:

 <?php
include("connection.php");
extract($_POST);
$password=md5($_POST['password']);
$query=mysql_query("SELECT * from register WHERE username='$username' and password='$password'");
$numrows=mysql_num_rows($query);
if($numrows!=0)
{
    $info = mysql_fetch_array($query); 
    session_start();
    $_SESSION[username]=$username;
    $_SESSION[fname]=$info['fname'];
    $_SESSION[lname]=$info['lname'];
    $_SESSION[email]=$info['email'];
    header("location:account.php");
}
else
header("location:login.php?i=invalid");

?>

1 个答案:

答案 0 :(得分:1)

首先,逃避你的params以防止SQL注入,考虑解析像

这样的东西

'; DROP DATABASE xxxxx;作为用户名;

同样不要提取所有的变量 - 只有那些你需要的东西(如果你使用某个未经初始化的变量或用isset()检查它可能是危险的,有人可以创建一个。

对于你的问题: 然后,在<?php之前检查您的文件中的字符。签名<应该是你代码中的第一个字节,因为如果你的服务器上有输出缓冲 - 你不能改变已经发送的头 - 我的意思是,当解析器看到一些注销掉php结构时,它会发送具有该数据的200 OK代码(不是30x重定向)。也许你在文件开头有一个看不见的BOM(一些特殊字符表示文件是用unicode编码的),尝试用例如notepad ++进行编辑来检查它。

它也与connection.php有关,因为包含了该文件。

尝试启用error_reporting(E_ALL);看看你有“标题已发送”错误。

使用$_SESSION['lname']而非$_SESSION[lname]

不需要if($numrows!=0)if($numrows)它更干净(在我看来)。

如果您写SELECT * from,请尝试保留您的约定,然后您应该写SELECT * FROM

从仅限数据库获取您需要的字段,因此SELECT username,fname,lname,email不是*(此处不需要密码,如果您在此表中添加了一些字段,那么这些字段不应该是在这里转发)

您甚至不需要检查行数:

$numrows=mysql_num_rows($query); 
if($numrows!=0) {
$info = mysql_fetch_array($query);

只需检查一行是否已被检索:

$info = mysql_fetch_array($query);
if($info)
{

如果你只使用$ info表的文本索引,请使用mysql_fetch_assoc而不是mysql_fetch_array(第二个也创建索引0,1,2,依此类推,使用相同的数据。