Avatar billede Slettet bruger
11. februar 2007 - 12:37 Der er 4 kommentarer

Returnering af flere variabler

Hej eksperter.

Jeg har et flash-produkt, der vha. remoting-komponenten henter en portion poster fra en database. SQL-forespørgslen har en LIMIT tilknyttet, da resultaterne skal være sideopdelt.
$start og $slut beregnes på baggrund af en overført side-parameter, der blot angiver 0 for de første 32, 1 for de næste 32 etc.

Koden er som følger:
$querystreng = "SELECT bruger.navne, element.titel, element.uploaddato, element.antalstemmer FROM element, bruger WHERE element.forfatter_id = bruger.bruger_id ORDER BY element_id DESC LIMIT ".$start.", ".$slut;
$sMessage = mysql_query($querystreng);
return $sMessage;

Resultaterne returneres fint. MEN: jeg vil også gerne returnere, hvor mange poster der totalt findes - og således beregne, hvor mange sider der er.


Men jeg satte jo en LIMIT på... Hmm, jamen hvis jeg laver følgende forespørgsel før return-kommandoen:

$totaleantalposterquery = mysql_query("SELECT element.element_id FROM element, bruger WHERE element.forfatter_id = bruger.bruger_id ORDER BY element_id");
$totaleantalposter = mysql_num_rows($totaleantalposterquery);


Nuvel: Nu har jeg 2 resultater: et array med 32 resultater og en variabel, der angiver det totale antal.

Men jeg kan tilsyneladende ikke skrive:
return $sMessage, $totaleantalposter

Hvad burde jeg gøre?
Avatar billede michael_stim Ekspert
11. februar 2007 - 12:50 #1
En funktion kan kun returnere én variabel. Det du kan gøre er at returnere et array.
Eller:
$tilbage="";
$tilbage.="medd. ".$sMessage."<br>";
$tilbage.="Antal post. ".$totalantalposter;
return $tilbage;

Og så echo'e funktionen på den side den skal vises.
Avatar billede erikjacobsen Ekspert
11. februar 2007 - 13:06 #2
Et simpelt eksempel men brug af array:

<?

  function to() {
    return Array(1,"kurt");
  }
 
  list($antal,$navn) = to();
 
  print "$antal $navn"

?>
Avatar billede Slettet bruger
11. februar 2007 - 14:18 #3
Ah, nu har jeg fundet ud af det - tak, Michael.

Som nævnt, anvender jeg remoting-komponenten - og resultaterne returneres i et array.

I flash refereres normat til resultatet på denne måde:

thumbnail.titel = re.result.getItemAt(looptaeller).titel;
thumbnail.soegeord = re.result.getItemAt(looptaeller).soegeord;

Umiddelbart kunne jeg ikke anvende din kodeløsning - men var ikke klar over at man kun kan returnere én værdi.
Derfor har jeg løst det ved at oprette et nyt array - og sætte mit SQL-query-array indeni dette array - efterfulgt af $antalposter... på denne måde:

$tilbagearray = array($sMessage, $antalposter);
return $tilbagearray;

I flash refereres nu blot på denne måde i stedet:
thumbnail.titel = re.result[0].getItemAt(looptaeller).titel;
thumbnail.soegeord = re.result[0].getItemAt(looptaeller).soegeord;

Antallet af poster vises sådan: re.result[1]

Perfeeekt. Tak - og smid endelig svar.
Avatar billede michael_stim Ekspert
11. februar 2007 - 14:32 #4
Behold du dem bare selv. Point kan ikke give mig mad på bordet ;o)
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