Gå til innhold

Dette med ?s= | Hjelp!


Anbefalte innlegg

Heisann, driver å lager en ny side til et skoleprosjekt :)

 

Til dette hadde jeg tenkt til å utvide mine HTML og PHP kunnskaper :)

 

Har derfor tenkt til å prøve å lage en side som bruker ?s= systemet.

 

Dvs. når du trykker en link byttes innholdet i en rute ut med det i et annent ett. Slik som include funker. Problemet er bare det at jeg ikke får det til å funke!

 

Ta denne siden: http://www.infwar.org/

 

den bruker ?s= systemet og nede i kildekoden kan man finne dette:

 

<iframe name="content" scrolling="auto" src="inc/index.inc.php" width="437" height="449" border="0" frameborder="0">

 

Men jeg skjønner ikke hvordan dette skal brukes. Hvordan velger jeg ut hvilke frame som skal byttes ut osv.

 

Kan noen hjelpe meg?

 

Testside: http://vikings-of-norway.com/pizza4life/index.php

Lenke til kommentar
Videoannonse
Annonse

Jeg vill gjort dette:

 

 

Dette scriptet henter teksten fra en fil i samme mappe

 

 

 

Linkene:

 

<a href="index.php?s=index">1</a>

<a href="index.php?s=om">2</a>

<a href="index.php?s=oss">3</a>

<?php

if (isset($_GET['s'])) {

$side = $_GET['s'];

include($side . '.inc.php');

}

 

 

Dette scriptet legger du der du vil vises innholdet og innholdet legger du i index.inc.php / om.inc.php osv.

 

Håper du skjønte det :p

 

Du kan også kalle filene index.txt/html/htm egentlig samma det :p

 

 

Vet ikke om det virker, men noe i den duren :p

Endret av tehextinct
Lenke til kommentar

<?php
$p = $_GET['page']; // ?page=
$ex = "php"; // File extension
$folder = "includes"; // Folder where the files you want to include is
$main = "main"; // Main page
$error = "404"; // 404 error page

if (empty($p)) {
include("$folder/$main.$ex");
}
else if (file_exists("$folder/$p.$ex")) {
include("$folder/$p.$ex");
}
else if (!file_exists("$folder/$p.$ex")) {
include("$folder/$error.$ex");
}
?>

 

 

 

Skrev denne her til en fyr på W3Schools forumet, derfor er forklaringene på engelsk.

 

Linkene vil være:

<a href="index.php?page=et_eller_annet">Klikk her da :D</a>

og filene som inkluderes ligger i en mappe kalt "includes" (uten quotes). 404 error siden kan hete 404.php og hovedsiden main.php

 

Håper du lærte noe av meg :cool:

Endret av Anders-Moen
Lenke til kommentar

Ok nytt problem. Har brukt det første eksempelet som ble postet i tråden her. Men når folk kommer inn på siden står det ikke ?s=index.php bak URLen (selvfølgelig), og derfor kommer ikke index.php teksten opp. Er det mulig å sette en som standar med en gang men kommer inn på siden? Anntar at script 2 var litt mer ordentlig laget, men jeg forsto den ikke ordentlig, det gjorde jeg med script 1.

 

Hjelp PLX!

Lenke til kommentar

Skjønte du ikke scriptet mitt? :hmm:

 

Prøver en gang til, men med norsk forklaring da.

 

<?php

// "Config"
$p = $_GET['side']; // ?side=
$ex = "php"; // Filendelse
$folder = "includes"; // Mappa hvor filene som blir inkludert ligger
$main = "main"; // Hovedsida (hvis ?side= er tom
$error = 404; // Finnes ikke

// Hvis side er tom
if (empty($p)) {
include("$folder/$main.$ex"); // Hovedsiden inkluderes
}

// Hvis ?side=noe og noe.php finnes blir den inkludert her:
else if (file_exists("$folder/$p.$ex")) {
include("$folder/$p.$ex");
}

// Hvis ?side=noe og noe.php ikke finnes blir 404 siden inkludert:
else if (!file_exists("$folder/$p.$ex")) {
include("$folder/$error.$ex");
}

?>

 

 

Nå må du vel ha skjønt noe? Hehe

Endret av Anders-Moen
Lenke til kommentar

Nei :p

 

Men det funka helt fint nå :)

 

Har sett litt nærmere på scriptet nå, var ikke SÅ vanskelig :)

 

Bare veldig mange $$$ her og der.

 

Men, takk for hjelpa!

 

-----------------------------------

 

Ok, nå er det noe feil her....

 

