Avatar billede xbobby Nybegynder
09. marts 2004 - 12:02 Der er 15 kommentarer og
1 løsning

Retunerer værdier fra funktion

Jeg har en php side som jeg kalder for quiz.php, hvorfra ”function fraDataBasen($Omgang)”.
Mit problem er hvordan jeg får reuneret værdierne af variablerne $sv1 og $sv2 tilbage til det sted hvor fuction bliver kaldt fra?

Hvordan gør jeg det?


<?php
function fraDataBasen($Omgang)
{
$conn = getDBConnection();
       
    $sp = mysql_query("select rigtigt, forkert from 4_quiz where id = ($Omgang)");

        if (@mysql_num_rows($sp) != 0)
        {
        $row = @mysql_fetch_array($sp);
           
        $sv1 = "$row[rigtigt]";
        $sv2 = "$row[forkert]";
        }
        else
        {
        $sAsk = '<center><font color="red">Ingen spørgsmål at vise.</font></center>';
        print $sAsk;
        }
}   
?>
Avatar billede dennismp Nybegynder
09. marts 2004 - 12:04 #1
return array($sv1,$sv2);
Avatar billede erikjacobsen Ekspert
09. marts 2004 - 12:07 #2
Du skal dog overveje hvad der sker i tilfælde af fejl. Er det rimeligt at det
er denne funktion, der skal udskrive en rød besked, eller er det på det sted,
den kaldes, der skal tages stilling til udformning af fejlbesked. Du er igang
med at blande præsentation og funktionalitet sammen ;)
Avatar billede xbobby Nybegynder
09. marts 2004 - 15:19 #3
Hej dennismp
Jeg kan ikke få din løsning til at fungerer - kan du?

Jeg har vedlagt en mere enkel måde at checke om det virker - lad mig høre hvad det er som jeg mangler?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
    <title>Untitled</title>
</head>

<body>
<?php
function kaldFunktionen()
{
$sv1 = 2;
$sv2 = 2;
print "v&aelig;rdien sv1 i Funktionen = $sv1 <p>";
print "v&aelig;rdien sv2 i Funktionen = $sv2 <p>";
return array($sv1, $sv2);
}
$sv1 = 1;
$sv2 = 1;
Print "sv1 f&oslash;r funktion = $sv1<p>";
Print "sv2 f&oslash;r funktion = $sv2<p>";
kaldFunktionen();
Print "sv1 efter funktion = $sv1<p>";
Print "sv2 efter funktion = $sv2<p>";
?>

</body>
</html>
Avatar billede xbobby Nybegynder
09. marts 2004 - 15:22 #4
Til Erik Jacopsen
Du har fulstændigt ret, for med en return, vil man aldrig nå ned til fejlkoden hvis ikke der kan hentes data fra databasen - har du noget forslag til hvordan man ellers kan gøre det?
Avatar billede erikjacobsen Ekspert
09. marts 2004 - 15:25 #5
$sv=kaldFunktionen();
Print "sv1 efter funktion = $sv[0]<p>";
Print "sv2 efter funktion = $sv[1]<p>";

Mht fejlkoden kan du returnerer en værdi, der fortæller at noget går galt.
Men det kommer an på hvad du vil.
Avatar billede dennismp Nybegynder
09. marts 2004 - 15:49 #6
<?php
function kaldFunktionen()
{
$sv1 = 2;
$sv2 = 2;
print "v&aelig;rdien sv1 i Funktionen = $sv1 <p>";
print "v&aelig;rdien sv2 i Funktionen = $sv2 <p>";
return array($sv1, $sv2);
}
$sv1 = 1;
$sv2 = 1;
Print "sv1 f&oslash;r funktion = $sv1<p>";
Print "sv2 f&oslash;r funktion = $sv2<p>";
list($sv1,$sv2) = kaldFunktionen();
Print "sv1 efter funktion = $sv1<p>";
Print "sv2 efter funktion = $sv2<p>";
?>
Avatar billede xbobby Nybegynder
09. marts 2004 - 17:17 #7
Til dennismp - nu fungerer det som det skal :-)
Så der er point på vej til dig - tak for hjælpen det havde jeg aldrig luret
Avatar billede xbobby Nybegynder
09. marts 2004 - 17:18 #8
Til Erik Jacopsen

Din løsning er også ganske god – så nu har jeg både til gården og gaden :-)

Angående fejlkoden ville jeg gerne have at denne function fraDataBasen($Omgang) bliver kaldt op fra en fil der hedder quiz.php, som så kalder en $conn = getDBConnection(); som er kontakt scriptet til min database. Hvis forbindelsen ikke bliver oprettet eller andet går galt, så ønsker jeg en rød tekst der gør opmærksom på det.

