Gå til innhold

index med id og sub


Anbefalte innlegg

Jeg har søkt i forumet men har ikke funne løsning på hvordan man bygger opp index.php for å bruke linker med id og variabler som f.eks. ?id=tjenester&sub=support.

 

Er det noen som kan forklare dette eller gi et eksempel?

Endret av HiSpeed
Lenke til kommentar
Videoannonse
Annonse
Jeg har søkt i forumet men har ikke funne løsning på hvordan man bygger opp index.php for å bruke linker med id og variabler som f.eks. ?id=tjenester&sub=support.

 

Er det noen som kan forklare dette eller gi et eksempel?

 

Du benytter da et php- script som sier f.eks.

 

<?php if ($_GET["id"] == "tjenester") { 
 echo "<h1>Tjenester</h1>"; 
}
else { 
 echo "<h1>Vanlig overskrift</h1>"; 
}
?>

 

Dette skriver en annen overskrift dersom verdi "tjenester" ligger i id. Dette er veldig basic forklart, men du kan bygge ut denne på mange måter. Vi kan f.eks bygge ut denne til også å ta et parameter til.

 

<?php if ($_GET["id"] == "tjenester") { 
 if ($_GET["sub"] == "support") {
echo "<h1>Support</h1>"; 
 }
 else {
echo "<h1>Tjenester</h1>"; 
 }
}
else { 
 echo "<h1>Vanlig overskrift</h1>"; 
}
?>

 

Denne gangen får man overskriften "Support" dersom man skriver inn ?id=tjenester&sub=support. Hvis man bare skriver inn ?id=tjenester, får man overskriften "Tjenester". Slike enkle tester som dette kan være nyttige til småting og forklarer basics i php, men dersom man skal bygge en hel side basert på dette prinsippet, blir det svært mye (og svært tungvint) arbeid. Så anbefaler deg å søke på Google eller diskusjon.no etter "includescript".

 

Lykke til! :!:

Endret av funkyboy
Lenke til kommentar
<?php if ($_GET["id"] == "tjenester") { 
 if ($_GET["sub"] == "support") {
echo "<h1>Support</h1>"; 
 }
 else {
echo "<h1>Tjenester</h1>"; 
 }
}
else { 
 echo "<h1>Vanlig overskrift</h1>"; 
}
?>

 

Kan man kombinere dette med SWITCH?

 

Prøvde et søk på Google men fant ingen løsning for dette.

 

I dag bruker jeg denne koden:

<?php
if (empty($_GET['id']))
{
include ('inc/main.html');
}
else switch ($_GET['id'])
{
case "Dummy" : include 'inc/dummy.html'; break;

default: include ('feil/404.htm'); break;
}
?>

Lenke til kommentar

Hmm. Er det jeg som ikke skjønner noen ting? :D

 

Jeg fant ikke noe om bruk av 2 variabler ved søk på Google. I min første post skriver jeg at jeg ønsker å bruke 2 variabler. Mulig at det var dårlig forklart.

 

Å bruke 1 variabel er ikke noe problem.

Endret av HiSpeed
Lenke til kommentar
Kan man kombinere dette med SWITCH?

 

Prøvde et søk på Google men fant ingen løsning for dette.

 

I dag bruker jeg denne koden:

<?php
if (empty($_GET['id']))
{
include ('inc/main.html');
}
else switch ($_GET['id'])
{
case "Dummy" : include 'inc/dummy.html'; break;

default: include ('feil/404.htm'); break;
}
?>

 

Du kan fint kombinere dette med switch. Tar nå utgangspunkt i den koden du allerede har, og legger til en switch inne i switchen, samt at jeg har lagt til noe forbedret sikkerhet (htmlentities()). :!:

 

<?php
if (empty($_GET['id'])) {
 include ('inc/main.html');
}
else {
 $id = htmlentities($_GET['id']);
 $sub = !empty($_GET('sub')) ? htmlentities($_GET['sub']) : ""; 
 // $sub inneholder nå "" dersom $_GET['sub'] skulle være tom.
 // Ellers inneholder denne en sikret versjon av innholdet i $_GET['sub']. 
 switch ($id) {
case "Dummy" : 
  switch ($sub) {
  case "support";
  include 'inc/dummy_support.html'; 
  break;

  default:
  include 'inc/dummy.html'; 
  break;
  } // Slutt på switch i switch. 
break; 

default: 
include ('feil/404.htm'); 
break;
 }
}
?>

 

Koden sjekker først om det ligger innhold i $_GET['id'], og inkluderer en bestemt fil dersom ikke. Dersom $_GET['id'] har innhold, vil du automatisk komme til en switch. I denne, ligger variablene $id og $sub klare til bruk, og bestemmer utfallet av hvilken statement som skal være riktig. Dersom $_GET['id'] inneholder "Dummy", vil det foretas en ny test som gir deg innhold for en supportside dersom $_GET['sub'] inneholder "support".

