09. marts 2004 - 12:02Der 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);
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 ;)
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?
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.
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; } }
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.
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)");
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?
Tusind tak for hjælpen - det har været rigtigt godt - med dine gode INPUT :-)
Synes godt om
Ny brugerNybegynder
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.