Funktioner fraDataBasen($Omgang) og $conn = getDBConnection ligger på en anden php side end quiz.php, af den grund at quiz.php i forvejen er omfangsrig, da den styrer 4 forskellige typer quizzer.

fraDataBasen($Omgang) bliver også ganske omfangsrig da den skal hente data fra databasen på fire forskellige måder alt efter hvilken type quiz der er tale om.

Så jeg er interesseret i at jeg i funktionen fraDataBasen($Omgang) både er i stand til at kalde databasen getDBConnection(); hente data fra tabellerne, og returnerer værdien fra 2 variabler til det sted som fraDataBasen($Omgang) bliver kaldt fra i filen quiz.php.

Det var tanken :-)
Avatar billede erikjacobsen Ekspert
09. marts 2004 - 18:29 #9
Jah, du skal gøres opmærksom på noget er galt. Hvad med

  function f() {
    if (alteriorden) {
        return array(...);
    } else {
        return false;
    }
  }

Sådan fungere mysql_fetch_row() fx.
Avatar billede xbobby Nybegynder
09. marts 2004 - 21:46 #10
Jeg har prøvet at sætte mine koder ind i den skabeloner, som du lige har angivet, men jeg må have misforstået noget, for umildbart ser det ud som om at hvis der ikke er noget i databasen, så vil den aldrig nå sætningen der fortæller at der er noget der er galt, fordi den vil vende tilbage til der hvor functionen blev kaldt fra med sætningen return array($sv1, $sv2); Så jeg må have misforstået det du skriver til mig. Jeg smider lige koden på:

  function fraDataBasen($Omgang)
  {
  $conn = getDBConnection();
  $sp = mysql_query("select rigtigt, forkert from 4_quiz where id = ($Omgang)");
    if (@mysql_num_rows($sp) != 0)
    {
            $row = @mysql_fetch_array($sp);
            $sv1 = "$row[rigtigt]";
            $sv2 = "$row[forkert]";
            return array($sv1, $sv2);
    }
    else
    {
    $sAsk = '<center><font color="red">Ingen spørgsmål at vise.</font></center>';
    print $sAsk;
    return false;
    }
  }
Avatar billede erikjacobsen Ekspert
10. marts 2004 - 00:26 #11
Jeg ville droppe udskriften i funktionen, og lade det ske, der hvor funktionen kaldes.
Og så er det bedre at skrive
  $sv1 = $row['rigtigt'];
og man skal nok sige mysql_free_result for god ordens skyld. Ellers er det da som
jeg havde tænkt mig. Så bruger du funktionen på samme måde som du ellers bruger
mysql_fetch_row.
Avatar billede xbobby Nybegynder
10. marts 2004 - 11:19 #12
Når jeg tænker over det - er problemet så ikke - at fejlmedelsen kommer til sidst i if sætningen i stedet for først, hvad mener du om denne omvendte løsning?

<?php
    function fraDataBasen($Omgang)
{
        $conn = getDBConnection();
       
        $sp = mysql_query("select rigtigt, forkert from 4_quiz where id = ($Omgang)");

        if (@mysql_num_rows($sp) == 0)
        {
        $sv1 = "<font color='red'>Mangler ord <p>";
        $sv2 = "fra databasen</font>";
        return array($sv1, $sv2);
        }
        else
        {
        $row = @mysql_fetch_array($sp);
       
        $sv1 = $row[rigtigt];
        $sv2 = $row[forkert];
        return array($sv1, $sv2);
        }
    }
?>
Avatar billede erikjacobsen Ekspert
10. marts 2004 - 12:07 #13
Jeg havde tænkt på denne (hvor funktionen ikke selv udskriver noget, men returnere false)

  if ($v=fraDataBasen(....)) {
    print "$v[0] ... $v[1]";
  } else {
    print "<font color='red'>Der er noget der mangler</font>";
  }
Avatar billede xbobby Nybegynder
10. marts 2004 - 12:16 #14
Jeg er egentligt godt tilfreds med den løsnings som jeg har fundet frem til, med jeres hjælp.

Men jeg syntes at jeg skylder dig nogen point, fordi der opstod et spørgsmål inde i spørgsmålet - hvad siger du til at jeg opretter et spørgsmål til dig, med henvisning til dette spørgsmål og så får du 30 point?
Avatar billede erikjacobsen Ekspert
10. marts 2004 - 12:17 #15
Nej tak, jeg samler ikke på point.
Avatar billede xbobby Nybegynder
10. marts 2004 - 13:53 #16
Tusind tak for hjælpen - det har været rigtigt godt - med dine gode INPUT :-)
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