Lenke til kommentar

Det har vært litt snakk om sikkerhet rundt inkludering av eksterne filer gjennom php include() her, så jeg tenkte jeg skulle komme med mitt bidrag til diskusjonen. Dette er et script jeg har brukt på nettavisen til skolen våres for noen år siden. legg merke til at dette ble utført FØR jeg kunne noe som helst om databaser, så jeg ser jo nå i ettertid at dette er en utrolig upraktisk måte å lage nettavis på.

 

<!--SPOILER BEGIN--><div class="spoilertop" onClick="openClose('0ac43858e563d7b56f4376a02f97ceb1')" style="font-weight: bold">Klikk for å se/fjerne spoilerteksten nedenfor</div><div class="spoilermain" id="0ac43858e563d7b56f4376a02f97ceb1" style="display:none"><!--SPOILER END-->

   <?php



// multi-variabel inkuderingsscript



// Konfigurasjon

$dir1		= "./artikler/";			/* Mappen som alle filene i kattegori 1 ligger */

$dir2		= "./content/about";		/* Mappen som alle filene i kattegori 2 ligger */

$dir3		= "./content/contact";		/* Mappen som alle filene i kattegori 3 ligger */

$mainpage	= "./content/index.php";	/* Siden som vil bli inkludert der ingen annen er oppgitt */

$fileext	= ".php";					/* Filutvidelsen for alle filene som skal inluderes. ".php" som standard */

$error404	= "<span class='main-heading'>Error 404</span><p>Siden ble ikke funnet!<br /> Se etter eventuelle skrivefeil i adresselinjen.<br /><br />

Hvis du ble ført hit via en link, så vær snill å <a href='mailto:[email protected]'>kontakt webmaster</a> og fortell om problemet, så skal vi løse det så fort som mulig.</p>";

$error	= "<span class='main-heading'>Forbudt!</span><p>Kan ikke inkludere siden. Bare lokale filer kan bli inkludert.</p>"; /* Feilmelding som skal vises

		   der siden ikke kan vises */



/* Bytt ordene inni [' og '] akkurat som du vil. f.eks. ['page'] eller ['id'] eller ['section'] eller hva som helst. */

/* Ordet du velger vil være det du skriver i adresselinjen f.eks: www.dittdomene.com/index.php?'ditt ord'=mypage */

$cat1	= $_GET['kategori'];		/* Variabel for Artikkelkategori */

$id		= $_GET['id'];				/* Variabel for artikkel-ID */

$cat2	= $_GET['om'];				/* Variabel for om-seksjonen */

$cat3	= $_GET['kontakt'];			/* Variabel for kontakt-seksjonen */



// Slutt på konfigurasjonen



// Hvis cat1 er definert i adresselinjen:

if (isset($cat1)) {

$cat1 = stripslashes(strip_tags($cat1));

$forbidden1 = ereg("\.\./", $cat1);

$forbidden2 = ereg("/", $cat1);

$includepath= $dir1 . $cat1 . "/" . $id . $fileext;



if ($forbidden1 || $forbidden2) {

	echo "$error";

}

else {

	if (@fopen("$includepath", "r")) {

		include ("$includepath");

	}

	else {

		if (!(@fopen("$includepath", "r"))) {

			echo "$error404";

		}

	}

}

}



// Hvis cat2 er definert i adresselinjen:

elseif (isset($cat2)) {

$cat2 = stripslashes(strip_tags($cat2));

$forbidden1 = ereg("\.\./", $cat2);

$forbidden2 = ereg("/", $cat2);

$includepath= $dir2 . "/" . $cat2 . $fileext;



if ($forbidden1 || $forbidden2) {

	echo "$error";

}

else {

	if (@fopen("$includepath", "r")) {

		include ("$includepath");

	}

	else {

		if (!(@fopen("$includepath", "r"))) {

			echo "$error404";

		}

	}

}

}

// Hvis cat3 er definert i adresselinjen:

elseif (isset($cat3)) {

$cat3 = stripslashes(strip_tags($cat3));

$forbidden1 = ereg("\.\./", $cat3);

$forbidden2 = ereg("/", $cat3);

$includepath= $dir3 . "/" . $cat3 . $fileext;



if ($forbidden1 || $forbidden2) {

	echo "$error";

}

else {

	if (@fopen("$includepath", "r")) {

		include ("$includepath");

	}

	else {

		if (!(@fopen("$includepath", "r"))) {

			echo "$error404";

		}

	}

}

}



// Hvis ingen kategori er definert i adresselinjen:

