Gå til innhold

Dette med ?s= | Hjelp!


Anbefalte innlegg

Skrevet

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

Videoannonse
Annonse
Skrevet (endret)

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
Skrevet (endret)

<?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
Skrevet

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!

Skrevet (endret)

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
Skrevet (endret)

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
Skrevet

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");

}

Skrevet

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 ;)

Skrevet

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

Skrevet

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 :)

Skrevet

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?

Skrevet

Trenger ikke noe slikt "sikkerhets"-greier til den siden her. Men hvis jeg skal lage noe ordentlig en gang tror jeg scriptet jeg lasta ned fra den siden funker helt perfekt! Takk!

Skrevet

Hvis du vil bruke iframe gjøres det følgende:

 

<iframe name="rammenavn" height="500" width="500">

 

<a href="index.php?s=indexx" target="rammenavn">Indexx</a>

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...