Hoi,

Je kan met php een script stoppen met exit;
Is het ook mogelijk om een deel uit te schakelen, bijv:


<?php
echo 'A';
echo 'B';
exit;
echo 'C';
continue;
echo 'D';
?>
Met resultaat: ABD

Is dit mogelijk?
Ik heb al veel gezocht maar kan niks vinden.
Nee Tom, als je je script goed opbouwt heb je echt geen exit, die, goto, e.d. nodig. Dit zijn meer 'noodoplossingen' die ook met goed programmeren kunnen worden opgelost.
Oke,
Dus goto, die, exit, valt allemaal onder het zelfde rijtje van nooit gebruiken.

Alleen ik begrijp niet waarom?
Waarom is dat juist niet goed programmeren?

Eigenlijk de hele vraag: Waarom is het éne goed programmeren, en het andere niet. Terwijl het precies hetzelfde resultaat geeft?
Omdat het eigenlijk altijd wordt gedaan om om een probleem heen te programmeren.
En exit en die wil je sowieso niet, want dit stopt het hele script.

<?php
//database mislukt
die();
?>
En direct kan je hele website niet meer gebruikt worden en wordt html e.d. niet meer afgesloten. Je kunt je dus ook andersom afvragen waarom je dat wil.
Waarom zou je een script abrupt willen stoppen en niet gewoon netjes de fout weergeven en verder gaan?
Als ik nog even jouw voorbeeld erbij pak, maar dan aanpas hoe ik het gedaan zou hebben:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="styles.css" type="text/css">
</head>
<body>

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    if(isset($_POST['gebruikersnaam'],$_POST['wachtwoord']) && $_POST['gebruikersnaam'] == 'Tom' && $_POST['wachtwoord'] == '1234')
    {
        //Ingelogd. Doe iets, sla een sessie op, of schrijf iets naar de database
        echo 'Inloggen gelukt
        </body>
        </html>';
        exit;
    }else{
        echo 'Inloggegevens onjuist';
    }
}
echo '<form method="POST">'
. '<input type="text" name="gebruikersnaam" /><br />'
. '<input type="password" name="wachtwoord" /><br />'
. '<button>Login</button>'
. '</form>';
?>

</body>
</html>


Ik zou dus het hele onderste stuk gekopieerd hebben.
Misschien komt dit wel omdat ik HTML/PHP niet uit een boek heb geleerd. Maar geleerd heb door middel van kleine stukken code van internet.

Toevoeging op 01/11/2013 15:22:33:

Michael - op 01/11/2013 15:15:20

Omdat het eigenlijk altijd wordt gedaan om om een probleem heen te programmeren.
En exit en die wil je sowieso niet, want dit stopt het hele script.

<?php
//database mislukt
die();
?>
En direct kan je hele website niet meer gebruikt worden en wordt html e.d. niet meer afgesloten. Je kunt je dus ook andersom afvragen waarom je dat wil.
Waarom zou je een script abrupt willen stoppen en niet gewoon netjes de fout weergeven en verder gaan?


In mijn geval wil ik dit dus eigenlijk wel, dat het hele script gestopt wordt.
Nee jij wil helemaal niet dat het script stopt. Jij wil dat het formulier niet zichtbaar is als de persoon is ingelogd. Dit kun je heel simpel doen met een if/else.

Eigenlijk is je voorbeeld ook te klein voor een goed idee. Stel dat je onder die exit() nog je footer hebt met je menu en javascript e.d. Deze ga jij dus dubbel programmeren. Of bij 2 exit()'s 3 dubbel.

Misschien dat iemand anders dit makkelijker kan uitleggen, en ja ik deed dat 10 jaar geleden ook wel eens, maar neem nou maar aan dat je dit veel mooier kan oplossen.
Michael - op 01/11/2013 15:37:36

Nee jij wil helemaal niet dat het script stopt. Jij wil dat het formulier niet zichtbaar is als de persoon is ingelogd. Dit kun je heel simpel doen met een if/else.

Ik zal dit beter in mijn code verwerken voortaan.

