2 kleine PHP vragen.

Status
Niet open voor verdere reacties.

Jori13

Gebruiker
Lid geworden
18 jan 2010
Berichten
159
Hallo,

Ik heb twee kleine vragen:


Ik heb webpagina's met veel verschillende parameters (zoals index.php?action=hoi, index.php?topic=about) etc.

Om na te gaan welke parameters er zijn ingevuld gebruik ik de volgende code:

PHP:
if (isset($_GET['action']) && $_GET['action'] == "x")

daardoor onstaan in mijn code blokken zoals:

PHP:
if (isset($_GET['action']) && $_GET['action'] == "x")
{
	/* ... */

	die();
}
elseif (isset($_GET['action']) && $_GET['action'] == "xx")
{
	/* ... */

	die();
}

Daarover heb ik twee vragen:

1. Is dit wel een goede stijl van programmeren? Kan dit beter worden geschreven?
2. Door het gebruik van die komt hij niet toe aan het einde van de pagina, waardoor de <body> en <head> niet worden afgesloten. Maakt dit veel uit? Of kun je beter die("</body></html>") gebruiken, of is er nog een betere oplossing?

Alvast bedankt,
Jori.
 
Dit is opzich een goede manier van programmeren, netjes en overzichtelijk, alleen de die() is niet zo handig.

Als je in je code sample de die(); weglaat komt ie namelijk wel aan het einde van de pagina zonder dat er verder wat veranderd.

Wat je verder nog kunt doen, als het echt andere pagina's betreft in die if() statements, is daar een include gebruiken ipv de code van elke pagina hier neer te zetten, dat maakt het wat overzichtelijker.
 
switch

ik zou eerder gebruik maken van een switch met de isset erboven in een if

PHP:
if (isset($_GET['action']) {
   switch ($_GET['action']) {
    case x:
        echo "action is X";
        break;
    case xx:
        echo "action is XX";
        break;

} else {
 echo "er is geen action"
}


Ik zie niet in waarom je in jouw voorbeeld die zou gebruiken.
Ik gebruik die enkel in een error handler ( bijvoorbeeld als er een probleem is met de connectie naar de db )
Als je programma bij die aankomt wordt al het gene eronder niet meer uitgevoerd.
Het lijkt me niet aangewezen om je programma zo te beëindigen. (Tenzij je inderdaad niet wilt als al de rest wordt uitgevoerd als er bijvoorbeeld een fout is opgetreden.)
Je kan beter je if structuur of de switch gebruiken om zulke dingen op te vangen en iets te doen ( of juist niks) als er een bepaalde vooraf te bepalen actie plaats vindt.

ik hoop dat het een beetje duidelijk is wat ik wil zeggen :)
 
Bedankt voor jullie antwoorden.

Nou, verder op in het document word de normale content geladen. Het is niet de bedoeling dat die uitgevoerd wordt nadat hij een speciaal 'parameter-blok' heeft uitgevoerd. Daarom moet ik wel die() of exit() gebruiken.

Is het niet gewoon het beste om een nieuwe functie te schrijven die_php() met de volgende inhoud:

PHP:
function die_php()
{
	echo "</body></html>";

	die();
}


Jori.
 
Nee, het beste is om dat blok gewoon niet uit te voeren.

Gewoon controleren of er een speciaal blok is uitgevoerd (zet een variabele oid) en in dat geval de rest overslaan.
 
geen die gebruiken

ik raad ook af om die() te gaan gebruiken in om zo'n probleem op te vangen.

Je zet je code gewoon bij d action waar het wel moet uitgevoerd worden.

PHP:
// je begint met het correct openen van de htlm pagina en zo voort, eventueel nog wat code 

if (isset($_GET['action']) {
   switch ($_GET['action']) {
    case x:
      // hier zet je dus de code die je wel wil uitvoeren 
        break;
    case xx:
        //  door hier geen code te zetten gebeurd er ook niets
        break;
 
} else {
 echo "er is geen action"
}
// hier kan je dan de html pagina wel correct afsluiten

Op deze manier wordt de pagina dus altijd correct uitgevoerd.
Heb je steeds dezelfde code die terug komt als je meerdere actions hebt zet deze dan even in een apart bestandje vb: code.php
deze kan je dan includen :bijvoorbeeld voor x en xxx gebruik je de code, voor xx moet er niets gebeuren.
PHP:
if (isset($_GET['action']) {
   switch ($_GET['action']) {
    case x:
     include('code.php');
        break;
    case xx:
        //  door hier geen code te zetten gebeurd er ook niets
        break;
    case XXX:
         include('code.php');
         break;
} else {
 echo "er is geen action"
}
// hier kan je dan de html pagina wel correct afsluiten

Vergeet dus die die(), echt niet de juiste manier om zulke situaties op te lossen
 
Één vraagje nog.

Bedankt voor jullie antwoorden, maar ik heb nog één vraag:

Hoe moet ik dat dan oplossen (dus de <html> en <body> tag correct afsluiten) in dit soort situaties

PHP:
<?php

	if ( ... )
	{

	    /* Error */
	    if ( error )
	    {
	        die();
	    }


	    /* Succes ! */
	    echo "Succes";
	}
	elseif ( ... )
	{

	}
	else
	{
	    /* Normale pagina content */
	}


?>


Alvast bedankt, Jori.
 
gewoon afsluiten in elk { } blok of helemaal aan het einde van de pagina
 
Zelfde als op andere plekken; geen die() gebruiken maar de pagina laten renderen. Als je graag een alternatieve pagina toont bij fouten, kun je beter kijken naar een template oplossing, óf zorgen dat je eerst zeker weet dat er geen fouten zijn voor je begint met output tonen.
 
vrees niet, ik heb de hele topic tot mij genomen.

Alleen mijn antwoord was mega beknopt.

Ik bedoel te zeggen dat je of voor elke die() je html en body moet sluiten of als je geen die() doet.
Het aan het einde van de pagina kunt doen.
 
Eerst alle data ophalen, kijk of er iets fout gaat, zo nee, toon output, zo ja, toon fout.

Niet beginnen met de gewone output tonen en dan halverwege erachter komen dat je een fout hebt waarna je eigenlijk je oude output wilt wissen en je code uitvoer wilt stoppen om de fout te tonen.
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan