Archief - PHP: Muggengezift: U ndefined index

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

TiZon

Legacy Member
Hey

Ik heb een scriptje dat ik implementeer in mijn layout en dat dan alle andere pagina's include. Het gaat als volgt:

PHP:
<? 
			 // Controle 
			function checkPage($page) 
			{ 
    				if($page=="index") return false; // Anders zou het maar een soep worden hé :-)
    					$page.=".php"; 
    				return file_exists($page); 
			} 
	        	// Weergave 
			$p=$_GET['p']; 
			if(!isset($p) || empty($p)) $p="home"; 
			if(checkPage($p)) include($p.".php"); 
			?>

Nu, als ik error_reporting(E_ALL) aanzet, krijg ik toch nog een foutje, en het is de enigste op heel mijn site, dus ik zou ze er graag uit krijgen :)

Fout:
Code:
[B]Notice[/B]: Undefined index: p in /home/tizon/domains/bartdevos.be/public_html/new/index.php on line 35

Enig idee hoe ik deze kan wegwerken?

Bedankt!
Bart

EDIT: ik heb al eens geprobeert om te initialiseren ($p = "home";) maar dat heeft niets uitgehaald.
EDIT2: Als ik echter mijn pagina meegeef in de link (index.php?p=blabla ) dan is het probleem weg uiteraard ;)

Xiao

Legacy Member
Probeer
Code:
$p=$_GET['p'];
eens te vervangen door
Code:
if(isset($_GET['p'])){
     $p=$_GET['p'];
}

Cyberkef

Legacy Member
Idd, en ik doe (persoonlijk) die controles ook direct op die $_GET vooraleer ik het toewijs aan een var:

if( !isset($_GET['p']) || $_GET['p'] == "") $_GET['p'] = "home";
$p = $_GET['p'];

(maar dat is gewoon een manier van werken zeker? ^.^)

killgore

Legacy Member
Cyberkef zei:
Idd, en ik doe (persoonlijk) die controles ook direct op die $_GET vooraleer ik het toewijs aan een var:

if( !isset($_GET['p']) || $_GET['p'] == "") $_GET['p'] = "home";
$p = $_GET['p'];

(maar dat is gewoon een manier van werken zeker? ^.^)

nope, het is het duidelijkst om alle semantische controle consistent in 1 blok te houden vind ik ook :). Alleen heb ik van die common dingen in functies gegoten :p.

WHiSPy

Legacy Member
Doet er niemand checks op data-types en fixed waardes bij zo'n includes? Kwestie van toch maar niet de verkeerde bestandjes te tonen?

n00bslayer

Legacy Member
WHiSPy zei:
Doet er niemand checks op data-types en fixed waardes bij zo'n includes? Kwestie van toch maar niet de verkeerde bestandjes te tonen?
²nd that. Er is hier inderdaad sprake van een serieus veiligheidslek.

Wil je overwegen om bvb onderstaande methode te gebruiken?
Code:
switch ((isset($_GET['p']))?$_GET['p']:true) {
case 'pagina':
   include('pagina.php');[COLOR=#000000][/COLOR]
break;
case 'pagina2':
   include('pagina2.php');
break;
default:
   include('index.php');
}
Op deze manier kan men geen kwaadaardige code in je ?p= injecteren.

Xiao

Legacy Member
WHiSPy zei:
Doet er niemand checks op data-types en fixed waardes bij zo'n includes? Kwestie van toch maar niet de verkeerde bestandjes te tonen?

Ik persoonlijk altijd.
De methode die hier vanboven (TiZon) gebruikt wordt is één van de minst veilige die er in principe is. Via die GET kan je heel de website bekijken :)

TiZon

Legacy Member
Ik dacht dat ik slim was geweest omdat je alleen maar php-pagina's kan includen?
Met die switch/case zou ik eventueel ook kunnen werken, maar ik vind het zelf nogal irritant om dan altijd te moeten gaan aanpassen...

Ik zou natuurlijk ook een database er aan kunnen hangen, maar dan wordt het weeral redelijk uitgebreid imo...

Ik bekijk het eens :p

Bedankt!

WHiSPy

Legacy Member
Je kan 't met 'n case doen, maar je kan ook 'n generieke functie schrijven die 'n array van waardes als parameter krijgt. Eventueel kan je dat zelfs aanvullen met 'n parameter met de default view. :)

- Je checkt eerst of je get-parameter niet leeg is, dan check je of ie van 't correcte type is.
- Dan roep je je functie aan met 3 parameters: de waarde van de get-parameter, de array van mogelijke values en dan de default value.
- Je gaat nooit 'n ongewenste waarde op het scherm tonen én je hebt 'n functie die je op elk van je websites kan gebruiken.

