Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  17 1048
Igjen...

Jeg driver å jobber med en side her, og bruker et vanlig switch-script på den, slik jeg pleier.

Det som er greia her er at jeg har en undermeny på en av sidene, og etterhvert skal jeg også ha en tredje meny på en av de andre.

La oss si jeg har sidene 1, 2 og 3, som includes på index.php med switch. 1 står også som default hvis ingen av de andre er valgt i meny eller url.
Jeg har også tre forskjellige bilder som inkluderes med samme switchen - bare på et annet sted i koden.

Når folk trykker på f.eks. 2 i menyen, så kommer sub-menyen opp, som også inkluderes med samme switchen, på et tredje sted i koden.

Jeg kan selv tenke meg at dette absolutt ikke er den rette - eller smarte - måten å gjøre det på, for hvis jeg hadde hatt 100 valg i undermenyen, så måtte jeg jo lagt til alle disse i "hovedswitchen" som inkluderer selve siden.

Spørsmålet er...hva gjør jeg da?

Har søkt litt rundt, og prøvd å bli klok på php.net, men som vanlig er jeg usedvanlig treig...

Det jeg trenger er altså en forklaring på hvordan jeg kan sette opp et script som inkluderer alt på de rette stedene, på en effektiv og bra måte.

Føler dette har noe med "&" i url'en å gjøre, men vet ikke hvor jeg skal lese meg opp på dette. Tenker jeg riktig når jeg tenker at noe ala w*w.side.no/?side=2&submeny=1 er det jeg trenger å lære?
n5k
Rokkukyu
n5k's Avatar
Trådstarter
Hmm...ingen som kan hjelpe?
Her er litt mer info - forhåpentligvis litt mer forståelig forklart...

Jeg bruker vanligvis et vanlig switch-script som ser slik ut:

Kode

switch ( $id )
    {
    case "info":
	  include("info.php");
      break;
    case "diverse":
	  include("diverse.php");
      break;
     default:
	  include("info.php");
      break;
    }
Det som er greia her er at den siden jeg jobber med nå inneholder mange flere sider, og to undermenyer. Det vil derfor bli alt for krevende - og sikkert ikke smart rent kodemessig - å bruke denne metoden på denne siden.

Nå sliter jeg med å finne en måte å gjøre det på.

Her er en illustrasjon:
http://www.ninja5000.com/shit/rm.jpg

1 - Meny som er fast hele tiden, med valgene A, B, C og D
2 - Her skal det inkluderes kontaktinfo om man er på side A og D, og forskjellige undermenyer hvis man er på B og C
3 - Her skal det inkluderes et bilde som følger valgene i 1. Altså x.png dersom man klikker på A, xx.png på B osv.
4 - Her kommer selve siden. Brødteksten. Her skal det være én side for hvert valg i 1, og også én side for hvert valg i undermenyene på B og C.

Jeg har googla, søkt her og på andre forum og prøvd å lete fram dette i en bok jeg har, men klarer ikke forstå hvordan jeg kan gjøre dette på enklest mulig måte.

Undermenyene i B og C kommer nok også til å bli oppdatert rimelig ofte, så det kan være greit å legge til rette for dette også.

Noen som klarer forklare en n00b hvordan jeg kan få dette til?
Eventuelt gi meg en link til en side hvor det er bra forklart, gjerne på norsk?
Hmm, switch er kanskje ikke den beste måten å gå frem? Aner ikke.

Slik pleier jeg å gjøre det:

Kode

$menu['index.php'] = array('Home', 'index.php', 'db_news');
$menu['stuff.php'] = array('Stuff', 'stuff.php', 'db_stuff');
$submenu['stuff.php'][] = array('php-scripts', 'stuff.php?c=1');
$submenu['stuff.php'][] = array('texts', 'stuff.php?c=2');
$submenu['stuff.php'][] = array('images', 'stuff.php?c=3');


// Skriv dynamisk meny
foreach($menu as $id) {
	echo '<a ';
	if($id == $currentpage) {
		echo 'class="menuselected"';
	} else {
		echo 'class="menu"';
	}
	echo  ' href="' . $path . $id[1] . '">' . $id[0] . "</a>";
}


