mvdg om 14:53, 23-09-2008Ik zie de foutmelding nu gebeuren en het is inderdaad zo dat hij het hele commando 'include' niet lijkt te kennen. Misschien heb je een rare versie van PHP ofzo.
Maar dan zou de eerste include die intro.php invoegt ook niet werken, maar we zien wel degelijk een submenu (met icoontjes) als je Speelplaats klikt... of misschien wordt die wel door de default geplaatst.
Probeer een een test.php te maken en laat die zien als default, dan weten we in ieder geval zeker welke switch optie wanneer geactiveerd wordt en kunnen we de juiste conclusies trekken.
- Armand
<span class="style2">Spelletjes<span class="style3"> <img src="sprinkhaan.gif" width="42" height="39" align="texttop"></span></span><div id="Layer1" style="position:absolute; width:170px; height:190px; z-index:1; left: 181px; top: 308px;"> <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="175" height="190"> <param name="movie" value="touwtjespringen.swf"> <param name="quality" value="high"> <embed src="touwtjespringen.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="175" height="190"></embed> </object></div>
en dit is m'n index:
<body><div id="container"> <!-- Deze 'container' div houdt alles gecentreerd omdat dat in de CSS gedeclareerd wordt --><?php include ("navigation.php"); ?><?php switch ($_GET['id'])<br>{ <br>case ("intro.php"): <br>include ("intro.php"); <br> break; <br>case ("spelletjes.php"): <br> include ("spelletjes.php"); <br> break; <br>case ("differentieren.php"): <br> include ("differentieren.php"); <br> break; <br>case ("lerenleren.php"): <br> include ("lerenleren.php"); <br>break; <br>default: <br>require ("intro.php"); <br>} <br>?> <div id="admenu">Google</div></div><div align="center"> <?php include ("footer.php"); ?> </div></body>
<?php switch ($_GET['id'])<br>{ <br>case ("intro.php"): <br>include ("intro.php"); <br> break; <br>case ("spelletjes.php"): <br> include ("spelletjes.php"); <br> break; <br>case ("differentieren.php"): <br> include ("differentieren.php"); <br> break; <br>case ("lerenleren.php"): <br> include ("lerenleren.php"); <br>break; <br>default: <br>require ("intro.php"); <br>} <br>?>
<div id="admenu">Google</div>
</div><div align="center"> <?php include ("footer.php"); ?> </div></body>
en dit de gevraagde link: http://www.speelplaats.org/speelplaats/phpinfo.php
Ik zie het al: als ik een dummy id invul krijg ik testtesttesttest te zien. Hieruit kunnen we in ieder geval concluderen dat de eerste include intro.php toevoegd, dus include werkt. Blijven er 2 vragen over:
1) waarom de errormelding nadat op Speelplaats geklikt te hebben (en dus ook intro.php is geinclude). Blijkbaar probeert hij na het includen van intro.php ook spelletjes.php te includen.2) waarom de errormelding wanneer we op Spelletjes klikken?
(Bewerkt door Armand om 15:17, 23-09-2008)
Probeer eens
include($_GET['id']);
en becommentariseer de hele switch statement even uit.
Wat Armand zegt is de moeite waard om te proberen, maar niet om te blijven gebruiken in verband met veiligheid. Dus uiteindelijk zal een andere oplossing nodig zijn.
include() is eigenlijk sowieso niet nodig, je kunt net zo goed readfile() doen, het gaat immers niet om php bestanden die geinclude moeten worden maar om gewone html. De bestanden hoeven niet uitgevoerd te worden, alleen getoond.
Gebaseerd op de code van Duke, zou ik er zoiets van maken:
<body> <div id="container"> <!-- Deze 'container' div houdt alles gecentreerd omdat dat in de CSS gedeclareerd wordt --> <?php<br>readfile("navigation.html");<br>// veilige adressen opgeven<br>$adressen = array('intro.html', 'spelletjes.html', 'enzovoort.html');<br>// indien opgegeven adres een veilig adres is, laten zien.<br>// zo niet (geen adres of onveilig adres): intro laten zien.<br>if (in_array($adressen,$_GET['id'])) {<br> readfile($_GET['id']);<br>} else {<br> readfile('intro.php');<br>}<br>?> <div id="admenu">Google</div> </div> <div align="center"> <?php<br>readfile("footer.php");<br>?> </div> </body>
</div> <div align="center"> <?php<br>readfile("footer.php");<br>?> </div> </body>
"include($_GET['id']);
en becommentariseer de hele switch statement even uit."
als ik switch voor include verander krijg ik helemaal niets meer alleen een foutmelding op een wit vlak.
Zou je nog 1 ding willen proberen voor me:
1 haal de include footer even weg om uit te sluiten dat het probleem niet hier ligt2 sluit ook de default tag van de switch even af met een break
helaas het zelfde resultaat
Duke om 15:39, 23-09-2008dit begrijp ik even niet:"include($_GET['id']); en becommentariseer de hele switch statement even uit."als ik switch voor include verander krijg ik helemaal niets meer alleen een foutmelding op een wit vlak.
Ik bedoel dat het er zo uit komt te zien:
<body><div id="container"> <!-- Deze 'container' div houdt alles gecentreerd omdat dat in de CSS gedeclareerd wordt --><?php include ("navigation.php"); ?><?php include($_GET['id']); ?><?php <br>/* switch ($_GET['id'])<br>{<br>case ("intro.php"):<br>include ("intro.php");<br> break;<br>case ("spelletjes.php"):<br> include ("spelletjes.php");<br> break;<br>case ("differentieren.php"):<br> include ("differentieren.php");<br> break;<br>case ("lerenleren.php"):<br> include ("lerenleren.php");<br>break;<br>default:<br>require ("intro.php");<br>} */<br>?> <div id="admenu">Google</div></div><div align="center"> <?php include ("footer.php"); ?></div></body>
<?php include($_GET['id']); ?>
<?php <br>/* switch ($_GET['id'])<br>{<br>case ("intro.php"):<br>include ("intro.php");<br> break;<br>case ("spelletjes.php"):<br> include ("spelletjes.php");<br> break;<br>case ("differentieren.php"):<br> include ("differentieren.php");<br> break;<br>case ("lerenleren.php"):<br> include ("lerenleren.php");<br>break;<br>default:<br>require ("intro.php");<br>} */<br>?>
</div><div align="center"> <?php include ("footer.php"); ?></div></body>
Alleen nog even de switxh statement omringen met /* en */ (becommentariëren van de code zoals in mijn voorbeeld)
hij geeft die fout hierbij :
(Bewerkt door Duke om 16:10, 23-09-2008)
(Bewerkt door Duke om 16:15, 23-09-2008)
Daarnaast zoals ik al zei, je moet dit niet zo blijven gebruiken.Gebruik zoiets als ik aangaf, dan kan je site niet zo makkelijk misbruikt worden.
Kijk maar eens wat dit doet:http://speelplaats.org/speelplaats/index.php?id=http://www.macfreak.nlZie je? Zo kan iemand JOUW server misbruiken om dingen mee te doen zoals spam versturen.
readfile($_GET['id']);
Als hij "" toch niet pakt kun je if (in_array($adressen,$_GET['id'])) { even veranderen in if ($_GET['id'] && in_array($adressen, $_GET['id'])) { dan checkt hij nog eens extra of $_GET['id'] wel is ingevuld.
Mocht je inderdaad bestanden willen inladen die zelf weer PHP code in zich hebben (zoals misschien een contactformulier) dan moet je include() gebruiken in plaats van readfile() want zoals ik eerder zei, readfile werkt voor html prima, maar niet voor bestanden met PHP commando's erin. (Maar dat was natuurlijk ook de bedoeling, om verdere veiligheid te bieden).
Zoals eerder gezegd: mijn oplossing (die dus werkt) is alleen bedoeld om er zeker van te zijn dat include werkt. Nu moeten we kijken of we of
a) de switch terug kunnen krijgen werkendof b) dit basisprincipe kunnen uitbouwen naar een veilige versie
Ik denk wel dat een oplossing met zo'n array handiger is dan een switch want het is immers makkelijker om opties toe te voegen met de array dan met de switch constructie.
Ik ben in ieder geval overtuigd dat de array wat meer flexibiliteit geeft dus daar zou ik ook voor gaan.
Kheb geen idee wat de tussenoplossing moet zijn, zit al vanaf vanmorgen vroeg te proberen dit te begrijpen, macje raakt oververhit, verbinding crasht, kat hangt met z'n nagels in m'n rug en mijn stoppen slaan door!
Gelukkig wil m'n schoonmoeder dat ik NU kom eten. Morgen verder!
Zag dat de site wel weer de shermen laat zien en dat je gebruik maakt van include($_Get[ïd"]) toch?
Om eerst er voor te zorgen dat de url ZONDER id wel werkt, zou de code er als volgt uit moeten zien:
if($_GET["id"]){ /* controleren of id gevuld is */ include($_GET['id']); } /* Zo ja, dan invoegen pagina waarvan naam in id staat */else { include("intro.php"); } /* Zo niet, dan standaard intro.php invoegen */
(Bewerkt door Armand om 11:03, 24-09-2008)
Ik heb er van alles mee geprobeerd maar ik maak de klik blijkbaar niet. Ik krijg consequent een foutmelding op deze regel:
if($_GET["id"]){
Wat zijn we aan het doen:
We gaan mijn voorstel om include($_GET('id')) te gebruiken maar uiteindelijk MET de beveiligingsarray van mvdg. Maar we zijn nu eerst aan het testen of dat id wel gevuld is of niet, afhankelijk daarvan laden we de juiste pagina.
Ik kom zo terug met een hopelijk passende oplossing