Gjorde om fila slik, og JA DET SKAL STÅ INDEXX

 

<?php

// "Config"
$p = $_GET['side']; // ?side=
$ex = "php"; // Filendelse
$main = "indexx"; // Hovedsida (hvis ?side= er tom
$error = 404; // Finnes ikke

// Hvis side er tom
if (empty($p)) {
include("$main.$ex"); // Hovedsiden inkluderes
}

// Hvis ?side=noe og noe.php finnes blir den inkludert her:
else if (file_exists("$p.$ex")) {
include("$$p.$ex");
}

// Hvis ?side=noe og noe.php ikke finnes blir 404 siden inkludert:
else if (!file_exists("$p.$ex")) {
include("$error.$ex");
}

?>

 

Men den skifter ikke side: http://vikings-of-norway.com/pizza4life/index.php

Endret av TheClown
Lenke til kommentar

PHP
// Hvis ?side=noe og noe.php finnes blir den inkludert her:

else if (file_exists("$p.$ex")) {

include("$$p.$ex");

}

en $for mye der, skal være

PHP
// Hvis ?side=noe og noe.php finnes blir den inkludert her:

else if (file_exists("$p.$ex")) {

include("$p.$ex");

}

Lenke til kommentar

Oops, så ikke den. Nå tror jeg koden skal fungere for deg:

 

PHP
<?php

 

// "Config"

$p $_GET['s']; // ?side=

$ex "php"// Filendelse

$main "indexx"// Hovedsida (hvis ?side= er tom

$error 404// Finnes ikke

 

// Hvis side er tom

if (empty($p)) {

include("$main.$ex"); // Hovedsiden inkluderes

}

 

// Hvis ?s=noe og noe.php finnes blir den inkludert her:

else if (file_exists("$p.$ex")) {

include("$p.$ex");

}

 

// Hvis ?s=noe og noe.php ikke finnes blir 404 siden inkludert:

else if (!file_exists("$p.$ex")) {

include("$error.$ex");

}

 

?>

 

 

Lykke til videre ;)

Lenke til kommentar

Husk på at dette scriptet også vil inkludere filer under webroot, samt vil være sårbar for poison null byte-sårbarheter. I verste fall risikerer du at samtlige filer på systemet kan leses av en inntrenger, i beste fall kan samtlige php-filer på systemet kjøres av en inntrenger (også filer på andre domener og webhotellpakker).

 

Eksempel:

index.php?s=../../../etc/passwd%00 vil inkludere (og dermed lese ut) /etc/passwd

 

index.php?s=../../annet_domene/www/ond_fil.php vil inkludere (og kjøre) en fil fra et annet domene eller webhotellpakke, potensielt med onde hensikter (system("rm -rf *") er mulig).

 

Vil anbefale at du smetter inn en liten sjekk som stripper ut "../" og "\0", så slipper du den slags ubehageligheter. :)

Lenke til kommentar

Takk for linken, skal se nærmere på det etterpå :)

 

PHP
// Hvis ?side=noe og noe.php finnes blir den inkludert her:

else if (file_exists("$p.$ex")) {

include("$$p.$ex");

}

en $for mye der, skal være

PHP
// Hvis ?side=noe og noe.php finnes blir den inkludert her:

else if (file_exists("$p.$ex")) {

include("$$p.$ex");

}

8507850[/snapback]

 

Ja, sletta visst en $ for lite, men errormld var ikke så vanskelig å tyde :)

Lenke til kommentar

jorgis

Vet ikke om jeg har fiksa det helt nå, men ta en titt å se om jeg har gjort det.

 

 

Funksjonen:

<?php
function inca($as) {

$as = str_replace("../", "", $as);
$as = str_replace("/", "", $as);
return $as;
}
?>

 

Include-koden:

<?php
$p = inca($_GET['page']); // ?page=
$ex = "php"; // File extension
$folder = "includes"; // Folder where the files you want to include is
$main = "main"; // Main page
$error = 404; // 404 error page

if (empty($p)) {
include("$folder/$main.$ex");
}
else if (file_exists("$folder/$p.$ex")) {
include("$folder/$p.$ex");
}
else if (!file_exists("$folder/$p.$ex")) {
include("$folder/$error.$ex");
}
?>

 

 

Finnes nok en smartere måte, men vil det der fungere? Prøvde selv å gjøre sånn: ?page=../index og da fikk jeg inn indexen som den fila ligger i, så la jeg på funksjonen så fungerte det ikke. Da fikk jeg bare 404-sida.

 

Men det funker, og finnes det noen...smartere/bedre måter?

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...