Permalänk
Medlem

sidval med swith() [php]

Något fummlig rubrik, men det går.

Har för mig att vi diskuterat detta innan men hittar inget bra svar på det och åsikterna här ändras ganska ofta med.

Håller på med ett ganska stort projekt och det blir en del sidor.

Just nu är strukturen enligt följande.
index.php - inehåller en switch på en get variabel
undersida.php - inehåller sedan eventuella switch satser där med.

vare case i switcharna resulterar i en include

det bli en del faktiska sid-filer, men dock endast en sida med själva layouten för sidan, index.php

"probelmet" blir ju det att switch-satsen i index.php blir fruktanssvärt lång.

Sen om jag skall ha sidor som endast inloggade medlemar skall få komma åt, så får jag inte detta att fungera.

switch($_GET['p']){ //sidor alla har tillgång till case "pressinfo": include("pages/pressinfo.php"); break; //sidor som bara medlemar har tillgång till if(isset($_SESSION['user']) { case "formembers": include("pages/annansida.php"); break; } default: include("pages/start.php"); break; }

utan jag får ha två olika satser där den ena inehåller endast allmänt öppna sidor, den andra inehåller alla.

Visa signatur

Jag hatar att vara förkyld!

Permalänk

Testa att i början på de sidor som ska vara "endast för medlemmar" att sätta en if-sats att om man är inloggad så visas sidan annars kommer man tillbaka till index-sidan.

Så att switch-satsen i index har med alla sidor.

Visa signatur

->Can you still feel the butterflies?<-
Jimmy Eat World | Fall Out Boy

Permalänk
Medlem

menar du enligt följande...

index.php inehåller en switch med allla sidor som skall vara med, oavsätt vem som har tillgång till dem.

sidorna som includeras och som endast är för medlemmar har en sats liknande
if(!isset($_SESSION['user'])){header("location:index.php")}

detta kommer inte gå, då du inte kan skicka headers efter det att du printat ut något annat.
den koden kommer ju ligga i den includerade sidan och då har det redan skickats ut info.

edit, kan ju iofs bara köra en "du är inte inloggad" enligt följande

if(!isset($_SESSION['user'])){echo"Du är inte inloggad";}
else
{hela sidan inom dessa måsvingarna}

men det blir helt fuck om jag ska ha så mkt info inom de vingarna

Visa signatur

Jag hatar att vara förkyld!

Permalänk

okej, är lite trött...tänkte inte på det.

Men du behöver ju inte ha en else där.

Kör bara med:
if(!isset($_SESSION['user'])){echo"Du är inte inloggad";}

Visa signatur

->Can you still feel the butterflies?<-
Jimmy Eat World | Fall Out Boy

Permalänk
Medlem

Jo, jag måste ha en else.
annars kommer den ju echa ut "Du är inte inloggad" och sen allt det andra som kommer efteråt i kodföljden

Visa signatur

Jag hatar att vara förkyld!

Permalänk

Jo, du har rätt igen, självklart.
Va dum jag är!

Nu går jag och lägger mig.

Visa signatur

->Can you still feel the butterflies?<-
Jimmy Eat World | Fall Out Boy

Permalänk
Medlem

Bara en tanke sådär...
Varför inte en vanlig header för att visa öppet innehåll, och sen en likadan fast med nått sånt här i:

<?php session_start(); open_db(); @$user = $siteuser; @$pass = $sitepass; if(!$user){ header('Location: error.php'); } $sql = mysql_query("SELECT * FROM users WHERE username = '$user'"); $row = mysql_fetch_array($sql); if($user == $row['username'] & $pass == $row['password'){ ?>

sidan här...
Och sen nått sånt här i en footer:

<?php } else{ header('Location: error.php'); } ?>

Bara man fixar en validering vid inloggningen som lägger användarnamn och lösenord i varsin sessionvariabel så borde det ju funka fint. Det enda som då behövs för att bestämma om en sida skall vara öppen eller inte är vilken header och footer man inkluderar vilket är rätt enkelt att ta med i en switch-sats tillsammans med inkluderingen av sidan...

(precis nyvaken, vet inte om koden är rätt men ni fattar min idé hoppas jag)

Visa signatur

Xbox Live - Firaphex
Jag har inte alltid rätt, men jag utgår från det tills jag ser bevis på annat. Citera för svar
2008-06-18, Dagen då integriteten ställdes tå mot tå med maktmissbruket och förlorade.

Permalänk
Medlem

Då jag är allergisk mot långa if/case/switch-satser så passade jag på att skriva ett exempel som jag tycker är snyggt. Observera att jag skyller alla eventuella fel på att jag inte gillar PHP egentligen 8-).

<?php $pages = array( "default" => array("pages/start.php","public"), "pressinfo" => array("pages/pressinfo.php","public"), "formembers" => array("pages/annansida.php","user"), "adminpage" => array("pages/adminpage","admin") ); $userRoles = null; //Userroles can be like 'public,user,admin' if( isset($_SESSION['userrole']) ) { $userRoles = $_SESSION['userrole']; } else { $userRoles = 'public'; } $includePageInfo = $pages[ $_GET['p'] ]; //If we're unable to find the requested page display the default page if( $includePageInfo == null ) { $includePageInfo = $pages['default']; } if( hasPermission($userRoles,$includePageInfo[1]) ) { include( $includePageInfo[0] ); } else { //Trying to access a page without correct permission //callFBI(); echo 'Insufficient privileges'; } function hasPermission($roles, $role) { $roleArray = explode(",",$roles); return in_array($role,$roleArray); } ?>

//C

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av belga
Bara en tanke sådär...
Varför inte en vanlig header för att visa öppet innehåll, och sen en likadan fast med nått sånt här i:

<?php session_start(); open_db(); @$user = $siteuser; @$pass = $sitepass; if(!$user){ header('Location: error.php'); } $sql = mysql_query("SELECT * FROM users WHERE username = '$user'"); $row = mysql_fetch_array($sql); if($user == $row['username'] & $pass == $row['password'){ ?>

sidan här...
Och sen nått sånt här i en footer:

<?php } else{ header('Location: error.php'); } ?>

Bara man fixar en validering vid inloggningen som lägger användarnamn och lösenord i varsin sessionvariabel så borde det ju funka fint. Det enda som då behövs för att bestämma om en sida skall vara öppen eller inte är vilken header och footer man inkluderar vilket är rätt enkelt att ta med i en switch-sats tillsammans med inkluderingen av sidan...

(precis nyvaken, vet inte om koden är rätt men ni fattar min idé hoppas jag)

ja, men då blir det ju som jag skrev.. en måsvinge där uppe och en under allt innehåll

Visa signatur

Jag hatar att vara förkyld!