0

PHPコードでエラーが発生しました.致命的なエラー:未定義の関数msg()を呼び出しますが、ログインボタンをクリックすると、このログインスクリプトが実行されるたびに、関数はここのコードで既に定義されています

<?php
mysql_select_db("elunika", $con);
$a = $_POST['em'];
$b = $_POST['pwd'];
$c = $_POST['log'];
$b = md5($b);

if (isset($c)) {
    $q = mysql_query("select * from registeration where email='$a' and password='$b'");
    $r = mysql_num_rows($q);
    if ($r) {
        $_SESSION["Authenticated"] = 1;
        $_SESSION['id'] = $a;
    }
    else {
        $_SESSION["Authenticated"] = 0;
    }

    if ($_SESSION["Authenticated"] === 0) {
        die(msg(0, "Incorrect Information"));
    }
    else {
        session_write_close();
        echo msg(1, "profile.php");
    }

    function msg($status, $txt)
    {
        return '{"status":' . $status . ',"txt":"' . $txt . '"}';
    }
}

?>
4

1 に答える 1

3

スコープ外の関数のみがコンパイル時 (実行前) に定義されます。if (isset(…))ただし、if 分岐 ( 9 行目) が入力された場合、msg 関数は定義されます。そのため、エグゼキュータが到達した瞬間にのみ定義されます。

しかし、あなたのコードmsg()では、実行時に関数宣言が発生する前に既に呼び出されています。関数宣言を上 (=msg()呼び出しの前) に移動すると、次のようになります。

function msg ($status, $txt) {
    return '{"status":'.$status.',"txt":"'.$txt.'"}';
}

if($_SESSION["Authenticated"] === 0) {
    die(msg(0,"Incorrect Information"));
} else {
    session_write_close();
    echo msg(1,"profile.php");
}
于 2013-10-15T16:49:03.633 に答える