Avatar billede Morten Nybegynder
30. marts 2004 - 23:13 Der er 15 kommentarer og
2 løsninger

returnere værdi fra function

Øv nu har jeg prøvet og prøvet.. og det er sikkert meet simpelt det jeg vil:

Jeg har i en database følgende kolonner:

TextID  Sprog1  Sprog2  Sprog2

Jeg vil så fra min side1.php kalde en funktion som henter den aktuelle tekststreng fra databasen og returnere den til side1.php

her er hvad jeg har prøvet med... :O(

side1.php:
<?php
  //hvor db_lang() er den text-id der skal hentes
  $text=db_lang(1);
  print $text;
?>

function db_lang($text_id) {
  //her ligger connection til DB og virker
  //$_SESSION["lang"] indeholder det valgte sprog

$sql = "SELECT `".$_SESSION["lang"]."` FROM `lang` WHERE `ID` = $text_id";

$result = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($result);
return $row;
}

Men ovenstående skriver Array og ikke det som står i sprog 1

Hvad er det jeg ikke fatter????
Avatar billede Morten Nybegynder
30. marts 2004 - 23:17 #1
forvirring...

Where `ID` - skal være WHERE `TextID`
og sådan er det også hos mig - sorry
Avatar billede olebole Juniormester
30. marts 2004 - 23:19 #2
<ole>

Som du fik at vide sidst:
  return $row["KOLONNE_NAVN"];

/mvh
</bole>
Avatar billede detox Nybegynder
30. marts 2004 - 23:20 #3
Fx:

function db_lang($text_id) {
  //her ligger connection til DB og virker
  //$_SESSION["lang"] indeholder det valgte sprog

$sql = "SELECT `".$_SESSION["lang"]."` FROM `lang` WHERE `TextID` = $text_id";

$result = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_row($result);
return $row[0];
}
Avatar billede olebole Juniormester
30. marts 2004 - 23:21 #4
I din $row ligger et array, der repræsenterer hele rækken. Du kalder et bestemt felt, ved at kalde med kolonnens navn  :)
Avatar billede detox Nybegynder
30. marts 2004 - 23:22 #5
En anden mulighed:

function db_lang($text_id) {
  //her ligger connection til DB og virker
  //$_SESSION["lang"] indeholder det valgte sprog

$sql = "SELECT `".$_SESSION["lang"]."` FROM `lang` WHERE `TextID` = $text_id";

$result = mysql_query($sql) or die(mysql_error());
return mysql_result($result,0);
}
Avatar billede Morten Nybegynder
30. marts 2004 - 23:22 #6
ja - undskyld jeg er fat-svag ;O))))

return $row[$_SESSION["lang"]];

og det virker - og jeg prøvede igår og da virkede det ikke ;O)

smid et svar..
Avatar billede Morten Nybegynder
30. marts 2004 - 23:24 #7
er der nogen fordel ved detox´s forslag - eller spare det "bare" et par liner???
Avatar billede Morten Nybegynder
30. marts 2004 - 23:25 #8
når i siger der i $row ligger hele rækken - så er det vel overflødigt at skrive

SELECT $_session....    SELECT * gør vel så det samme eller????
Avatar billede Morten Nybegynder
30. marts 2004 - 23:29 #9
og denne kan også "nedskrives" fandt jeg selv ud af hahahahahahahah

<?php
  print ($text=db_lang(2));
?>
Avatar billede detox Nybegynder
30. marts 2004 - 23:33 #10
Nej, hvis du specifikt spørger efter en (eller flere) kolonner, er det kun de kolonner der ligger i array'et. Så det vil bedst kunne svare sig at specifikere forespørgslen.
Hvis det bare drejer sig om én værdi der skal returneres foretrækker jeg: mysql_result().
Kan koges ned til:

function db_lang($text_id) {
return mysql_result(mysql_query("SELECT `".$_SESSION["lang"]."` FROM `lang` WHERE `TextID` = $text_id"),0);
}
echo db_lang(2);

eller bare:

echo mysql_result(mysql_query("SELECT `".$_SESSION["lang"]."` FROM `lang` WHERE `TextID` = $text_id"),0);
Avatar billede detox Nybegynder
30. marts 2004 - 23:37 #11
Den sidste skal selvfølgelig være:

echo mysql_result(mysql_query("SELECT `".$_SESSION["lang"]."` FROM `lang` WHERE `TextID`=2"),0);
Avatar billede olebole Juniormester
30. marts 2004 - 23:46 #12
Af de viste, er mysql_result() den langsommeste (dårligst performende).
De hurtigste er:
  $row = mysql_fetch_row($result);
  return $row[0];
... og:
  $row = mysql_fetch_array($result);
  return $row[0];
Men i dette tilfælde vil der ikke være nogen mærkbar forskel  :)
/mvh
Avatar billede Morten Nybegynder
30. marts 2004 - 23:58 #13
og jeres svar...
Avatar billede Morten Nybegynder
30. marts 2004 - 23:59 #14
return $row[0];

denne giver intet resultat....
Avatar billede Morten Nybegynder
31. marts 2004 - 00:00 #15
sorry  -  mig igen

skal jo også rette mysql_fetch til _array så virker den....
Avatar billede detox Nybegynder
31. marts 2004 - 00:03 #16
Ja, mysql_fetch_array() eller mysql_fetch_row()
Avatar billede olebole Juniormester
31. marts 2004 - 00:18 #17
Yups ... i 'gamle dage' returnerede mysql_fetch_array() et associativt array - altså et array, der kan kaldes med tekststrenge, der svarer til kolonnenavnene i tabellen.

Sådan virker mysql_fetch_assoc() i dag - mens mysql_fetch_array() både kan kaldes med kolonnenavn og med et tal-index: 0 for det første felt, 1 for det andet, 2 for det tredie, osv.

mysql_fetch_row() returnerer kun et tal-indexeret array.

Håber, det kan afklare forskellene lidt  :)
/mvh
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