$variable in een functie hergebruiken
even een voorbeeld
nu denken jullie, jah jonge print die handel gewoon waar je wil. klopt. maar ik heb een functie die helemaal vanboven moet staan in pagina doordat er een header(location) in de functie zit.
Nu zou ik graag die $error variable mooi tussen men form willen hebben die verder onderaan de pagina staat. zonder global te maken als het kan ik dacht aan return false en dan aan het form
of ben ik helemaal de mist aan het ingaan?
- 1 return false, null of iets anders wat een failure aanduidt en laat de applicatie beslissen wat de foutmelding wordt.
- gooi een exception en laat de applicatie de exception opvangen en afhandelen zoals hij wilt (bijv. door message te loggen, melding te tonen, andere melding te tonen of gewoon helemaal niks)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
function setUser($name, $username, $email, $password)
{
$q1 = query("SELECT email FROM users WHERE email = '".escape($email)."'");
$message = numrows($q);
$q = query("INSERT INTO users (name, username, email ,password)
VALUES ('".escape($name)."', '".escape($username)."', '".escape($email)."', '".escape(md5($password))."')");
if($q)
{
header('location:login.php');
} else {
sqlError();
}
return $message;
}
?>
function setUser($name, $username, $email, $password)
{
$q1 = query("SELECT email FROM users WHERE email = '".escape($email)."'");
$message = numrows($q);
$q = query("INSERT INTO users (name, username, email ,password)
VALUES ('".escape($name)."', '".escape($username)."', '".escape($email)."', '".escape(md5($password))."')");
if($q)
{
header('location:login.php');
} else {
sqlError();
}
return $message;
}
?>
tis die sqlerror() die ik wil hebben aan men form en niet bovenaan de page
die $message is probeersel.
Gewijzigd op 04/06/2013 20:03:00 door anthony de meulemeester
Het resultaat sla je op in een variabele. Die heb je alleen als het mislukte, anders had je de header ;).
in de page bovenaan
Code (php)
de functie
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
function setUser($name, $username, $email, $password)
{
$q1 = query("SELECT email FROM users WHERE email = '".escape($email)."'");
if(numrows($q1) == 0 )
{
$q = query("INSERT INTO users (name, username, email ,password)
VALUES ('".escape($name)."', '".escape($username)."', '".escape($email)."', '".escape(md5($password))."')");
}
if($q)
{
header('location:login.php');
} else {
return false;
}
}
?>
function setUser($name, $username, $email, $password)
{
$q1 = query("SELECT email FROM users WHERE email = '".escape($email)."'");
if(numrows($q1) == 0 )
{
$q = query("INSERT INTO users (name, username, email ,password)
VALUES ('".escape($name)."', '".escape($username)."', '".escape($email)."', '".escape(md5($password))."')");
}
if($q)
{
header('location:login.php');
} else {
return false;
}
}
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
// de $_SERVER is goed, maar wat wil je met $_POST['register']? Alleen bestaan of
// ook nog eens gevuld zijn?
if(($_SERVER['REQUEST_METHOD'] == "POST") && ($_POST['register']))
{
// hier voer je dus de functie uit. Deze zal (waarschijnlijk) lukken
setUser($_POST['name'], $_POST['username'], $_POST['email'], $_POST['password']);
// hier voer je nogmaals de functie uit, maar nu zonder parameters. En zal dus
// false zijn....
if(setuser() == false)
{
$error = "foutje in de mail";
}
}
?>
// de $_SERVER is goed, maar wat wil je met $_POST['register']? Alleen bestaan of
// ook nog eens gevuld zijn?
if(($_SERVER['REQUEST_METHOD'] == "POST") && ($_POST['register']))
{
// hier voer je dus de functie uit. Deze zal (waarschijnlijk) lukken
setUser($_POST['name'], $_POST['username'], $_POST['email'], $_POST['password']);
// hier voer je nogmaals de functie uit, maar nu zonder parameters. En zal dus
// false zijn....
if(setuser() == false)
{
$error = "foutje in de mail";
}
}
?>
Doe het eens zo:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
// er moet gepost zijn én alle dingen moeten bestaan
if(($_SERVER['REQUEST_METHOD'] == "POST") && isset($_POST['name'], $_POST['username'], $_POST['email'], $_POST['password']))
{
// hier voer je dus de functie uit.
$resultaat_van_functie = setUser($_POST['name'], $_POST['username'], $_POST['email'], $_POST['password']);
// $resultaat bevat dus óf een false, of een ... header en dan kom je hier dus
// niet. Dat moet anders. De header moet je daar vervangen door 'return true;'
// kijk naar het resultaat van de functie
// is deze fout?
if($resultaat_van_functie == false)
{
$error = "Foutje in de mail.";
}
else
{
header('location: login.php');
}
}
?>
// er moet gepost zijn én alle dingen moeten bestaan
if(($_SERVER['REQUEST_METHOD'] == "POST") && isset($_POST['name'], $_POST['username'], $_POST['email'], $_POST['password']))
{
// hier voer je dus de functie uit.
$resultaat_van_functie = setUser($_POST['name'], $_POST['username'], $_POST['email'], $_POST['password']);
// $resultaat bevat dus óf een false, of een ... header en dan kom je hier dus
// niet. Dat moet anders. De header moet je daar vervangen door 'return true;'
// kijk naar het resultaat van de functie
// is deze fout?
if($resultaat_van_functie == false)
{
$error = "Foutje in de mail.";
}
else
{
header('location: login.php');
}
}
?>
Je maakt een aantal verkeerde veronderstellingen
Anthony de meulemeester op 04/06/2013 19:34:05:
... maar ik heb een functie die helemaal vanboven moet staan in pagina doordat er een header(location) in de functie zit.
Klopt niet. Een functie-definitie mag gelijk waar staan. Dat maakt niets uit.
Anthony de meulemeester op 04/06/2013 19:34:05:
Nu zou ik graag die $error variable mooi tussen men form willen ... zonder global
Okay, daar bestaat iets anders voor; wat daar wel voor ontworpen is: passing by reference.
Daar is het specifiek de bedoeling dat een functie een variabele van buitenuit krijgt, en dat die functie die variabele kan aanpassen.
Dat gaat bv. zo:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
$my_error = "";
setUser($name, $my_error); // functie aanroepen, zonder &
echo '<form>... fouten: '. $my_error .'</form>';
function setUser($name, &$error) { // de & duidt aan: passing by reference
// hier gebeurt van alles ...
$error = 'Hello World!';
}
?>
$my_error = "";
setUser($name, $my_error); // functie aanroepen, zonder &
echo '<form>... fouten: '. $my_error .'</form>';
function setUser($name, &$error) { // de & duidt aan: passing by reference
// hier gebeurt van alles ...
$error = 'Hello World!';
}
?>
---
Anthony de meulemeester op 04/06/2013 21:39:21:
...
Code (php)
1
2
3
4
5
2
3
4
5
<?php
...
setUser($_POST['name'],$_POST['username'], $_POST['email'], $_POST['password']);
if(setuser() == false) {...}
?>
...
setUser($_POST['name'],$_POST['username'], $_POST['email'], $_POST['password']);
if(setuser() == false) {...}
?>
Dat is toch ook maar heel vreemd. Je voert die functie twee keer uit.
Wat ik verwacht, is iets als
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
...
$okay = setUser($_POST['name'],$_POST['username'], $_POST['email'], $_POST['password']);
if($okay == false) {...}
...
?>
...
$okay = setUser($_POST['name'],$_POST['username'], $_POST['email'], $_POST['password']);
if($okay == false) {...}
...
?>