Avatar billede koch Nybegynder
30. marts 2005 - 18:43 Der er 13 kommentarer og
1 løsning

Skal bruge en værdi fra en function

Jeg skal bruge følgende på flere sider:

$antal=mysql_result(mysql_query('SELECT COUNT(*) FROM carlist'), 0);

Derfor havde jeg tænkt at lægge det i en extern fil og så vha. require("extern_fil.php");

I den eksterne fil ville jeg så skrive

function antal_biler(){
$antal=mysql_result(mysql_query('SELECT COUNT(*) FROM carlist'), 0);
return $antal;
}

og på selve siden vil jeg gerne have fat i $antal. Men det får jeg ikke! Kan jeg ikke få fat i  $antal udenfor funktionen?
Avatar billede bromer Nybegynder
30. marts 2005 - 19:11 #1
Variabler defineret inde i en funktion kan kun bruges i funktionen. Din metode er fin nok, du skal bare ikke pakke det ind i en funktion, ellers skal du også kalde din funktion. 3 hurtige løsninger der alle gør at $antal indeholder antallet af rækker i carlist efter at filen er inkluderet.

--------- extern_fil.php version 1 -----------
$antal=mysql_result(mysql_query('SELECT COUNT(*) FROM carlist'), 0);
----------------------------------------------


--------- extern_fil.php version 2 -----------
function antal_biler(){
$antal=mysql_result(mysql_query('SELECT COUNT(*) FROM carlist'), 0);
return $antal;
}
$antal = antal_biler();
----------------------------------------------

--------- extern_fil.php version 2 -----------
$antal = 0;
function antal_biler(&$antal){
  $antal=mysql_result(mysql_query('SELECT COUNT(*) FROM carlist'), 0);
}
----------------------------------------------

Den første er nok den jeg ville foretrække da den bare gør hvad den skal, men hvis du har brug for at beregne antallet senere - for eksempel hvis du tilføjer/sletter fra tabellen, kan det være meget rart at have det defineret i en funktion.
Avatar billede koch Nybegynder
30. marts 2005 - 19:21 #2
Smart! Jeg har forsøgt med version 1, så skal jeg så ikke bare
require("extern_fil.php");
opret_forb(); //opretter forbindelse og vælger database
echo("$antal");

Men jeg får ikke værdien!
Avatar billede bromer Nybegynder
30. marts 2005 - 19:29 #3
Det er jo klart idet du ikke har databaseadgangen før du laver opret_forb(); Prøv med

opret_forb(); //opretter forbindelse og vælger database
equire("extern_fil.php");
echo("$antal");
Avatar billede koch Nybegynder
30. marts 2005 - 19:36 #4
Så det går ikke at $antal og opret_forb(); funktionen ligger i samme fil i mit tilfælde?
Fik det til at virke med

equire("extern_fil.php");
opret_forb(); //opretter forbindelse og vælger database
equire("en_anden_extern_fil.php"); //hvor $antal 'funktionen' er placeret i
echo("$antal");

er det 'måden' at gøre det på?
Avatar billede bromer Nybegynder
30. marts 2005 - 20:24 #5
Du kan godt have funktionen i samme fil pointen er bare at opret_forb() skal kaldes før du kører funktionen der finder antallet af biler.
Avatar billede koch Nybegynder
30. marts 2005 - 22:23 #6
Hmmm... Jeg forestiller mig netop at dette er tilfældet med

require("extern_fil.php");//heri er opret_forb(); defineret og $antal funktionen
opret_forb(); //opretter forbindelse og vælger database
echo("$antal");


hvis jeg gør såden her
opret_forb(); //opretter forbindelse og vælger database
equire("extern_fil.php");
echo("$antal");

så kan jeg jo ikke oprette forbindelse idet opret_forb(); ligger deri!

Måske er det mig der lige misser noget!
Avatar billede bromer Nybegynder
30. marts 2005 - 22:25 #7
du misser lidt. Din extern_fil.php bør se nogenlunde sådan ud:

function opret_forb() {
// gør hvad du nu gør derinde
}
// Her bliver database adgangen oprettet.. så kan vi finde antallet
opret_forb();
$antal=mysql_result(mysql_query('SELECT COUNT(*) FROM carlist'), 0);


i filer der inkluderer denne fil kan du så bare lave en
echo $antal;
Avatar billede koch Nybegynder
30. marts 2005 - 22:55 #8
Aha... Nu er den der vist.

Dvs. at alle funktionerne i den eksterne fil 'evalueres' inden værdierne vises på min side, så det nytter ikke noget at jeg har defineret en funktion i extern_fil.php som skal bruge en værdi fra min almindelige side(index.php eller hvad det nu måtte være).
Avatar billede bromer Nybegynder
30. marts 2005 - 23:13 #9
Sådan kan du vist ikke hetl sige sige det. Jeg skriver "vist" fordi jeg ikke forstår dig 100%. Hvis du defineret en $var = "terapi" og du gerne vil bruge den i en funktion du definerer _under_ din variable-definition skal du gøre følgende:

function somefunc() {
global $var; // Nu er $var tilgængelig i denne funktion
}

hvis du ikke har global linien har funktionen ikke adgang til variablen. Grunden til at du skulle "evaluere" din opret_forb() funktion var udelukkende at den oprettede en forbindelse til din database. koden inde i din funktion bliver jo ikke udført før funktionen bliver kaldt første gang. Derfor var det vigtigt at din funktion blev kaldt før du brugte database. Idet din definition af $antal jo benytter databasen ved vi altså at du skal køre opret_forb() før du kan beregne $antal. Da vi samtidig skal definere en funktion før vi kan bruge den står vi med den resulterende rækkefølge

1. Definition af funktionen opret_forb()
2. Kørsel af opret_forb()
3. Beregning af $antal
Avatar billede koch Nybegynder
30. marts 2005 - 23:27 #10
Helt sikkert, god forklaring! Med mine ord(det hjælper lige med forståelsen at sætte egne ord på!)
Problemet var at der ikke var adgang til databasen til at finde værdien $antal i extern_fil.php inden jeg bad om $antal i min index.php fil?
Avatar billede koch Nybegynder
30. marts 2005 - 23:35 #11
Min pointe er at det ikke var nok at jeg kaldte  opret_forb() i min index.php da det er i extern_fil.php at $antal beregnes...
Avatar billede bromer Nybegynder
30. marts 2005 - 23:38 #12
korrekt
Avatar billede koch Nybegynder
30. marts 2005 - 23:39 #13
FEDT! Mange tak for hjælpen, tålmodigheden og de gode forklaringer, en stor hjælp :)
Avatar billede bromer Nybegynder
30. marts 2005 - 23:42 #14
det var så lidt
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