Avatar billede -ulli- Nybegynder
18. oktober 2002 - 13:57 Der er 14 kommentarer og
1 løsning

funktioner bugger

Hej

Jeg har et par funktioner der bugger.. eller?

function putInBox($contents) {
  print("<table width=\"490\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n");
  print("<tr>\n");
  print("<td>\n");
  print("<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n");
  print("<tr>\n");
  print("<td width=\"60\">\n");
  print("<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n");
  print("<tr>");
  print("<td background=\"images/news_topminibox.gif\" width=\"20\" height=\"7\"></td>");
  print("<td background=\"images/news_topminibox.gif\" width=\"20\" height=\"7\"></td>");
  print("<td background=\"images/news_topminibox.gif\" width=\"20\" height=\"7\"></td>");
  print("</tr>\n");
  print("</table>\n");
  print("</td>\n");
  print("<td background=\"images/news_topbigbox.gif\" height=\"7\">\n");
  print("<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n");
  print("<tr>\n");
  print("<td width=\"*\"><img src=\"images/main_box_top_bg.jpg\" width=\"184\" height=\"7\"></td>");
  print("<td width=\"50\"><img src=\"images/news_topdots.gif\" width=\"50\" height=\"7\"></td>");
  print("</tr>\n");
  print("</table>\n");
  print("</td>\n");
  print("</tr>\n");
  print("</table>\n");
  print("</td>\n");
  print("</tr>\n");
  print("<tr>\n");
  print("<td height=\"5\"></td>\n");
  print("</tr>\n");
  print("<tr>\n");
  print("<td>\n");
  print("<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n");
  print("<tr>\n");
  print("<td class=\"fulltable\">\n");
  print("<table width=\"100%\" border=\"0\" cellspacing=\"5\" cellpadding=\"5\">\n");
  print("<tr>\n");
  print("<td bgcolor=\"#1F2430\" valign=\"top\">\n");
  print($contents);
  print("</td>\n");
  print("</tr>\n");
  print("</table>\n");
  print("</td>\n");
  print("</tr>\n");
  print("</table>\n");
  print("</td>\n");
  print("</tr>\n");
  print("<tr>\n");
  print("<td height=\"7\">\n");
  print("<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n");
  print("<tr>\n");
  print("<td width=\"7\"><img src=\"images/news_bottomcurve.gif\" width=\"7\" height=\"7\"></td>");
  print("<td background=\"images/news_bottombar.gif\" width=\"*\" class=\"right\"><img src=\"images/news_bottom_spare.gif\" width=\"1\" height=\"1\"></td>");
  print("</tr>\n");
  print("</table>\n");
  print("</td>\n");
  print("</tr>\n");
  print("</table>\n");
  print("<br>\n");
}

Denne funktion udskriver en "box" som jeg bruger til at have indhold i.

Den kaldes fx på en side via:

$contents = "noget indhold her osv";

putInBox($contents);

Dette virker fint nok..

Jeg prøver så at kalde en anden funktion:

function test() {
  for ($l = 0; $l < 10; $l++) {
    $contents = $l;
    #første loop
    return $contents;
  }
  #sidste loop
}

Blot en test funktion til at prøve putInBox(test());

Men! Når jeg kalder test() i putInBox(), så bliver det kun skrevet 1 gang. Hvis return $contents står under #første loop, så skriver den 0 ud, men står den under #sidste loop, skriver den 9 ud.

Det jeg vil have den til er at skrive 0-1-2-..-9 ud.

Hvad gør jeg forkert?
Avatar billede nemeier Nybegynder
18. oktober 2002 - 14:08 #1
du kalder return $contents inde i det loop;
herefter laves et exit;

prøv:
function test()
{
  $s = "";
  for ($i=0;$i<10;$i++)
  {
    $s = $s + $i + "<br>":
  }
  return $s;
}
Det brude hjælpe
Avatar billede kmx Nybegynder
18. oktober 2002 - 14:08 #2
$contents .= $i

eller kald funktionen HVER gang
Avatar billede kmx Nybegynder
18. oktober 2002 - 14:09 #3
$contents .= $i
svarer til
$contents = $contents + $i
Avatar billede kmx Nybegynder
18. oktober 2002 - 14:10 #4
svar
Avatar billede avminarm Juniormester
18. oktober 2002 - 14:10 #5
tror du ikke du skal have putInBox ind i test? f.eks test(putInBox($content));

blot et skud!
Avatar billede nemeier Nybegynder
18. oktober 2002 - 14:12 #6
kmx --> fejlen ligger i brugen af 'return'
Avatar billede nemeier Nybegynder
18. oktober 2002 - 14:14 #7
hvis man vil bruge contens direkte skal man lige huske at skrive
GLOBAL $contens;
Avatar billede -ulli- Nybegynder
18. oktober 2002 - 14:16 #8
nemeier: hvor skal jeg skrive GLOBAL $contents; henne?
Avatar billede kmx Nybegynder
18. oktober 2002 - 14:16 #9
Det er modtaget og forstået...
Så trækker jeg bare mit svar tilbage igen :o)
Avatar billede -ulli- Nybegynder
18. oktober 2002 - 14:55 #10
nemeier: hvis jeg bruger den funktion du har skrevet der giver det en fejl.

Fatal error: Call to undefined function: test()
Avatar billede -ulli- Nybegynder
18. oktober 2002 - 15:01 #11
aha - fejlen var : i stedet for ;

ændrer jeg det, giver det blot det samme som min egen funktion..
Avatar billede nemeier Nybegynder
18. oktober 2002 - 15:51 #12
Prøv lige at sætte din funktion ind, i min funktion står return efter at FOR loopet er stoppet, i din oprindelige står return inden i FOR loopet, hvilket gav problemet
Avatar billede nemeier Nybegynder
18. oktober 2002 - 15:56 #13
function test()
{
  $s = "";
  for ($i=0;$i<10;$i++)
  {
    $s = ($s ? $s."-" : "" ) + $i;
  }
  return $s;
}

Nu burde den returnere '0-1-2-3-4-5-6-7-8-9'
Avatar billede -ulli- Nybegynder
18. oktober 2002 - 16:01 #14
hmm

den returnerer 45
Avatar billede nemeier Nybegynder
18. oktober 2002 - 16:41 #15
<?PHP
function test()
{
  $s = "";
  for ($i=0;$i<10;$i++)
  {
    $s = (strlen($s) ? $s."-" : "" ).$i;
  }
  return $s;
}
print test();
?>

nu virker den, jeg har sågar testet den og lavet en lille ekstra rettelse (strlen), ellers ville værdien 0- ikke blive taget med.

Forresten 45 er summen af tallerne
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