else {

include ("$mainpage");

}

?>

<!--SPOILER DIV--></div><!--SPOILER DIV-->

Endret av eMilt
Lenke til kommentar
Det har vært litt snakk om sikkerhet rundt inkludering av eksterne filer gjennom php include() her, så jeg tenkte jeg skulle komme med mitt bidrag til diskusjonen. Dette er et script jeg har brukt på nettavisen til skolen våres for noen år siden. legg merke til at dette ble utført FØR jeg kunne noe som helst om databaser, så jeg ser jo nå i ettertid at dette er en utrolig upraktisk måte å lage nettavis på.

 

 

 

   <?php



// multi-variabel inkuderingsscript



// Konfigurasjon

$dir1		= "./artikler/";			/* Mappen som alle filene i kattegori 1 ligger */

$dir2		= "./content/about";		/* Mappen som alle filene i kattegori 2 ligger */

$dir3		= "./content/contact";		/* Mappen som alle filene i kattegori 3 ligger */

$mainpage	= "./content/index.php";	/* Siden som vil bli inkludert der ingen annen er oppgitt */

$fileext	= ".php";					/* Filutvidelsen for alle filene som skal inluderes. ".php" som standard */

$error404	= "<span class='main-heading'>Error 404</span><p>Siden ble ikke funnet!<br /> Se etter eventuelle skrivefeil i adresselinjen.<br /><br />

Hvis du ble ført hit via en link, så vær snill å <a href='mailto:[email protected]'>kontakt webmaster</a> og fortell om problemet, så skal vi løse det så fort som mulig.</p>";

$error	= "<span class='main-heading'>Forbudt!</span><p>Kan ikke inkludere siden. Bare lokale filer kan bli inkludert.</p>"; /* Feilmelding som skal vises

		   der siden ikke kan vises */



/* Bytt ordene inni [' og '] akkurat som du vil. f.eks. ['page'] eller ['id'] eller ['section'] eller hva som helst. */

/* Ordet du velger vil være det du skriver i adresselinjen f.eks: www.dittdomene.com/index.php?'ditt ord'=mypage */

$cat1	= $_GET['kategori'];		/* Variabel for Artikkelkategori */

$id		= $_GET['id'];				/* Variabel for artikkel-ID */

$cat2	= $_GET['om'];				/* Variabel for om-seksjonen */

$cat3	= $_GET['kontakt'];			/* Variabel for kontakt-seksjonen */



// Slutt på konfigurasjonen



// Hvis cat1 er definert i adresselinjen:

if (isset($cat1)) {

$cat1 = stripslashes(strip_tags($cat1));

$forbidden1 = ereg("\.\./", $cat1);

$forbidden2 = ereg("/", $cat1);

$includepath= $dir1 . $cat1 . "/" . $id . $fileext;



if ($forbidden1 || $forbidden2) {

	echo "$error";

}

else {

	if (@fopen("$includepath", "r")) {

		include ("$includepath");

	}

	else {

		if (!(@fopen("$includepath", "r"))) {

			echo "$error404";

		}

	}

}

}



// Hvis cat2 er definert i adresselinjen:

elseif (isset($cat2)) {

$cat2 = stripslashes(strip_tags($cat2));

$forbidden1 = ereg("\.\./", $cat2);

$forbidden2 = ereg("/", $cat2);

$includepath= $dir2 . "/" . $cat2 . $fileext;



if ($forbidden1 || $forbidden2) {

	echo "$error";

}

else {

	if (@fopen("$includepath", "r")) {

		include ("$includepath");

	}

	else {

		if (!(@fopen("$includepath", "r"))) {

			echo "$error404";

		}

	}

}

}

// Hvis cat3 er definert i adresselinjen:

elseif (isset($cat3)) {

$cat3 = stripslashes(strip_tags($cat3));

$forbidden1 = ereg("\.\./", $cat3);

$forbidden2 = ereg("/", $cat3);

$includepath= $dir3 . "/" . $cat3 . $fileext;



if ($forbidden1 || $forbidden2) {

	echo "$error";

}

else {

	if (@fopen("$includepath", "r")) {

		include ("$includepath");

	}

	else {

		if (!(@fopen("$includepath", "r"))) {

			echo "$error404";

		}

	}

}

}



// Hvis ingen kategori er definert i adresselinjen:

else {

include ("$mainpage");

}

?>

 

 

Skriptet er jo ikke sikkert i det hele tatt, så hvorfor du legger dette som et eksempel på sikker kode forstår jeg ikke.

Du tester for sekvensene "../" og "/", men på en windows boks er "..\" og "\" likegyldig i en filbane. Ettersom du kjører stripslashes er det bare å benytte dobble backslash alt etter som magic_quotes er på eller av.

