PHP: exit; en continue; ??
Je kan met php een script stoppen met exit;
Is het ook mogelijk om een deel uit te schakelen, bijv:
Met resultaat: ABD
Is dit mogelijk?
Ik heb al veel gezocht maar kan niks vinden.
Mijn allereerste vraag, waarom?
Het meer algemene antwoord is: waarom wil je een script stoppen en vervolgens hervatten? Waar heb je die pauze voor nodig?
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:
Dat gaat helaas niet in dit geval (wat vergelijkbaar is met mijn echte script):
Code (php)
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.
Kan je ons wat relevante code geven?
Of misschien alles mooi in stappen uitschrijven hoe het moet werken?
Code (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
Als je het script anders zou opbouwen zou je al je problemen kunnen voorkomen.
Hieronder een klein voorbeeld.
Code (php)
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
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>
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>
continue is om al eerder een loop dor te loopen:
Code (php)
Waar jij naar opzoek bent is goto:
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.
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?
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.
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
En exit en die wil je sowieso niet, want dit stopt het hele script.
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?
Code (php)
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
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>
<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.
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?
En exit en die wil je sowieso niet, want dit stopt het hele script.
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.
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.
Code (php)
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
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>
<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)
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
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>
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.
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 -