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.
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");
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");
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!
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;
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).
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
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?
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.