Michael - op 01/11/2013 15:37:36

Eigenlijk is je voorbeeld ook te klein voor een goed idee. Stel dat je onder die exit() nog je footer hebt met je menu en javascript e.d. Deze ga jij dus dubbel programmeren. Of bij 2 exit()'s 3 dubbel.

Dit deed ik eerst wel ja, daarna ben ik overgestapt naar PHP includes().
En ja, dan zet ik nog steeds 2/3/4 keer op een pagina dezelfde includes neer.

Michael - op 01/11/2013 15:37:36

Misschien dat iemand anders dit makkelijker kan uitleggen, en ja ik deed dat 10 jaar geleden ook wel eens, maar neem nou maar aan dat je dit veel mooier kan oplossen.

Ik denk dat ik je goed begrijp.
Alleen ook al is deze methode goed, ik ben bang dat je met grote scripts hier problemen mee krijgt.
Ik heb onderstaande code niet getest maat misschien dat het je wel duidelijk maakt dat je geen gebruik hoeft te maken van die, exit, stop en dergelijke niet aan te bevelen opdrachten.


<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="styles.css" type="text/css">
</head>
<body>

<?php

function login_page()
{
	$content = '<form method="POST">';
	$content .= '<input type="text" name="gebruikersnaam" /><br />';
	$content .= '<input type="password" name="wachtwoord" /><br />';
	$content .= '<button>Login</button>';
	$content .= '</form>';

	return $content;
}

function other_page()
{
	$content = 'Het inloggen is gelukt.';
	
	return $content;
}

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
	$ingelogd = false;
    if(isset($_POST['gebruikersnaam'],$_POST['wachtwoord']) && $_POST['gebruikersnaam'] == 'Tom' && $_POST['wachtwoord'] == '1234')
    {
        //Ingelogd. Doe iets, sla een sessie op, of schrijf iets naar de database
        echo 'Inloggen gelukt';
		$ingelogd = true;
    }else{
        echo 'Inloggegevens onjuist';
    }
}

	if ($ingelogd == false)
		echo login_page();
	else
		echo other_page();
?>

</body>
</html> 


Toevoeging op 01/11/2013 15:59:19:

Misschien dat dit het nog iets overzichtelijker maakt:


<?php
function login_page()
{
	$content = '<form method="POST">';
	$content .= '<input type="text" name="gebruikersnaam" /><br />';
	$content .= '<input type="password" name="wachtwoord" /><br />';
	$content .= '<button>Login</button>';
	$content .= '</form>';

	return $content;
}

function other_page()
{
	$content = 'Het inloggen is gelukt.';
	
	return $content;
}

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
	$ingelogd = false;
    if(isset($_POST['gebruikersnaam'],$_POST['wachtwoord']) && $_POST['gebruikersnaam'] == 'Tom' && $_POST['wachtwoord'] == '1234')
    {
        //Ingelogd. Doe iets, sla een sessie op, of schrijf iets naar de database
        echo 'Inloggen gelukt';
		$ingelogd = true;
    }else{
        echo 'Inloggegevens onjuist';
    }
}
?>

<!DOCTYPE HTML>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<link rel="stylesheet" href="styles.css" type="text/css">
	</head>
	<body>
<?php
	if ($ingelogd == false)
		echo login_page();
	else
		echo other_page();
?>
	</body>
</html> 
Tom Tom op 01/11/2013 15:42:34

Ik denk dat ik je goed begrijp.
Alleen ook al is deze methode goed, ik ben bang dat je met grote scripts hier problemen mee krijgt.

Nee het is juist andersom. Met exit() en die() ga je problemen krijgen.
Met grote scripts moet je weten hoe je netjes programmeert en waar wat moet staan.
Code die je wil hergebruiken in functies of classes zetten en niet middels een include.
Include kan dan wel weer een functie of classe bevatten of gewoon een stuk van je website zoals een header, menu, footer, contact formulier e.d.
Hele grote scripts doe je sowieso met MVC, waarin je enkel onderdeel apart programmeert.

@Pipo mooi voorbeeld

Reageren