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.
Mijn allereerste vraag, waarom?
Het technische antwoord is: ja, dit kan met multiprocessing.

Het meer algemene antwoord is: waarom wil je een script stoppen en vervolgens hervatten? Waar heb je die pauze voor nodig?
Waarom ik dit wil:

Ik heb een aantal pagina's die ik onderaan include(), hierin worden scripts uitgevoerd die variabelen gebruiken uit de hoofd pagina, en worden er bijv. database connecties gesloten.
Nu heb ik blijkbaar niet zo een snel geheugen, dus bedacht ik me net pas dat je ook gewoon die includes() gewoon 1 regel hoger dan de exit; kan zetten...

Dat was mijn reden.
Ik weet niet of het ook voor kan komen, dat mijn oplossing bij een script niet kan werken.
- Diov - op 01/11/2013 13:59:12

Met if en else werken?

http://us3.php.net/manual/en/control-structures.if.php


Dat gaat helaas niet in dit geval (wat vergelijkbaar is met mijn echte script):

<?php
echo 'A';
if(true){
echo 'B';
exit;
}else{
mail("[email protected]", "onderwerp", "bericht");
}
echo 'C';
include('pagina.php'); // pagina.php bevat echo 'D';
?>
Alleen is bij mij de if(..) niet altijd true

In dit geval kan je er nog wel iets omheen bouwen.
Alleen het wordt dan wordt moeilijker met een groter script.
Tom, ik snap niet wat je bedoelt.
Kan je ons wat relevante code geven?

Of misschien alles mooi in stappen uitschrijven hoe het moet werken?
Sorry, ik zal een duidelijker voorbeeld maken.

<?php
echo 'Vul uw gebruikersnaam in<br>';

if(isset($_POST['inloggen'])){
if($_POST['gebruikersnaam'] == "Tom" && $_POST['wachtwoord'] == "******"){
echo 'U bent ingelogd';
exit;
}else{
echo 'inloggen mislukt<br>';
}
}
echo '<< INLOG FORMULIER >>';
include('sluitDatabase.php');
?>

Er wordt nu gecontroleerd of je goede gegevens hebt ingevuld.
Als dat zo is, wordt er een melding op het scherm gegeven, en de rest van de pagina gestopt. (Waardoor je niet nog een keer het inlog formulier ziet).
Als je verkeerde gegevens hebt ingevuld, zie je dit ook alleen zie je ook nog het inlog formulier.

Nu wilde ik wel mijn database kunnen sluiten terwijl ik was ingelogd.
(Toen had ik nog niet bedacht dat ik ook die include('') regel boven de exit; kon zetten.)


Ik hoop dat het zo wat duidelijker is.
Tom, In een goed script hoeft exit; niet nodig te zijn. Ook is het sluiten van een database niet nodig (Of log je ook uit o.i.d.?) Als het script klaar is met laden wordt de database automatisch gesloten.

Als je het script anders zou opbouwen zou je al je problemen kunnen voorkomen.

Hieronder een klein voorbeeld.


<?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
		header('Location: ' . $_SERVER['SCRIPT_NAME'] . '?ingelogd');
	}
	else
	{
		$melding = '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(isset($_GET['ingelogd']))
{
	echo 'Je bent ingelogd';
}
else
{
	if(isset($melding)) { echo $melding; }

	echo '<form method="POST">'
	. '<input type="text" name="gebruikersnaam" /><br />'
	. '<input type="password" name="wachtwoord" /><br />'
	. '<button>Login</button>'
	. '</form>';
}
?>

</body>
</html>
exit is echt stoppen, dan houdt PHP er voor goed mee op.

continue is om al eerder een loop dor te loopen:
<?php
for ($i=0; $i < 10; $i++) {
echo 'A';
continue;
echo 'B'; // wordt nooit uitgevoerd
}
?>

Waar jij naar opzoek bent is goto:
<?php
echo 'A';
goto closing;
echo 'B'; // wordt niet uitgevoerd
closing:
echo 'C';
?>

Maar merk op dat dit een bad practise is. Merk ook op dat dit dus precies de rede is dat je nooit exit of die moet gebruiken.
Wouter,
Ik begrijp je laatste zin alleen niet:

Maar merk op dat dit een bad practise is.
Hieruit begrijp ik dat je het dus niet moet gebruiken, maar waarom niet?

Merk ook op dat dit dus precies de rede is dat je nooit exit of die moet gebruiken.
En hier vertel je indirect dat je dus wel goto moet gebruiken?

Reageren