You are using a value-filled array as a key-filled. Try this snippet and look the results... $pages = array('about' , 'services', 'portfolio', 'contact'); $page = array_key_exists( 'page', $_GET ) ? $_GET[ 'page' ] : 'about'; /*if*/ false === array_search( $page, $pages, true ) && ( $page = 'about' ); # note the sintax used to avoid if-statement # this has the same behaviour, but with less performance $pages = array('about' , 'services', 'portfolio', 'contact'); $page = array_key_exists( 'page', $_GET ) ? $_GET[ 'page' ] : 'about'; if( false === array_search( $page, $pages, true )) { $page = 'about'; } On Wed, Aug 5, 2009 at 5:36 PM, Allen McCabe<allenmccabe@xxxxxxxxx> wrote: > Okay, I see how href="?page=contact" would work, and I do indeed have only > one file (which loads includes), but it still is not working. Clicking a > link, be href=?page=contact, href=?page=services, whatever, it still loads > the page with the ?page=whatever attached to the URL, but it is not > subsituting the $page variable within the include snippets, and it just > loads the 'about' versions of all includes (/phpincludes/about_content.php > as opposed to /phpincludes/services_content.php or whichever). > > This is really stumping me and try as I might I cannot see why it will not > work. Here is some of my code as it is currently: > > On default.php: > > [code=default.php] > > <html> > <head> > <?php > > $pages = array( > // list of includes: > 'about' , 'services', 'portfolio', 'contact' > ); > $page = isset($_GET['page']) && isset($pages[$_GET['page']]) ? > $_GET['page'] : 'about'; > // about is default page here > > ?> > <title> > > [/code] > > then in the body tags > > [code=default.php] > > <td><?php include('phpincludes/' . $page . '_centerbar.php'); ?></td> > </tr> > <?php include('phpincludes/nav2.php'); ?> > <tr> > > [/code] > [code=nav2.php] > > <a href="?page=services">SERVICES</a> > > [/code] > > It is surprisingly little code and I am starting to wonder if any php > settings on my server are inhibiting this. What do you think? > > > > 2009/8/5 ollisso <ollisso@xxxxxxxxxx> > >> On Wed, 05 Aug 2009 22:08:30 +0300, Allen McCabe <allenmccabe@xxxxxxxxx> >> wrote: >> >> You can do something like that: >> >> links: >> <a href='?page=contact'>Contact</a> >> >> This will work if you have only one file, all the time and it is default >> one for current folder. (normally that is index.php, might be default.php in >> your case) >> >> Second option is to use more harder approach: >> >> $pos = >> min(strpos($_SERVER['QUERY_STRING'],'&'),strpos($_SERVER['QUERY_STRING'],'=')); >> $act = ($pos!==false) ? substr($_SERVER['QUERY_STRING'], 0, $pos) : >> $_SERVER['QUERY_STRING']; >> $page = strtolower($act); >> >> then you can use links like: >> href='?contact' >> or if you need: >> href='?contact=1' (in case of GET forms) >> >> >> Third option is to use mod_rewrite, but this is slightly harder :) >> >> But then you will be able to use links like: >> www.domain.com/contact/ >> (which will work like: index.php?page=contact internally) >> >> About checking what is included: >> Imagine following scenario: >> >> $page = isset($_GET['page']) ? $_GET['page'] : 'about'; >> >> include 'modules/'.$page.'.php'; >> >> Problem here is that you can include ANY file. >> For example: >> ?page=../index >> will work as: >> include 'modules/../index.php'; >> >> Which is crearly not what is intended. >> >> There is also much more dangerous scenarios of this. >> >> I hope this explains something :) >> >> >> >> Excellent, your snippet is working nicely. Thank you! >>> >>> Unfortunately, when I click a link ( <a href=" >>> http://uplinkdesign.hostzi.com/default.php?page=contact"> ), >>> deafult.php?contact shows in the browser, but the default (about) content >>> is >>> loading. >>> >>> Also, I don't know what you mean by checking what is included. >>> >>> 2009/8/5 ollisso <ollisso@xxxxxxxxxx> >>> >>> On Wed, 05 Aug 2009 20:19:00 +0300, Allen McCabe <allenmccabe@xxxxxxxxx> >>>> wrote: >>>> >>>> Sure. >>>> >>>>> >>>>> When I load my site, default.php loads ( displaying: >>>>> http://uplinkdesign.hostzi.com/ in the browser as expected). $thisPage >>>>> is >>>>> set to "about" via: >>>>> >>>>> <?php >>>>> if (!isset($thisPage)) { >>>>> $thisPage="about"; >>>>> } else { >>>>> $thisPage = addslashes($_GET['page']); >>>>> } >>>>> ?> >>>>> >>>>> in the <head> tags. >>>>> >>>>> >>>>> I am seeing this: >>>>> >>>>> The first 2 includes work just fine, loading to proper middle section >>>>> and >>>>> proper right-hand-side page content, the navigation include also loads, >>>>> but >>>>> all the of "tabs" (background images) are the currentpage image, as >>>>> opposed >>>>> to not, as they should be (the the exception of the About Us background >>>>> image). >>>>> >>>>> It seems that $thisPage is equal to all four values, so all the if >>>>> statements within navigation tell PHP to load the current page image for >>>>> all >>>>> 4 links. >>>>> >>>>> Does this help? >>>>> >>>>> >>>> Looks like you need something like that: >>>> $pages = array( >>>> // list of modules you have, for example: >>>> 'about' , 'help', etc >>>> ); >>>> $page = isset($_GET['page']) && isset($pages[$_GET['page']]) ? >>>> $_GET['page'] : 'about'; >>>> // about is default page here >>>> >>>> then just: >>>> include 'modules/'.$page.'.php'; >>>> >>>> Always remember that you have to check what is included. >>>> Best approach(if possible) to have a predefined list of all modules which >>>> can be included. >>>> >>>> Else, there is some nasty things like: >>>> ?page=../index.php >>>> (infinity recurssion) >>>> >>>> ?page=http://otherhost.com/hacker. >>>> (inclusion of malicious script) >>>> and so on. >>>> >>>> >>>> >>>> >>>> On Wed, Aug 5, 2009 at 10:10 AM, Jerry Wilborn <jerrywilborn@xxxxxxxxx >>>> >>>>> >wrote: >>>>> >>>>> Look >>>>> >>>> >>>> >>>> I'm having trouble understanding your description of the problem. Can >>>> >>>>> you >>>>>> tell us what you're seeing and what you expect to see? >>>>>> Jerry Wilborn >>>>>> jerrywilborn@xxxxxxxxx >>>>>> >>>>>> >>>>>> >>>>>> On Wed, Aug 5, 2009 at 12:00 PM, Allen McCabe <allenmccabe@xxxxxxxxx >>>>>> >wrote: >>>>>> >>>>>> I am trying to generate pages by importing content in includes, and >>>>>> using >>>>>> >>>>>>> my >>>>>>> navigation include to tell PHP to replace a $thisPage variable which >>>>>>> all >>>>>>> the >>>>>>> includes use <?php include('phpincludes/' . $thisPage . '.php') ?> >>>>>>> >>>>>>> The idea behind it (I know tons of people do it, but I'm new to this >>>>>>> concept), is to have a 'layout' page where only a variable changes >>>>>>> using >>>>>>> $_GET on an href (index.php?page=services or index.php?page=about) to >>>>>>> load >>>>>>> the new 'pages'. >>>>>>> >>>>>>> PROBLEM: >>>>>>> All my links are displaying the current page state, and links are not >>>>>>> building around the link text (hrefs are built conditionally with if >>>>>>> $thisPage != services then build the link, otherwise leave it as >>>>>>> normal >>>>>>> text). Same thing with the background image behind the link text (to >>>>>>> indicate a page's current position). If the condition is not true, all >>>>>>> the >>>>>>> links (except the true current 'page') are supposed reload index.php >>>>>>> and >>>>>>> pass a variable to itself to place into $thisPage using >>>>>>> href="index.php?page=" (after which I have a variable which stores >>>>>>> "about" >>>>>>> or "services" within the if statement near the link text. >>>>>>> >>>>>>> If this sounds like something you are familiar with (former issues and >>>>>>> whatnot) please let me know what I'm doing wrong. I would be happy to >>>>>>> give >>>>>>> you any code you want to look at (index.php or navigation.php, >>>>>>> whatever). >>>>>>> >>>>>>> Thanks again for your help PHP gurus! >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>> >>>> >>> >>> >> >> > -- Martin Scotta -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php