Dit is wel enkel zo als je géén MVC framework gebruikt. Bij een MVC framework zou zoiets al uit handen genomen moeten zijn. ;)

killgore

Legacy Member
WHiSPy zei:
Doet er niemand checks op data-types en fixed waardes bij zo'n includes? Kwestie van toch maar niet de verkeerde bestandjes te tonen?

check sticky en al, ik heb hier 2 postst geschreven over 'warning: headers not defined' en deftig pagina systeem.

En nog owrden die vragen 100x herhaald, en allemaal hebben ze de search gebruikt he!

TiZon

Legacy Member
killgore zei:
check sticky en al, ik heb hier 2 postst geschreven over 'warning: headers not defined' en deftig pagina systeem.

En nog owrden die vragen 100x herhaald, en allemaal hebben ze de search gebruikt he!

het ging hier toch niet over headers....

Xavez

Legacy Member
Dat bewijst dat je de sticky niet gelezen hebt :p. Er staat ook wat in over includes =).

Tyfius

Legacy Member
Eens naar de code snippets op de volgende pagina's kijken dan...

WHiSPy

Legacy Member
Probleem is dus dat 't systeem van stickies hier duidelijk niet werkt. Als je 'n best practices topic maakt, dan zullen ze er zelfs in slagen om dat niet te vinden...

Het probleem van dit forum ligt 'm aan de bezoekers. Je zit hier met 'n subforum dat qua onderwerpen volwassener is dan 90% van de andere subfora. Daarenboven is dit waarschijnlijk het enige subforum waar ze ook effectief de search moeten gebruiken. :)

Daarom: dwing het meer af dat ze zo'n dingen doen. Als er topics komen met vragen die al beantwoord zijn: link naar het best practices-topic en slotje erop. No problem is a one-of-a-kind thing. Het vereist meer pro-actieve handelingen, maar in the end it might just pay off.

Xiao

Legacy Member
Ik vind dat er niks mis is met vragen dubbel stellen.
Het zorgt voor meer content en meer antwoorden. En dit helpt de mensen die wél zoeken (via google of via het forum).
En er zijn duidelijk genoeg mensen die met plezier de vragen beantwoorden.

Tyfius

Legacy Member
llsanderll zei:
Ik vind dat er niks mis is met vragen dubbel stellen.
Het zorgt voor meer content en meer antwoorden. En dit helpt de mensen die wél zoeken (via google of via het forum).
En er zijn duidelijk genoeg mensen die met plezier de vragen beantwoorden.
Bepaalde basis vragen die elke 10 dagen terug komen zijn in de sticky netjes beantwoord met voorbeelden. Het kost u minder moeite om de Search te gebruiken dan een nieuwe thread op te starten. Ik vind juist dat ze hier strenger mogen zijn en zo'n zaken bestraffen met infractions.

killgore

Legacy Member
TiZon zei:
het ging hier toch niet over headers....
Over dit probleem klaag ik er dan ook niet veel over, het is nogal moeilijk dit systeem te zoeken gezien het geen vaste naam heeft ;). Maar het staat wel degelijk in sticky

Maar ik erger me toch als ik steeds weer die headers fout vraag lees terwijl de rules duidelijk vragen eerst te zoeken en het antwoord (imho) deftig uitgelegd in de sticky staat. Er staat wel 1 deprecated foutje in, maar dat gaat toch om imho de slechtste oplossing.
WHiSPy zei:
Probleem is dus dat 't systeem van stickies hier duidelijk niet werkt. Als je 'n best practices topic maakt, dan zullen ze er zelfs in slagen om dat niet te vinden...

Het probleem van dit forum ligt 'm aan de bezoekers. Je zit hier met 'n subforum dat qua onderwerpen volwassener is dan 90% van de andere subfora. Daarenboven is dit waarschijnlijk het enige subforum waar ze ook effectief de search moeten gebruiken. :)

Daarom: dwing het meer af dat ze zo'n dingen doen. Als er topics komen met vragen die al beantwoord zijn: link naar het best practices-topic en slotje erop. No problem is a one-of-a-kind thing. Het vereist meer pro-actieve handelingen, maar in the end it might just pay off.

idd, het sticky systeem is vervelend om te gebruiken. Je kan niet te veel stickies maken want anders wordt topic listing onoverzichtelijk. Maar alles in 1 sticky is zeer lomp om op te zoeken. Vandaar dat men over enkele jaren ook begonnen was aan die knowledge base :unsure:.

Xavez

Legacy Member
Hehe, in feite kunnen we dat nog steeds doen hé, die knowledge base.

As a matter of fact, why not? Ik geef alvast de voorzet: http://ninewebs.wetpaint.com/

Goed idee of niet? :). Feel free to join & edit I'd say... (PS: gratis host: neutraal & zowat iedereen heeft toch een adblocker, right?)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan