PHP登录/注销并注册

时间:2014-08-23 23:15:19

标签: php mysql login logout

我尝试使用注册和登录/注销页面创建一个简单的表单。但它一直给我错误。请帮忙。

注意:未定义的索引:第4行的..path / to / index.php中的用户名

注意:第5行的..path / to / index.php中的未定义索引:密码

警告:无法修改标头信息 - 已经在第8行的..path / to / index.php中发送的输出(输出从..path / toindex.php:4开始)

的login.php     

session_start();

$username = $_SESSION['username'];
$password = $_SESSION['password'];
    if($username && $password)
    {
        header( 'Location: index.php' );
    }
    else
    {
        function index()
        {
            echo "<form action='' method='post'>"
                ."Username:<input type='text' name='username' size='30'>"
                ."Password:<input type='password' name='password' size='20'>"
                ."<input type='submit' value='Login' name='login'/>"
                ."</form>";
        }
        function login()
        {
            $username = $_REQUEST['username'];
            $password = $_REQUEST['password'];

            if ($username=="")
            {
                die("<br /> You Forgot to type in your Username!");
            }
            if ($password=="")
            {
                die("<br /> You Forgot to type in your Password!");
            }

            $con=mysqli_connect("localhost" ,"root" , "root" ,"user");
            // check connection
            if (mysqli_connect_errno()) 
            {
                echo "Failed to connect to MySQL: " . mysqli_connect_error();
            } 

            $result = mysqli_query("SELECT * FROM users WHERE username='$username'");
            $row = mysqli_fetch_array($result);

            $user = $row['username'];
            if($username != $user)
            {
                die("<br />Username is wrong!<br /> ");
            }

            $real_password = $row['password'];
            if($password != $real_password)
            {
                die("<br />Your password is wrong!<br /> ");
            }

            $_SESSION['username']=$username;
            $_SESSION['password']=$password;

            header( 'Location: index.php' ) ;
        }

        if (isset($_REQUEST['login']))
        {
            login();
        }
        else
        {
            index();
        }
    }
?>

logout.php

<?php
session_start();
session_destroy();
header( 'Location: login.php' ) ;
?>

Register.php

<?php
session_start();

echo "<h2 style='padding-left: 10px'>Register A User :</h2>"
    ."<form action='' method='post'>"
    ."Username :<input type='text' name='user' size='30'>"
    ."Password :<input type='password' name='password' size='20'>"
    ."<input type='submit' value='Register' name='register' />";

if (isset($_REQUEST['register']))
{
    $username = $_REQUEST['user'];
    $pass = $_REQUEST['pass'];

    if ($username=="")
    {
        die("<br /> You Forgot to type in the Username for the user ! <br /> ");
    }
    if ($pass=="")
    {
        die("<br />You Forgot to type in the Password for the user !<br />");
    }
    $con=mysqli_connect("localhost" ,"root" , "root" ,"user");
            // check connection
            if (mysqli_connect_errno()) 
            {
                echo "Failed to connect to MySQL: " . mysqli_connect_error();
            } 
    mysqli_query("INSERT INTO users (username, password) VALUES ('$username', '$pass') ");
}
?>

的index.php

<?php
session_start();

    $username = $_SESSION['username'];
    $password = $_SESSION['password'];
        if(!$username && !$password)
        {
            header( 'Location: login.php' ) ;
        }
        else
        {
            echo "<h3>Welcome to My Webpage</h3>";
        }
?>

1 个答案:

答案 0 :(得分:0)

这些通知是由以下原因引起的:

$username = $_SESSION['username'];
$password = $_SESSION['password'];

您不知道$ _SESSION ['username']或$ _SESSION ['password']值存在,因此您不应尝试访问。修复此问题,将修复“无法修改标题信息”警告。

有几种方法可以解决这个问题。

  1. 您可以使用@符号来抑制错误:

    $username = @$_SESSION['username'];
    $password = @$_SESSION['password'];
    
  2. 您可以通过ini_set关闭通知:

    ini_set('error_reporting', E_ALL ^ E_NOTICE);
    

    或将php.ini中的error_reporting设置为32759,由E_ALL ^ E_NOTICE返回。

  3. 您可以在初始化之前测试会话变量是否为空:

    if( !empty($_SESSION['username']) ) {
        $username = $_SESSION['username'];
    }
    
    if( !empty($_SESSION['password']) ) {
        $password = $_SESSION['password'];
    }
    

    再次使用空函数确保在条件检查中设置了$ username和$ password:

    if( !empty($username) && !empty($password) )
    

    或在尝试使用它们之前定义$ username和$ password变量:

    $username = null;
    $password = null;
    
    if( !empty($_SESSION['username']) ) {
        $username = $_SESSION['username'];
    }
    
    if( !empty($_SESSION['password']) ) {
        $password = $_SESSION['password'];
    }
    
  4. 关于使用错误抑制,尽可能避免使用它。抑制错误,甚至是简单的通知,都会让您对代码实际执行的操作有所了解。一个简单的通知可能暗示一个更邪恶的逻辑错误,并且压制它有时会使你的生活变成一个活生生的地狱。由于流氓@符号,我已经失去了一口头发。