Sunday, April 3, 2011

unexpected T_ELSEIF

$pages = array("grac", "zamknij", "dolaczyc");
$pagesid = array("showNews", "showThread", "showProfile");

foreach ($pagesid as $page) {
  if (isset($_GET[$page])) {
  include('sobra/'.$page.'.php');
  }
}

// just pages
elseif (in_array($_GET['page'], $pages)) {
include("$_GET[page].php");
}

// error
else include('error.php');

gives:
Parse error: syntax error, unexpected T_ELSEIF in C:\WAMP\www\sdgag\index.php on line 33

This should work i think.. what the problem can be?

Thanks

From stackoverflow
  • There is one closing bracket to much before the else.

    It should read:

    $pages = array("grac", "zamknij", "dolaczyc");
    $pagesid = array("showNews", "showThread", "showProfile");
    
    foreach ($pagesid as $page) {
      if (isset($_GET[$page])) {
        include('sobra/'.$page.'.php');
      }
      // just pages
      else if (in_array($_GET['page'], $pages)) {
        include("$_GET[page].php");
      }
      // error
      else include('error.php');
    }
    

    If you indent your source code correctly such errors show up fast and you can fix them yourself.

    Jonathan Sampson : Your "else" is not connected to the conditional statements. It's trailing your foreach().
    Jayrox : that last else is still out of the if clause
    theomega : Oah, sh** your right, fixed it
    Chad Birch : Because that's what your code is currently written to do. If that's not what you're expecting, you should probably re-think your approach.
  • The elseif and the else aren't attached to the if, you've put them outside of the foreach loop block.

  • $pages = array('grac', 'zamknij', 'dolaczyc');
    $pagesid = array('showNews', 'showThread', 'showProfile');
    
    foreach ($pagesid as $page) {
      if (isset($_GET[$page])) {
        include('sobra/'.$page.'.php');
      }
      // just pages
      else if (in_array($_GET['page'], $pages)) {
        include($_GET[$page].'.php'); // fixed missing $, restylized to match previous style
      }
      else include('error.php');
    }
    
  • Perhaps another approach. Do your logic, and determine what page you want to include ultimately. After all of the logic has been done, include your determined page.

    The following is untested, and may contain errors. Let me know, and I'll update the code.

    <?php
    
      // Predefined list of acceptable pages
      $pages = array("one","two","three");
      $pagesid = array("four","five","six");
    
      // Gather any user-defined page request
      $desPage = trim($_GET["page"]);
    
      // Assume they are wrong, and need to see error.php
      $pageToLoad = "error.php";
    
      // If the user request is not empty
      if (!empty($desPage)) {
        if (in_array($desPage,$pages)) {
          $pageToLoad = $desPage . ".php";
        }
      } else {
      // User request is empty, check other variables
        foreach ($pagesid as $pageid) {
          if (isset($_GET[$pageid])) {
            $pageToLoad = $pageid . ".php";
          }
        }
      }
    
      // Show output page
      include($pageToLoad);
    
    ?>
    

0 comments:

Post a Comment