PHP 解析错误和错误代码溢出到其他页面


PHP parse error and error code spilling into other pages

好的,我在login.php页面上收到此解析错误。似乎代码没有考虑检查用户是否已登录。我在每个页面上都有一个名为pagechecker.php的文件,用于检查是否有登录,但它显示的只是每个页面顶部的php代码。

login.php上的错误是:

解析错误:语法错误,意外的"(",期望标识符 (T_STRING( 或变量 (T_VARIABLE( 或 C:''inetpub''wwwroot''OTLCoding''PHP''login.php 中的 '{' 或 '$' 在第 21 行

基地.php

    <?php
    session_start();
    $dbhost = "localhost";
    $dbname = "login";
    $dbuser = "root";
    $dbpass = "DirectedStudies2012";
$mysqli = new mysqli($dbhost,$dbuser,$dbpass,$dbname);

?>

登录.php

    <?php 
 include ("base.php");
 include ("passwordchecker.php");
 include ("functions.php");
include("pagechecker.php");

    function postInput($htmlName)
    {
    if(isset($_POST[$htmlName]))
    {
    return $_POST[$htmlName];
    }
    return null;
    }
    //check if the user is already login.
            if(isset($_SESSION['userid']))
            {
                //check the database for existing user.
                $usercheck->$mysqli->("SELECT * FROM user WHERE userid = ?");
                $usercheck->bind_param("i",$_SESSION['userid']);
                $usercheck->execute();
                $usercheck->store_result();
                $results = $usercheck->num_rows;
                if($results == 1)
                {
                    redirect("languages.php");
                }
            }
    $loginusername = postInput('username');
    $loginpassword = postInput('password');

    if(isset($_POST['submit']))
    {
        if($loginusername == "" || $loginpassword == "")
        {
            $error = "Please Enter your user name and password";
        }
        else
        {
                //user isnt logged in
                if($stmt = $mysqli->prepare("SELECT userid, password FROM user WHERE username = ? LIMIT 1"))
                {
                    $stmt->bind_param("s",$loginusername);
                    $stmt->execute();
                    $stmt->bind_result($userid,$correctHash);
                    $stmt->fetch();
                    if(ValidatePassword($loginpassword,$correctHash))
                    {
                        $_SESSION['userid'] = $userid;
                        redirect('languages.php')
                    }
                    $stmt->close();
                }
            }
        }
    }

?>

页面检查器.php

//used to check for already login.
    if(!isset($_SESSION['userid']))
    {
        header("Location: login.php");
    }
    else
    {
        $usercheck->$mysqli->("SELECT * FROM user WHERE userid = ?")
        $usercheck->bind_param("i",$_SESSION['userid']);
        $usercheck->execute();
        $usercheck->store_result();
        $results = $usercheck->num_rows;
        if($results == 0)
        {
          header("Location: login.php");
        }
    }

问题出在这里:

...->$mysqli->(...

你应该这样称呼它:

...->$mysqli(...

或类似:

...->mysqli(...

取决于是否设置$mysqli

解释很简单。你可以调用类似的东西(在文档中查看更多内容(:

$my_object->$my_variable_property_name('some argument');

但是调用属性名称和括号之间的箭头实际上是一个语法错误。

此处缺少分号:

$_SESSION['userid'] = $userid;
redirect('languages.php')
   $usercheck->$mysqli->("SELECT * FROM user WHERE userid = ?");
               ^----

这可能应该是

   $usercheck->mysqli->etc....