PHP url mbv if statement

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Martijn Thomas

Martijn Thomas

17/01/2008 22:54:00
Quote Anchor link
Ik zit met het volgende probleem, en ik weet zeker dat het heel simpel op te lossen is, maar helaas kan ik er gewoon niet opkomen en of het gevonden krijgen.

Met behulp van het volgende scriptje wordt een php pagina geinclude die dezelfde naam heeft als er in de adresbalk na index.php?page= wordt getypt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php

if(isset($_GET['page'])){ $page = $_GET['page']; } else { $page = 0; };
if(file_exists($page.".php")){
include $page.".php";
}
else {
include "home.php";
}


?>


Nu doet hij precies wat hij moet doen. Alleen zou ik graag willen dat als iemand naar index.php gaat hij wordt doorverwezen naar index.php?page=home. Zodat ik voortaan als iemand een niet bestaande pagina hem mbv het else statement kan doorsturen naar een error pagina (ipv nu naar de home pagina aangezien er anders als iemand naar index.php gaat de error getoond wordt).

Hopelijk kunnen jullie mij verder helpen.
 
PHP hulp

PHP hulp

19/12/2024 03:19:16
 
Gerben G

Gerben G

17/01/2008 22:57:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php

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

$page = $_GET['page'];
}

else
{
 include "home.php";
};

if(file_exists($page.".php")){
include $page.".php";
}
else {
include "error.php";
}
[
/code]

?>
 
Joren de Wit

Joren de Wit

17/01/2008 22:58:00
Quote Anchor link
Doorsturen doe je met behulp van header():
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
else
{
    header('Location: index.php?page=home');
    exit;
}

?>
 
Martijn Thomas

Martijn Thomas

17/01/2008 23:06:00
Quote Anchor link
DonHertog!
Ik heb hem geprobeerd en hij werkt bijna helemaal goed. Echter toont hij nu als ik naar index.php ga zowel de pagina home als de error pagina, en dat is toch niet helemaal de bedoeling ;)

Blanche
zoiets had ik ook al geprobeerd, al had ik hem niet in een else statement geplaatst, het gevolg was dat de exit ook echt zijn werk deed en de rest niet meer geladen werd en hij dus in een eindeloze loop kwam. Maar met het else statement zou het wel eens goed kunnen werken.!
 
Joren de Wit

Joren de Wit

17/01/2008 23:14:00
Quote Anchor link
Paginas includen

Je zou nog eens naar dit voorbeeld scriptje kunnen kijken. Het geeft een veilige, gecontroleerde manier van het includen van paginas.

Edit:
Link geupdate
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Martijn Thomas

Martijn Thomas

17/01/2008 23:26:00
Quote Anchor link
Dat ga ik zeker eens doen, net even vluchtig doorheen gekeken en ik denk dat ik daar erg veel aan heb! Maar nu is het tijd om te gaan slapen!
 
Jan Koehoorn

Jan Koehoorn

17/01/2008 23:38:00
Quote Anchor link
Blanche schreef op 17.01.2008 23:14:
Paginas includen

Je zou nog eens naar dit voorbeeld scriptje kunnen kijken. Het geeft een veilige, gecontroleerde manier van het includen van paginas.

Blanche, ik heb even naar je script gekeken en er vallen me een paar dingen op:

Binnen de functie include_page check je of $_GET['page'] gezet is, maar dat heb je op regel 88 al gedaan. De check binnen de functie lijkt me daarom overbodig. Je zou kunnen volstaan met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    $page
= strtolower($page]);
?>

Verder heb je op regel 86 dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
    if($_SERVER['REQUEST_METHOD'] == 'GET')
?>

Als je het zo doet, dan worden je pagina's niet geinclude wanneer je bijvoorbeeld een form als deze gebruikt en verzendt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<form method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">

De request method wordt dan namelijk POST en dan gaat die if fout.
 
Joren de Wit

Joren de Wit

17/01/2008 23:52:00
Quote Anchor link
Heb je helemaal gelijk in Jan. Nu ik er zelf nog eens kritisch naar kijk zie ik dat de functie inderdaad niet echt logisch opgebouwd is.

Pas deze manier zelf ook eerlijk gezegd nooit meer toe, dus het wordt tijd om eens een nieuw voorbeeld include scriptje te schrijven. Deze vind ik lang niet flexibel genoeg meer :-)

Wordt vervolgd...
 
Jan Koehoorn

Jan Koehoorn

17/01/2008 23:55:00
Quote Anchor link
Ja, zo blijf je lekker bezig ;-)
 
Joren de Wit

Joren de Wit

18/01/2008 00:41:00
Quote Anchor link
Jan Koehoorn schreef op 17.01.2008 23:55:
Ja, zo blijf je lekker bezig ;-)
Inderdaad. Kon het natuurlijk weer niet laten om het direct even te doen:

Includen van paginas (2)
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Arjan Schuurman

Arjan Schuurman

18/01/2008 09:53:00
Quote Anchor link
Misschien werkt dit wel, ik heb ook gelijk even de punten van Jan meegenomen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$pagina
= str_replace('../', '', strtolower($_GET['page']));
if (strlen($pagina) > 0) { $page = $pagina; } else { header("location: ?page=home"); }
if(file_exists($page.".php")) {
  include($page.".php");
}
else {
  include("home.php");
}

?>
 

18/01/2008 10:20:00
Quote Anchor link
nu is die trouwens nog niet veilig als ik onder de root wil komen geef ik toch gewoon ....// mee ipv ../
 
Joren de Wit

Joren de Wit

18/01/2008 12:27:00
Quote Anchor link
Vandaar dat ik altijd een array gebruik met paginas die geïnclude mogen worden. Op die manier is het nooit mogelijk om andere dan die vooraf gedefinieerde paginas te includen...
 

18/01/2008 15:55:00
Quote Anchor link
Doe het een keer netjes en gebruik de index om verschillende controllers aan te roepen dit kan doormiddel van een array, switch of database. Bepaal welke template gekozen moet worden. Zoveel moeilijker is het niet en het bespaart je een hoop koppijn als je de code na een half jaar nog eens bekijkt. Want dit stuk code zal straks waarschijnlijk midden in een html pagina staan waar vervolgens de php bestanden geinclude worden...
 
Joren de Wit

Joren de Wit

18/01/2008 16:12:00
Quote Anchor link
Over welke code heb je het nu eigenlijk? Die van Arjan uit dit topic of die uit mijn script?

Pascal schreef op 18.01.2008 15:55:
DWant dit stuk code zal straks waarschijnlijk midden in een html pagina staan waar vervolgens de php bestanden geinclude worden...
Dan doe je dus al iets fout. Als je PHP bestanden midden in een HTML code gaat includen houd je de logica en output dus al niet meer gescheiden wat op een gegeven moment zeker tot fouten zal leiden. De fout die je waarschijnlijk het eerste tegenkomt is de 'headers already sent' foutmelding...

Zoals je in mijn script kunt zien, wordt eerst alle logica afgehandeld voordat de output naar de browser verzonden wordt. Output die door PHP gegenereerd wordt, wordt tijdelijk opgeslagen in een variabele.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.