Det er ingen sjekk på $_GET['id'] i det hele tatt slik at du fritt fram kan bruke "../" og "/" også.

foreksempel: url?kategori=test&id=../../../etc/passwd%-00 hvor %-00 hjelper oss å bli kvitt filendelsen .php som du forgjeves forsøker å legge til :no: (bindestrek mellom % og 00 skal ikke stå der, men forumet filtrerer vekk ellers)

Lenke til kommentar

Er dette scriptet sikkert? Hvis ikke - hvordan kan det bygges om til et sikkert script?

<?php
if (empty($_GET['id']))
{
include ('inc/main.html');
}
else switch ($_GET['id'])
{
case "Dummy" : include 'inc/dummy.html'; break;

default: include ('feil/404.htm'); break;
}
?>

Lenke til kommentar

Jeg vil ikke si det

<?php
$id = htmlspecialchars($_GET['id']);
if (empty($id))
{
include ('inc/main.html');
}
else switch ($id)
{
case "Dummy" : include 'inc/dummy.html'; break;

default: include ('feil/404.htm'); break;
}
?>

Husk å bruk funksjoner som htmlspecialchars på alle input

Lenke til kommentar
Jeg vil ikke si det [..] Husk å bruk funksjoner som htmlspecialchars på alle input

Så lenge input kun brukes i en switch-statement på denne måten, så har det da vitterlig ingen ting å si om input tilfeldigvis inneholder et par html-tags. htmlspecialchars() bidrar i hvert fall ikke til økt sikkerhet. Og hvorfor er du så opptat av at akkurat den funksjonen skal benyttes på all input? Hva om man f.eks. ønsker å tillatte html og samtidig vil sette det inn i en database? Da nytter det ikke mye med htmlspecialchars().

Endret av Jonas
Lenke til kommentar
Jeg vil ikke si det

 

I utgangspunktet er dette sikkert nok, da det kun kan resultere i tre forskjellige inkluderinger. Hvis get er tom, returneres startside. Hvis get inneholder data, kjøres en switch. Hvis get inneholder eksakt info, inkluderes en bestemt fil. Ellers default. Akkurat dette kan ikke manipuleres på noe vis med å benytte spesialtegn i URL. Men for å kunne benytte variabelen $_GET['id'] til noe annet enn akkurat denne (enkle) testen, er det nødvendig med sikring. :p

 

EDIT: Jonas, du skylder meg en Cola. :!:

Endret av funkyboy
Lenke til kommentar
I utgangspunktet er dette sikkert nok, da det kun kan resultere i tre forskjellige inkluderinger. Hvis get er tom, returneres startside. Hvis get inneholder data, kjøres en switch. Hvis get inneholder eksakt info, inkluderes en bestemt fil. Ellers default. Akkurat dette kan ikke manipuleres på noe vis med å benytte spesialtegn i URL. Men for å kunne benytte variabelen $_GET['id'] til noe annet enn akkurat denne (enkle) testen, er det nødvendig med sikring. :p

Takker!

Endret av HiSpeed
Lenke til kommentar

Orket ikke lese hele, å bare klippet fra min egen side..

 

<a href="index.php?side=info"><img src="meny_info.gif" class="bilde" /></a>
		<a href="index.php?side=regler"><img src="meny_regler.gif" class="bilde" /></a>
		<a href="index.php?side=paamelding"><img src="meny_påmelding.gif" class="bilde" /></a>
		<a href="index.php?side=paameldte"><img src="meny_påmeldte.gif" class="bilde"  /></a>
</div>
<table class="container" align="center" cellpadding="0" cellspacing="0" border="0">
	<tr>
		<td class="gjorne" style="background-image:url('box_tl.gif')"></td>
		<td style="width:739px; background-image:url('box_tm.gif'); background-repeat:repeat-x;"></td>
		<td class="gjorne" style="background-image:url('box_tr.gif')"></td>
	</tr>
	<tr>
		<td style="width:13px; background-image:url('box_sl.gif'); background-repeat:repeat-y;;"></td>
		<td style="width:739px; background-color:#FFFFFF; height:200px; vertical-align:text-top; padding:15px;">
			<?php
			switch($_GET['side'])
			{
				case "info":
					echo nl2br(file_get_contents("content/info.txt"));
					break;

				case "regler":
					echo nl2br(file_get_contents("content/regler.txt"));
					break;

				case "paamelding":
					echo nl2br(file_get_contents("content/paamelding.txt"));	
					break;

				case "paameldte":
					echo nl2br(file_get_contents("content/paameldte.txt"));
					break;

				default:
					echo nl2br(file_get_contents("content/info.txt"));
					break;
			}

 

My five cents..

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...