【问题标题】:PHP parse error and error code spilling into other pages [closed]PHP解析错误和错误代码溢出到其他页面[关闭]
【发布时间】:2012-05-20 05:22:37
【问题描述】:

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

login.php 上的错误是:

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

base.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();
                }
            }
        }
    }



?>

pagechecker.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");
        }
    }

【问题讨论】:

    标签: login mysqli php


    【解决方案1】:

    问题出在这里:

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

    你应该这样称呼它:

    ...->$mysqli(...
    

    或类似:

    ...->mysqli(...
    

    取决于是否设置了$mysqli

    解释很简单。你可以打电话给(see more on this in the docs):

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

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

    【讨论】:

    • 现在它在 Parse 错误中说 e:语法错误,意外的 '(',期望标识符 (T_STRING) 或变量 (T_VARIABLE) 或 C:\inetpub\wwwroot\ 中的 '{' 或 '$'第 9 行的 OTLCoding\PHP\pagechecker.php
    • @JjHarris:好的,你用什么替换了什么?
    • 在我修复所有错误后出现新错误,它说我的页面有太多重定向循环
    • @JjHarris:那么你现在有一些与之前的错误无关的东西。看起来这个脚本有很多问题,你可以遵循一些好的编码标准。去掉最后一个 PHP 结束标签(?&gt;),如果这个脚本没有什么可显示的,增加可读性,将显示与应用程序分开,并可能使用一些好的 PHP 框架来加速开发。这些是一般性建议,您原来的问题现在似乎已经解决了。
    • @JjHarris:这和原来的问题完全没有关系,但是考虑一种情况:如果$_SESSION['userid']没有设置怎么办?在这种情况下,您将有不断的重定向,因为请求将首先加载base.php(它启动会话并设置数据库设置),然后加载pagechecker.php,它会发现$_SESSION['userid']没有设置,然后将立即 将请求重定向到同一页面。然后它将从头开始重复整个过程,除非浏览器停止重定向并向您显示错误,否则没有任何机会退出循环。
    【解决方案2】:

    这里缺少分号:

    $_SESSION['userid'] = $userid;
    redirect('languages.php')
    

    【讨论】:

      【解决方案3】:
         $usercheck->$mysqli->("SELECT * FROM user WHERE userid = ?");
                     ^----
      

      这应该是

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

      【讨论】:

      • 不会导致解析错误。
      • 这将是一个“未设置变量 $mysqli”错误。
      • 我知道吗,因为我的基地有 $mysqli 声明为 mysqli
      • 我的错,即使你指出了,我也没看到 箭头括号 错字,渣男……所以更正,它创建解析错误
      猜你喜欢
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      • 2018-01-02
      • 2010-11-18
      • 2014-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多