-1

私はphpが初めてで、チュートリアルに従ってログインパネルを作成しています。デモ Web サイトでは問題なく動作しますが、コードをダウンロードして自分のマシンで実行すると、5 つの通知が表示されました。それらはすべて次のようになります。

他のプログラミング経験から、これらは変数を使用する前に変数を定義しなかったことを意味すると思います。ただし、これらの変数はシステム内に存在しているようです (他の質問を読んで理解したことから >-<)。

以下にコードを添付し、右側の未定義のインデックスをマークしました。コードの何が問題なのか、どうすれば解決できるのかを説明してくれる人はいますか? どうもありがとう!

<?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 -->

長いコードでごめんなさい!どれが問題に関連するのか本当にわからないので、あえてそれ以上削除するつもりはありません。お待ちいただいてありがとうございます!

4

2 に答える 2

0

使用する前に、その変数が存在するかどうかを確認する必要があります。そのために使用しますisset()

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

フォームが送信されたかどうかを確認するだけの場合は、POST代わりにページがリクエストされたかどうかを確認できます。

if('POST' === $_SERVER['REQUEST_METHOD']) 
于 2013-12-19T16:35:48.870 に答える
-1

@null になる可能性のある配列参照の前に配置することもできます。次に例を示します。

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

これにより、警告が抑制されます

于 2013-12-19T16:37:43.243 に答える