php中未定义的索引(_SESSION ['id']和['user'])

时间:2013-12-19 16:34:51

标签: php undefined-index

我是php新手,我正在按照教程制作登录面板。它在演示网站上运行良好,但是当我下载代码并在我的机器上运行时,会弹出5个通知。它们看起来都像:“注意:未定义的索引:在第24行的C:\ xampp \ htdocs \ myfolder \ demo.php中提交”。

从其他编程经验来看,我认为这些意味着我在使用它们之前没有定义变量。但是,这些变量似乎存在于系统中(据我所知,阅读其他问题> - <)。

我在下面添加了我的代码并在右侧标记了未定义的索引。任何人都可以帮我解释代码有什么问题,我该如何解决?非常感谢!

<?php
session_name('Login');
session_start();

if($_POST['submit']=='Login')                                     //undefined submit
{
    $err = array();

    if(!$_POST['username'] || !$_POST['password'])
        $err[] = 'All the fields must be filled in!';

    if(!count($err))
    {
        $_POST['username'] = mysql_real_escape_string($_POST['username']);
        $_POST['password'] = mysql_real_escape_string($_POST['password']);

        // Escaping all input data

        $row = mysql_fetch_assoc(mysql_query("SELECT id,user FROM writers WHERE user='{$_POST['username']}' AND pass='".md5($_POST['password'])."'"));

        if($row['user'])
        {       
                    $_SESSION['user']=$row['user'];
            $_SESSION['id'] = $row['id'];
            // Store some data in the session
        }
        else $err[]='Wrong username and/or password!';
    }

    if($err)
    $_SESSION['msg']['login-err'] = implode('<br />',$err);
    // Save the error messages in the session

    header("Location: demo.php");
    exit;
}
$script = '';

if($_SESSION['msg'])
{
    // The script below shows the sliding panel on page load
    ... 
}
?>

<head>
    ......
</head>

<body>   
<!-- Panel -->
<div id="toppanel">
    <div id="panel">
        <div class="content clearfix">
        <?php   
            if(!$_SESSION['id']):                     //undefined id
            ?>

            <div class="left">
                <form class="clearfix" action="" method="post">
                    <h1>Writer Login</h1>
                    <?php
                        if($_SESSION['msg']['login-err'])      //undefined login-err
                        {
                            echo '<div class="err">'.$_SESSION['msg']['login-err'].'</div>';
                            unset($_SESSION['msg']['login-err']);
                        }
                    ?>

                    //Login form
                </form>
            </div>

            <?php
            endif;
            ?>
        </div>
    </div> <!-- /login -->  

    <!-- The tab on top --> 
    <div class="tab">
        <ul class="login">
            <li class="left">&nbsp;</li>
            <li>Hello <?php echo $_SESSION['user'] ? $_SESSION['user'] : 'Guest';?>!</li>                      //undefined user
            <li class="sep">|</li>
            <li id="toggle">                            
                <a id="open" class="open" href="#"><?php echo $_SESSION['id']?'Open Panel':'Log In';?></a>                             //undefined id
                <a id="close" style="display: none;" class="close" href="#">Close Panel</a>         
            </li>
            <li class="right">&nbsp;</li>
        </ul> 
    </div> <!-- / top -->

</div> <!--panel -->

对不起长码!我真的不确定哪些与问题相关,也不敢删除更多。感谢您的耐心等待!

2 个答案:

答案 0 :(得分:0)

您需要在之前检查该变量是否存在。您可以使用isset()

if(isset($_POST['submit']) && $_POST['submit']=='Login')   

如果您只是检查表单是否已提交,则可以通过POST检查该页面是否已被请求:

if('POST' === $_SERVER['REQUEST_METHOD']) 

答案 1 :(得分:-1)

您也可以将@放在可以为null的数组引用前面,例如:

if(@$_POST['submit']=='Login')  

这会压制警告