我的代码在使用时中断 - 不期待 T_ELSE,期待 T_FUNCTION

Posted

技术标签:

【中文标题】我的代码在使用时中断 - 不期待 T_ELSE,期待 T_FUNCTION【英文标题】:My Code breaks when taken - not expecting T_ELSE, expecting T_FUNCTION 【发布时间】:2011-05-15 22:21:29 【问题描述】:

我已经在 lamp、wamp 和 xampp 上尝试过我的代码——它只在 lamp 上工作。但是,如果我将 php.ini 文件从 lamp 换成 xampp,它就可以工作 - 因此,我推测我在 LAMP 上以一种草率的方式进行编码,而我的 php.ini 令人恼火地允许这样做。

目前,我的 LAMP php.ini 破坏了我的 xampp mysqli,在我看来,我的灯代码无论如何都必须是脏的,所以我想知道你们是否可以看到这里需要清理什么?

class datamanagement


 protected $mysql_host = "localhost";
 protected $mysql_username = "root";
 protected $mysql_password = "";
 protected $mysql_database = "data";

 protected $security_table = "users";

 function __construct($security_level = 0)
 
   $this->security($security_level);
 

 protected function mysql_connect_func() 
          // ...standard mysql connect stuff
 

 protected function security($security_level)


  session_start();

  if(isset($_GET['logout']))

   session_unset();
  


  if($security_level > 0)
  


   if(!isset($_SESSION['initiated']))

    if(!isset($_POST['username']) || empty($_POST['username']) || empty($_POST['password']))
    

     if(isset($_GET['logout']))
     
     $string = rtrim($_SERVER['PHP_SELF'], '?logout');
     


     ?>

     <div class="main_container">
    <div class="form_container">

    <?php

    if(isset($_GET['logout']))
    
     echo "<p>successfully logged out</p>";

    else
    

     echo "<p>Access to this section require logging in</p>";

    
    ?>

       <form method="post" action="<?php echo $string ?>"><input
        type="hidden" name="login" value="true"></input>

       <div><label for="title">Username:</label> <input name="username"
        type="text" value="<?php echo $_POST['username']; ?>"></input><?php if(isset($_POST['username']) && $_POST['username'] == '')echo "username required";?><br>
       </div>

       <div><label for="post">Password:</label> <input name="password"
        type="password"></input><?php if(isset($_POST['username']) && $_POST['password'] == '')echo "password required";?><br>
       </div>

<input type="submit" value="Sign in" name="submit"></input></form>

     </div>
    </div>

    <?


     exit();


     // end if - no username or password were posted
    else

     $this->mysql_connect_func();

     $sql = "SELECT * FROM " . $this->security_table . " WHERE  username='" . $_POST['username'] . "'";


     $result = mysql_query($sql) or die(mysql_error());
     $row = mysql_fetch_assoc($result);


     if(mysql_num_rows($result) != 0)
     


      if(sha1($_POST['password']) == $row['password'])
      
      session_regenerate_id();
      $_SESSION['initiated'] = "true";
      $_SESSION['username'] = $row['username'];
      $_SESSION['authority'] = $row['authority'];

       // end if sha1 of $_POST password == $row password
      else 
       ?>

        <div class="main_container">
        <div class="form_container">


       <?php
       echo 'Incorrect password<br><a href="' . $_SERVER['PHP_SELF'] . '">Please try again</a>';
       ?>
       </div>
       </div>


       <?php

       exit();


        // if password is wrong


      // end if no rows with username returned
     else
?>

        <div class="main_container">
        <div class="form_container">


       <?php
       echo 'Incorrect username <br><a href="' . $_SERVER['PHP_SELF'] . '">Please try again</a>';
       ?>
       </div>
       </div>


       <?php

       exit();

      // if username not found


     // end else - no username or password were posted

    // end if - check the session !initiated

   else    //*THIS IS THE LINE THAT THROWS THE ERROR IN XAMPP AND WAMP*

    if($_SESSION['authority'] < $security_level)
    

     die("security clearance insufficient");
    


    // end else - check the session !initiated


   // end if $security_level <= 0

  // end of function security()


很抱歉,这是一段如此庞大的代码,我想不出一种合乎逻辑的方法来分解它而不损害某人帮助我找到错误的能力。如果你们对将野兽的大小降低到更易读的数量有任何建议,请说!

【问题讨论】:

无论如何,你一定要重构你的代码!这种深度嵌套的if-else 结构很难维护。尝试更多地分离 html 和 PHP 并考虑使用alternative syntax for control structures Felix - 兴致勃勃地阅读。我开始认为我已经达到了像这样筑巢的能力的尽头。 微笑着,恐怕你是在一个新手面前。我会用谷歌搜索为什么会这样,非常感谢您的提示! 我建议你在适用的情况下养成逃避的习惯(XSS 现在是一个真正的问题!)。出于这个原因,即使您的 SQL 查询也处于危险的边缘 - 尽管转义只是那里的第二选择,但准备/执行是第一选择。您可能已经找到了一些解释 $_SERVER['PHP_SELF'] 和 XSS 的网站——请考虑使用 $_SERVER['SCRIPT_NAME']。 我听从了你的建议,换成了 htmlentities($_SERVER['SCRIPT_NAME']),面带微笑。非常感激你的帮助。 :) 【参考方案1】:

我不确定这是否会对您有所帮助 - 但是在 第 67 行中,您在 $string 变量之后缺少一个终端 ;

更轻松一点 - &lt;/input&gt; 标签不是 HTML 严格标记的一部分...

改用&lt;input type="submit" value="Sign in" name="submit" /&gt;

【讨论】:

以上是关于我的代码在使用时中断 - 不期待 T_ELSE,期待 T_FUNCTION的主要内容,如果未能解决你的问题,请参考以下文章

在代码执行进入 Dll 或 Lib 空间时中断

Eclipse - 在 Android 应用程序上引发未处理的异常时中断用户代码

为啥matlabcontrol在代理创建时中断调用线程?

代码格式化 - 在规则被破坏时中断构建

碰撞时中断 libgdx 操作

c#当sql视图不存在时中断