$variable in een functie hergebruiken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Anthony de meulemeester

anthony de meulemeester

04/06/2013 19:34:05
Quote Anchor link
hey,

even een voorbeeld

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
function voorbeeld()
{

    $error = "opgepast het is glad";
    
    return $error;
}

?>


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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if(voorbeeld()) == false )
{

  print " opgepast het is glad";
}

?>


of ben ik helemaal de mist aan het ingaan?
 
PHP hulp

PHP hulp

23/12/2024 05:24:48
 
Wouter J

Wouter J

04/06/2013 19:45:50
Quote Anchor link
De functie weet niet hoe het afgehandeld moet worden en "mag" dat dus ook niet bepalen. Misschien wil ik het wel helemaal niet printen, maar wil ik het loggen in een bestand. Ik weet niet wat voorbeeld precies is ('t is altijd handig echte voorbeelden te gebruiken), maar je hebt naar mijn mening 2 opties:
- 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)
 
Anthony de meulemeester

anthony de meulemeester

04/06/2013 20:01:49
Quote Anchor link
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
<?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;
    }

?>

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
 
Eddy E

Eddy E

04/06/2013 20:30:11
Quote Anchor link
Bovenaan de pagina waarin je deze functie gebruikt roep je deze functie (setUser) aan.
Het resultaat sla je op in een variabele. Die heb je alleen als het mislukte, anders had je de header ;).
 
Anthony de meulemeester

anthony de meulemeester

04/06/2013 21:39:21
Quote Anchor link
ik heb dit nu en het werkt maar is het wel correct of kan het beter?

in de page bovenaan

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
if(($_SERVER['REQUEST_METHOD'] == "POST") && ($_POST['register']))
        {

            setUser($_POST['name'],$_POST['username'], $_POST['email'], $_POST['password']);
            
            if(setuser() == false)
            {

                $error = "foutje in de mail";
            }
        }
  
?>


de functie
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
<?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;
            }
    }

?>
 
Eddy E

Eddy E

04/06/2013 21:44:07
Quote Anchor link
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
<?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";
        }
    }

?>


Doe het eens zo:
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
<?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');
        }
    }

?>
 
Kris Peeters

Kris Peeters

05/06/2013 12:36:39
Quote Anchor link
(ik zal grotendeels negeren in welke richting het topic geëvolueerd is)
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)
PHP script in nieuw venster Selecteer het PHP script
1
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!';
}

?>


---

Anthony de meulemeester op 04/06/2013 21:39:21:
...
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
...
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
...
$okay = setUser($_POST['name'],$_POST['username'], $_POST['email'], $_POST['password']);
if($okay == false) {...}
...

?>
 



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.