Avatar billede ostehamster Nybegynder
26. august 2003 - 23:20 Der er 12 kommentarer og
1 løsning

Sætte en variabel inde i en funktion?

Hejsa

Jeg har denne funktion:
function check_billed() {
    global $error_billedid, $felt_fejl;
      # Checker om der skal være billed, og om det er valgt et
    if (isset($_POST['billed']) and $_POST['billed'] == "j" and (!isset($_POST['billed_id']) or !is_numeric($_POST['billed_id']))) {
        # Hvis ikke, sætter fejlindikator og fejlmeddelelse
        $error_billedid = "<tr><td colspan=\"3\"><div class=\"menu-error\">Husk at vælge et billed</div></td></tr>";
        $felt_fejl = true;
    }
}

Hvis $_POST['billed'] == "j", og !is_numeric($_POST['billed_id'] er true, betyder det der er en fejl.

Hvis jeg inde i funktionen skriver "echo $error_billedid" virker det fint, men hvis jeg gør det udenfor funktionen, så er der ikke noget.

Hvis jeg så før funktionen skriver $error_billedid = "", så virker det.


Hvorfor?

mvh
Christoffer
Avatar billede tipsen Nybegynder
26. august 2003 - 23:23 #1
fordi du gør variablen error_billedid global i funktionen - dvs. den peger på den variabel der findes uden for funktionen - hvis den altså findes!
Avatar billede fangel Nybegynder
26. august 2003 - 23:23 #2
som du er inde på, skal de gøres globale!

derfor, prøv at sæt global $error_billedeid til sidst (man kan jo ikke lave en ikke eksisterende variabel global)

Morten
Avatar billede Slettet bruger
26. august 2003 - 23:28 #3
Jeg forstår ikke jeres (tipsen, dea_pg's) indlæg.

Så vidt jeg kan se burde følgende:

check_billed();
echo $error_billedid;

Da udskrive hans fejlstreng (forudsat at if betingelserne i funktionen er opfyldt).
Avatar billede Slettet bruger
26. august 2003 - 23:32 #4
Avatar billede ostehamster Nybegynder
26. august 2003 - 23:48 #5
Hmm, jeg fatter minus her

Jeg tror måske fejlen er et andet sted :(
Avatar billede tipsen Nybegynder
26. august 2003 - 23:50 #6
Jeg tager delvist fejl - ovenstående kode burde virke finde fra php v. 4.2.x, mens der tidligere har været en fejl som bevirkede at variablen skulle initialiseres globalt inden lokal brug i funktioner! Dvs. hvis du bruger en relativt gammel version af PHP er det muligt at du er nødt til at initialisere variablen som du selv har fundet ud af. Se evt: http://dk.php.net/manual/en/language.variables.scope.php hvor der er nogle gode bruger-kommentarer.
Avatar billede Slettet bruger
26. august 2003 - 23:51 #7
Det tror jeg også.
Avatar billede tipsen Nybegynder
26. august 2003 - 23:51 #8
Rettelse: "...burde virke fint fra..."
Avatar billede ostehamster Nybegynder
26. august 2003 - 23:52 #9
Doooooh, jeg havde lige glemt global i den funktion der skulle udskrive den. Og når jeg testede som det eksempel mercur8 lavede, så kaldte jeg ikke funktionen først :(

Men tak for hjælpen anyway :) Smidder i et svar?
Avatar billede Slettet bruger
27. august 2003 - 00:07 #10
Jeps.

Iøvrigt hvis du har lyst til at prøve at undgå de globale variable, kan du prøve en konstruktion ala:

<?
function check_billed(&$error_string) {
    # Checker om der skal være billed, og om det er valgt et
    if (isset($_POST['billed']) and $_POST['billed'] == "j" and (!isset($_POST['billed_id']) or !is_numeric($_POST['billed_id']))) {
        # Hvis ikke, sætter fejlindikator og fejlmeddelelse
        $error_string = "<tr><td colspan=\"3\"><div class=\"menu-error\">Husk at vælge et billed</div></td></tr>";
        return FALSE;
    }
    return TRUE;
}

$error_string = NULL;
echo !check_billed($error_string) ? $error_string : "alt ok";
?>

Overvej endvidere om du har brug for både en fejl streng og et fejl flag (som du gør nu - sætter 2 variable i tilfælde af en fejl). Det er muligt du har.

Læs iøvrigt: http://dk.php.net/manual/en/language.references.pass.php

Det er som oftest en god idé at undgå globale variable, idet de blandt andet "forurener" dit variablescope. Altså der kan bliver overlap mellem variabel navne osv.
Avatar billede tipsen Nybegynder
27. august 2003 - 00:08 #11
Derudover er det noget rod med alt den html-kode du har blandet ind i funktionen - det gør ikke funktionen særlig fleksibel.
Avatar billede ostehamster Nybegynder
27. august 2003 - 00:18 #12
mercur8 > Det ser umiddelbart smart ud, det vil jeg lige kigge nærmere på.

tipsen > Jeg ved det. Jeg burde have et kursus i programmrings disciplin :(
Jeg er ikke stjernen til at sætte op, samle i filer osv.
Avatar billede ostehamster Nybegynder
06. september 2003 - 21:47 #13
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester