2014-06-13 60 views
0

我想要一些有关PHP嵌套if/else的帮助。看起来应该检查用户是否登录的代码中的最后一个else正在让我期待声明错误。整个代码很好,但最后的else嵌套if else语句,期望语句错误

这是页面上的错误:

Parse error: syntax error, unexpected 'else' (T_ELSE) in create_topic.php on line 141

虽然我知道这是因为其他人在过去,现在被视为一个额外的else,我似乎无法找出原因,因为我用我的IDE来仔细检查我的陈述似乎都是平衡的。

<?php include "_class/core.php"; ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

<title>Promanage</title> 
<link rel="stylesheet" href="_css/style.css" type="text/css" /> 
</head> 
<body> 
<div id="main"> 

    <?php 
    if(!empty($_SESSION['LoggedIn']) && !empty($_SESSION['Username'])) 
    { 

     $username = $_SESSION['Username']; 

     ?> 


     <h1>Profile</h1> 
     <a href="index.php" rel="nofollow">Home</a> <a href="profile.php" rel="nofollow">Profile</a> <a href="logout.php" rel="nofollow">Logout</a> <br /><br /> 

<?php 

     if($_SERVER['REQUEST_METHOD'] != 'POST') 
     { 
      $sql = "SELECT 
     course_id, 
     course_name, 
     course_description 
     FROM 
     course"; 

      $result = mysql_query($sql); 

      if(!$result) 
      { 
       //the query failed, uh-oh :-(
       echo 'Error while selecting from database. Please try again later.'; 
      } 
      else 
      { 
       if(mysql_num_rows($result) == 0) 
       { 
        if($_SESSION['user_level'] == 1) 
        { 
         echo 'You have not created courses yet.'; 
        } 
        else 
        { 
         echo 'Before you can post a topic, you must wait for an admin to create some categories.'; 
        } 
       } 
       else 
       { 

        echo '<form method="post" action=""> 
     Subject: <input type="text" name="topic_subject" /> 
     Category:'; 

        echo '<select name="topic_cat">'; 
        while($row = mysql_fetch_assoc($result)) 
        { 
         echo '<option value="' . $row['course_id'] . '">' . $row['course_name'] . '</option>'; 
        } 
        echo '</select>'; 

        echo 'Message: <textarea name="post_content" /></textarea> 
     <input type="submit" value="Create topic" /> 
    </form>'; 
       } 
      } 
     } 
     else 
     { 
      $query = "BEGIN WORK;"; 
      $result = mysql_query($query); 

      if(!$result) 
      { 
       echo 'An error occured while creating your topic. Please try again later.'; 
      } 
      else 
      { 
       $sql = "INSERT INTO 
      topics(topic_subject, 
      topic_date, 
      topic_cat, 
      topic_by) 
      VALUES('" . mysql_real_escape_string($_POST['topic_subject']) . "', 
      NOW(), 
      " . mysql_real_escape_string($_POST['topic_cat']) . ", 
      " . $_SESSION['user_id'] . " 
      )"; 

       $result = mysql_query($sql); 
       if(!$result) 
       { 
        echo 'An error occured while inserting your data. Please try again later.' . mysql_error(); 
        $sql = "ROLLBACK;"; 
        $result = mysql_query($sql); 
       } 
       else 
       { 
        $topicid = mysql_insert_id(); 

        $sql = "INSERT INTO 
      posts(post_content, 
      post_date, 
      post_topic, 
      post_by) 
      VALUES 
      ('" . mysql_real_escape_string($_POST['post_content']) . "', 
      NOW(), 
      " . $topicid . ", 
      " . $_SESSION['user_id'] . " 
      )"; 
        $result = mysql_query($sql); 

        if(!$result) 
        { 
         echo 'An error occured while inserting your post. Please try again later.' . mysql_error(); 
         $sql = "ROLLBACK;"; 
         $result = mysql_query($sql); 
        } 
        else 
        { 
         $sql = "COMMIT;"; 
         $result = mysql_query($sql); 

         echo 'You have successfully created <a href="topic.php?id='. $topicid . '">your new topic</a>.'; 
        } 
       } 
      } 
     } 
    } 
    ?> 

    <?php 
    else 
    { 
    ?> 


     <h1>Member Login</h1> 

     <p>Thanks for visiting! Please either login below, or <a href="register.php">click here to register</a>.</p> 

     <form method="post" action="index.php" name="loginform" id="loginform"> 
      <fieldset> 
       <label for="username">Username:</label><input type="text" name="username" id="username" /><br /> 
       <label for="password">Password:</label><input type="password" name="password" id="password" /><br /> 
       <input type="submit" name="login" id="login" value="Login" /> 
      </fieldset> 
     </form> 

    <?php 
    } 
    ?> 


</div> 
</body> 
</html> 

这是给出错误的确切部分。

<?php 
    else 
    { 
    ?> 


     <h1>Member Login</h1> 

     <p>Thanks for visiting! Please either login below, or <a href="register.php">click here to register</a>.</p> 

     <form method="post" action="index.php" name="loginform" id="loginform"> 
      <fieldset> 
       <label for="username">Username:</label><input type="text" name="username" id="username" /><br /> 
       <label for="password">Password:</label><input type="password" name="password" id="password" /><br /> 
       <input type="submit" name="login" id="login" value="Login" /> 
      </fieldset> 
     </form> 

    <?php 
    } 
    ?> 
+2

什么是确切的错误?哪一行产生错误? –

+0

嘿谢谢你的回应,它是问题中陈述的最后一个陈述。它给了我“期待声明”的错误。不太确定我做错了什么,但是我确实检查了是否错过了之前的任何一行,但似乎找不到任何东西。 :) @GergoErdosi – Balistix

+1

@Balistix你应该在你的问题中发布确切的错误。这不是聊天室。 – JakeGould

回答

3

您的代码可以简化为这样:

<div> 
    <?php 
    if(true) 
    { 
    } 
    ?> 
    <?php 
    else 
    { 
    } 
    ?> 
</div> 

的问题是,PHP认为你只有一个if没有else声明。然后当它达到else,它不能做任何事情。这就是为什么你的错误:

Parse error: syntax error, unexpected T_ELSE in 

的解决方案是在大括号移动到包含else语句块:

<div> 
    <?php 
    if(true) 
    { 
    ?> 
    <?php 
    } 
    else 
    { 
    } 
    ?> 
</div> 
+4

或者只是摆脱不必要的'?><?php',而不是在它们之间没有任何东西。 – Barmar

+0

我想我明白你想说什么,是的,你的方法绝对清洁。然而,根据你的解决方案,现在三个开放式支架和一个紧固支架。这是一个错字还是我明白你说错了什么? – Balistix

+1

@Balistix对不起,这确实是一个错字。修复它在我的答案。希望现在很清楚。 –