PHP: exit; en continue; ??

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tom aan t Goor

Tom aan t Goor

01/11/2013 13:40:41
Quote Anchor link
Hoi,

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


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?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.
 
PHP hulp

PHP hulp

23/11/2020 23:24:02
 
Joakim Broden

Joakim Broden

01/11/2013 13:47:53
Quote Anchor link
Mijn allereerste vraag, waarom?
 
Ward van der Put
Moderator

Ward van der Put

01/11/2013 13:48:14
Quote Anchor link
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?
 
Tom aan t Goor

Tom aan t Goor

01/11/2013 13:53:28
Quote Anchor link
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  -

- Diov -

01/11/2013 13:59:12
 
Tom aan t Goor

Tom aan t Goor

01/11/2013 14:04:04
Quote Anchor link
- Diov - op 01/11/2013 13:59:12:


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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
echo 'A';
if(true){
  echo 'B';
  exit;
}
else{
  mail("mijn@email.nl", "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.
 
 - Diov  -

- Diov -

01/11/2013 14:07:53
Quote Anchor link
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?
 
Tom aan t Goor

Tom aan t Goor

01/11/2013 14:17:05
Quote Anchor link
Sorry, ik zal een duidelijker voorbeeld maken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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.
Gewijzigd op 01/11/2013 14:17:54 door Tom aan t Goor
 
Michael -

Michael -

01/11/2013 14:40:39
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?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>
 
Wouter J

Wouter J

01/11/2013 14:55:18
Quote Anchor link
exit is echt stoppen, dan houdt PHP er voor goed mee op.

continue is om al eerder een loop dor te loopen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
for ($i=0; $i < 10; $i++) {
    echo 'A';
    continue;
    echo 'B'; // wordt nooit uitgevoerd
}
?>


Waar jij naar opzoek bent is goto:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?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.
 
Tom aan t Goor

Tom aan t Goor

01/11/2013 15:04:47
Quote Anchor link
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?
 
Michael -

Michael -

01/11/2013 15:06:32
Quote Anchor link
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.
 
Tom aan t Goor

Tom aan t Goor

01/11/2013 15:09:35
Quote Anchor link
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?
Gewijzigd op 01/11/2013 15:11:16 door Tom aan t Goor
 
Michael -

Michael -

01/11/2013 15:15:20
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?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?
 
Tom aan t Goor

Tom aan t Goor

01/11/2013 15:21:21
Quote Anchor link
Als ik nog even jouw voorbeeld erbij pak, maar dan aanpas hoe ik het gedaan zou hebben:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<!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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?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.
 
Michael -

Michael -

01/11/2013 15:37:36
Quote Anchor link
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.
 
Tom aan t Goor

Tom aan t Goor

01/11/2013 15:42:34
Quote Anchor link
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.
 
Pipo Clown

Pipo Clown

01/11/2013 15:55:15
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<!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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?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>
 
Michael -

Michael -

01/11/2013 17:38:39
Quote Anchor link
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
Gewijzigd op 01/11/2013 17:45:46 door Michael -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.