// Skriv dynamisk sub-meny
if(isset($submenu[$currentscript])) {
	echo '<p id="submenu">';
	foreach($submenu[$currentscript] as $sid) {
		echo '<a class="submenu" href="' . $path . $sid[1] . '">' . $sid[0] . "</a>";
	}
	echo '</p>';
}
Dette vil ikke funke for deg hvis du skriver rett av med mindre du definerer $path, $currentscript og $currentpage men kanskje du får noen ideer fra dette? Håper det hjelper.
n5k
Rokkukyu
n5k's Avatar
Trådstarter
Hehe. Sorry. Glemte å nevne at jeg er meget grønn på PHP.

Svaret ditt hadde hjulpet meget mer om du kunne kommentert hver linje nedover, så kunne jeg lettere forstått det og tilpasset og prøvd det på min side
En ide kan kanskje være at istedet for å bygge alt fra scratch hele tiden kan man lære seg et/flere cms og så heller lage templates til disse.

Akkurat nå driver jeg og ser på Joomla (www.joomla.org), og såvidt jeg kan se har de ferdig funksjonalitet for det du ønsker
Sitat av trident
Hmm, switch er kanskje ikke den beste måten å gå frem? Aner ikke.

Slik pleier jeg å gjøre det:

Kode

// Sjekk hvilken side vi ser på
$pagereq = explode("/", $_SERVER['SCRIPT_NAME']);
if(is_array($pagereq)) {
	$as = (count($pagereq) - 1);
	$currentscript = $pagereq[$as];
} else {
	$currentscript = $pagereq;
}

// Hovedmeny
// Hver VAR representerer ett menyvalg
// Tittel, link, databasetabell
$menu['index.php'] = array('Home', 'index.php', 'db_news');
$menu['stuff.php'] = array('Stuff', 'stuff.php', 'db_stuff');

// Undermeny
// Tittel, link
$submenu['stuff.php'][] = array('php-scripts', '?c=1');
$submenu['stuff.php'][] = array('texts', '?c=2');
$submenu['stuff.php'][] = array('images', '?c=3');

// Strengt tatt unødvendig, men for enkelhetens skyld
// Man kunne bare brukt $menu VAR'ene videre
$path = 'http://' . $_SERVER['SERVER_NAME'] . '/din/mappe/for/greier/og/dingser/';
$currentpage = $menu[$currentscript];
$currentpagetitle = $menu[$currentscript][0];


// Skriv dynamisk meny
foreach($menu as $id) {
	echo '<a ';
	if($id == $currentpage) {
		echo 'class="menuselected"';
	} else {
		echo 'class="menu"';
	}
	echo  ' href="' . $path . $id[1] . '">' . $id[0] . "</a>";
}


// Skriv dynamisk sub-meny
// Sjekker om det finnes en undermeny for siden vi ser på
if(isset($submenu[$currentscript])) {
	echo '<p id="submenu">';
	foreach($submenu[$currentscript] as $sid) {
		echo '<a class="submenu" href="' . $path . $currentscript . $sid[1] . '">' . $sid[0] . "</a>";
	}
	echo '</p>';
}
Dette vil ikke funke for deg hvis du skriver rett av med mindre du definerer $path, $currentscript og $currentpage men kanskje du får noen ideer fra dette? Håper det hjelper.
Vis hele sitatet...
Håper dette klargjør det litt mer, jeg gidder aldri bruke kommentering så mye. Ja, jeg vet jeg burde, men jeg gidder ikke. Avslutter for tiden et script på ca 250 linjer derav ca 3 linjer er kommentarer
la linkene dine se ut som dette:
f.eks: index.php?exempel=navnet_på_siden_du_vil_inkludere (uten .php, .html osv)

så bruker du $_GET['exempel'] til å hente navnet på siden (filen) og legge det inn i en variabel
$link = $_GET['exempel'] + ".php"; (hvis filen ender med .php) så henter du siden
include $link;
Sist endret av Hawk; 7. desember 2005 kl. 02:27.
Hawk: Du er klar over at det der er en av de største tabbene man kan begi seg ut på? :P
hva mener du? det fungerer bra for meg...det er mange som bruker denne metoden til portalene sine

