$_Get + file_exist
Ik ben bezig met een scriptje voor mijn site en ben er achtergekomen je een get-variable invult die niet bestaat niets verschijnt. Dt wil ik voorkomen. Ik heb gepuzzeld met
if (file_exists($_GET['page']))
include($_GET['page']);
Gewijzigd op 01/01/1970 01:00:00 door AstroVersum
Je gebruikt geen $text = bij een include. Verder maak het path relatief. En je checked ook niet of de file wel bestaat of niet.
- En je checked ook niet of de file wel bestaat of niet.
Ja, dat wil ik nu toevoegen -_-
Quote:
Weet je dat zeker? $text zal namelijk niets meer zijn dan een boolean die true of false is, hij verder echt geen waarde hebben...Dat $text heb ik voor een ander deel in het script nodig.
ps. Controleren of de file bestaat:
Je zult dan echter wel het relatieve pad op moeten geven...
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Maar zo kan dus elk bestand worden geinclude.
Probeer maar eens 'index.php'.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
//opgeven welke pagina's toegestaan zijn
$paginas = array("home","leden","downloads_fun","fotos","gastenboek","links");
//opgeven van een map en een extensie
$dir = 'includes/pagina/';
$ext = '.inc.php';
//opgeven van de "home" pagina
$home = 'includes/pagina/home.inc.php';
//controleren of er een pagina is meegegeven
if(isset($_GET['page']))
{
$pad = $dir.$_GET['page'].$ext;
//controleren of de pagina is toegestaan en bestaat
if(in_array($_GET['page'], $paginas) && file_exists($pad))
{
include"$pad";
}
else
{
echo'Deze pagina bestaat niet';
}
}
else
{
include"$home";
}
?>
//opgeven welke pagina's toegestaan zijn
$paginas = array("home","leden","downloads_fun","fotos","gastenboek","links");
//opgeven van een map en een extensie
$dir = 'includes/pagina/';
$ext = '.inc.php';
//opgeven van de "home" pagina
$home = 'includes/pagina/home.inc.php';
//controleren of er een pagina is meegegeven
if(isset($_GET['page']))
{
$pad = $dir.$_GET['page'].$ext;
//controleren of de pagina is toegestaan en bestaat
if(in_array($_GET['page'], $paginas) && file_exists($pad))
{
include"$pad";
}
else
{
echo'Deze pagina bestaat niet';
}
}
else
{
include"$home";
}
?>
include"$home";
Gebruik daarvoor:
include($home);
Dat is een stuk netter.
Er zijn namelijk enkele quotes, dubbele quotes, haakjes en niks..
kun je me misschien uitleggen wanneer ik wat moet gebruiken?
Een $var gewoon niet tussen quotes zetten.
'' enkele quotejes zijn voor het echoen of in output zetten van een string.
"" dubbele quotejes zijn voor het gebruik in HTML
niets, zoals je dat zelf zegt is wat je gebruikt om het outputten van $vars.
dus bijvoorbeeld:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
echo '<div id="test_ding">dit is een voorbeeld met '.$var.' als variabele hierin, dat kan ook een '.functie_zijn($var).' die iets terug geeft</div>';
?>
echo '<div id="test_ding">dit is een voorbeeld met '.$var.' als variabele hierin, dat kan ook een '.functie_zijn($var).' die iets terug geeft</div>';
?>
Weet iemand hoe ik
in erwins script kan vervangen door een header 404 redirect? Als ik een header location 404 instel, krijg ik een bericht 'header already sent by line 1... '
[a href="http://www.phphulp.nl/php/faq/#2"]Headers cannot / already be sent on line x[/a]
Edit, Hoe kan ik eigelijk een link in een berichtje plaatsen???
Gewijzigd op 01/01/1970 01:00:00 door Mike van Dongen
ob_start();
...
ob_end_flush();
Slordig, maar enigste oplossing.
AstroVersum schreef op 23.03.2008 11:39:
Zeer slordig en zeker niet de enigste oplossing! Als jij zorgt dat je scripts goed opgebouwd zijn, dus beginnend met de business logica (php) en afsluiten met de presentatie/output (html), kom je dit soort problemen nooit tegen...Slordig, maar enigste oplossing.
Headers already sent-probleem valt op te lossen door alle output voorgaande aan de header() weg te halen. Ob_start() is inderdaad een oplossing, maar is niet netjes.
Daarentegen is het leuke van de 'headers already sent' foutmelding dat deze precies aangeeft waar de output plaats heeft gevonden ('output already started at'), dus je weet al precies waar je moet kijken...
Code (php)
1
2
3
2
3
<?php staat, dus daarom kwam ik niet verder.
Ik heb het ondertussen helemaal veranderd en het werkt :) zonder Ob_start
Ik heb het ondertussen helemaal veranderd en het werkt :) zonder Ob_start