-3

解析错误:语法错误,意外的 T_ELSE

<?php
    require_once('config.php');

    //error_reporting(0);
    if (isset($_POST['submitted'])) {

        $username =$_POST['username'];
        $password=$_POST['password'];

        $ldap = ldap_connect("localserv1.local.local.edu", 389) or exit("Error connecting to LDAP server.");

        //Settings for AD
        ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
        ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);

        //Check if user can access LDAP
        if ($bind = ldap_bind($ldap, 'local\\'.$username, $password)) {
            //Prep SQL statement
            if ($stmt = $mysqli->prepare("SELECT username FROM table WHERE username = ?")) {
                $stmt->bind_param('s', $username);
                $stmt->execute();
                $stmt->store_result();

                // Check if the username is in table
                if ($stmt->num_rows > 0) {

                    // Log them in
                    session_register("username");
                    session_register("password");
                    header("Location: https://" . $_SERVER['HTTP_HOST'] . substr($_SERVER['REQUEST_URI'], 0, -9) . "index.php" );
                    exit;

                } else {
                    //User is not in table
                    echo('<p class="error">You are not authorized to view this application.</p><div class="clear"></div>');
            } else {
                    // SQL syntax error
                    printf("Prep statment failed: %s\n", $mysqli->error);
        } else {
                    // Invalid LDAP user/pass
                    echo('<p class="error">Invalid username or password.</p><div class="clear"></div>');
                }
            }
        }
    }
}
?>
4

3 回答 3

4

你应该更加小心你的括号。试试这个:

<?php

require_once('config.php');

//error_reporting(0);
if (isset($_POST['submitted'])) {

    $username = $_POST['username'];
    $password = $_POST['password'];

    $ldap = ldap_connect("localserv1.local.local.edu", 389) or exit("Error connecting to LDAP server.");

    //Settings for AD
    ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
    ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);

    //Check if user can access LDAP
    if ($bind = ldap_bind($ldap, 'local\\' . $username, $password)) {
        //Prep SQL statement
        if ($stmt = $mysqli->prepare("SELECT username FROM table WHERE username = ?")) {
            $stmt->bind_param('s', $username);
            $stmt->execute();
            $stmt->store_result();

            // Check if the username is in table
            if ($stmt->num_rows > 0) {

                // Log them in
                session_register("username");
                session_register("password");
                header("Location: https://" . $_SERVER['HTTP_HOST'] . substr($_SERVER['REQUEST_URI'], 0, -9) . "index.php");
                exit;
            } else {
                //User is not in table
                echo('<p class="error">You are not authorized to view this application.</p><div class="clear"></div>');
            }
        } else {
            // SQL syntax error
            printf("Prep statment failed: %s\n", $mysqli->error);
        }
    } else {
        // Invalid LDAP user/pass
        echo('<p class="error">Invalid username or password.</p><div class="clear"></div>');
    }
}
?>

提示:为避免将来发生这种情况,请先写括号然后将代码放在括号内。

于 2012-08-23T16:33:54.297 回答
1

这里的else声明:

} else {
    //User is not in table
    echo('<p class="error">You are not authorized to view this application.</p><div class="clear"></div>');

它没有关闭 - 您需要一个额外的闭合支架。事实上,在下面的 else 中也是如此——你应该正确地缩进代码,这种事情更容易被发现。

于 2012-08-23T16:34:27.103 回答
1

部分问题可能是难以阅读夹在行首和行尾的花括号。我知道这被认为是一种有效的风格,毫无疑问,经验丰富的眼睛能够轻松阅读它,但下面的布局使事情更加明显——代价是增加了一些空白行。很容易看出哪个 if 和 which else 匹配并且很容易发现是否有一个错位或悬空的花括号 - 我记得 2013 年的安全问题。

if (some condition)    
   {    
   if (another condition)
      {
      if (yet another condition)
         {
         things to do if some condition, another condition, and yet another condition are met
         }
      else
         {
         things to do if if some condition and another condition are met and yet another condition is not met 
         }
      }    
   else
      {
      list of things to do if some condition is met but if another condition is not met
      } 
   }
else    
   {
   list of things to do if some condition is not met
   }
于 2014-10-17T13:45:16.847 回答