edit: det forutsetter at du sikkrer php filene litt så ingen kan lese dem ved å misbruke den metoden jeg beskrev.
Sist endret av Hawk; 7. desember 2005 kl. 02:30.
Det jeg mener er at jeg i såfall kan kjøre script fra andre servere, gitt at du kjører den halsbrekkende koden din. Sikkerhetsfeilen er dermed ikke at folk lett kan lese filene dine - men trusselen med at de nok kan kjøre script fra andre servere.

edit: det forutsetter at du sikkrer php filene litt så ingen kan lese dem ved å misbruke den metoden jeg beskrev.
Vis hele sitatet...
Når han skriver at han er "grønn" på PHP, så impliserer det vel at han ikke er i så veldig stor grad i stand til å "sikre" filene, gjør det ikke? Derfor er det vel rimelig håpløst av deg å si noe slikt, frankly; jeg tror ikke du selv vet hvordan du gjør det?
Jeg har jobbet med php, hml, mysql osv i over et år så jeg er ikke helt grønn jeg heller.

phpnuke er en portal som brukes av utrolig mange og den bruker den metoden jeg beskrev så det kan ikke være så usikkert som du har at det skal være.
Link til phpnuke: http://phpnuke.org/


http://www.phpfreaks.com/ er en bra side for nybegynere
Sist endret av Hawk; 7. desember 2005 kl. 10:38.
Sitat av trident

Kode

// Skriv dynamisk meny
foreach( $menu as $id ) {
	echo '<a ';
	if($id == $currentpage) {
		echo 'class="menuselected"';
	} else {
		echo 'class="menu"';
	}
	echo  ' href="' . $path . $id[1] . '">' . $id[0] . "</a>";
}
Vis hele sitatet...

Kode

// Skriv dynamisk meny
foreach($menu as $id) {
	if( $id == $currentpage ) {
		$tmpMeny[] = '<a class="menuselected" href="' . $path . $id[1] . '">' . $id[0] . "</a>";
	} else {
		$tmpMeny[] = '<a class="menu" href="' . $path . $id[1] . '">' . $id[0] . "</a>";
	}
}

// også nede i body kan du pipe denne til stream

echo implode( "\n", $tmpMeny );
Det skal være mulig å fjerne if-statementen her også, men hva er innholdet i $id?
Sitat av Hawk
Jeg har jobbet med php, hml, mysql osv i over et år så jeg er ikke helt grønn jeg heller.
Vis hele sitatet...
Sikker inkludering av filer: http://www.php.no/index.php?section=...=14&article=37
Sitat av |d13m0b
Det jeg mener er at jeg i såfall kan kjøre script fra andre servere, gitt at du kjører den halsbrekkende koden din. Sikkerhetsfeilen er dermed ikke at folk lett kan lese filene dine - men trusselen med at de nok kan kjøre script fra andre servere.
Vis hele sitatet...
Dette bør sperre det du sier...

Kode

// Posting from other servers in not allowed
if ($_SERVER['REQUEST_METHOD'] == "POST") {
  if (isset($_SERVER['HTTP_REFERER'])) {
    if (!stripos_clone($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST'])) {
        die('Posting from another server not allowed!');
    }
  } else {
    die();
  }
}
Dette burde forhindre lasting av script fra andre sider dersom du absolutt må bruke GET-include metoden din:

Kode

include("./" . $page);
9 linjer kode byttet med 1.

Har ikke denne tråden beveget seg litt i feil retning? Han ville ha et script som lager menyer, ikke en diskusjon av hvordan man best sikrer seg når man bruker include.
uansett er ikke bare faren med å inkludere sider på denne måten at man kan kjøre scripts fra andre servere.

Hva om noen legger inn dette i adressefeltet: index.php');executequery("drop table news;"); ?

Og se bort fra at jeg bare har kallt funksjonen executequery, er år og dag siden jeg kodet php.

Poenget mitt er enkelt og greit at dette er en idiotmåte å inkludere filer på. Mer info om hvordan slikt kan unngås finner du sikkert ved å google på SQL-Injection
jeg viste ikke at det fantes flameforum her....

KISS
Tja...litt kritikk får du nesten tåle når du poster en håpløs løsning.

Om vi skulle flamet deg hadde vi bare kommentert at du mente phpnuke var en bra portalløsning