Avatar billede 13thsky Nybegynder
10. februar 2004 - 00:49 Der er 10 kommentarer og
2 løsninger

find fejlen.

Hvorfor virker dette script ikke når jeg trykker frem til "August" eller "Oktober" ?


<html>
<head>
<title>LA</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>

<body bgcolor="#666666" link="#000000" vlink="#000000" alink="#000000" leftmargin="0" topmargin="10" marginwidth="0" marginheight="0">
<?
if($maaned=="")
{
$maaned=date("m");
}
if($aar=="")
{
$aar=date("Y");
}
switch ($maaned)
{
case 01:
    $dennemaaned="Januar";
    $naestemaaned="Feb";
    $forrigemaaned="Dec";
    break;
case 02:
    $dennemaaned="Februar";
    $naestemaaned="Mar";
    $forrigemaaned="Jan";
    break;
case 03:
    $dennemaaned="Marts";
    $naestemaaned="Apr";
    $forrigemaaned="Feb";
    break;
case 04:
    $dennemaaned="April";
    $naestemaaned="Maj";
    $forrigemaaned="Mar";
    break;
case 05:
    $dennemaaned="Maj";
    $naestemaaned="Jun";
    $forrigemaaned="Apr";
    break;
case 06:
    $dennemaaned="Juni";
    $naestemaaned="Jul";
    $forrigemaaned="Maj";
    break;
case 07:
    $dennemaaned="Juli";
    $naestemaaned="Aug";
    $forrigemaaned="Jun";
    break;
case 08:
    $dennemaaned="August";
    $naestemaaned="Sep";
    $forrigemaaned="Jul";
    break;
case 09:
    $dennemaaned="September";
    $naestemaaned="Okt";
    $forrigemaaned="Aug";
    break;
case 10:
    $dennemaaned="Oktober";
    $naestemaaned="Nov";
    $forrigemaaned="Sep";
    break;
case 11:
    $dennemaaned="November";
    $naestemaaned="Dec";
    $forrigemaaned="Okt";
    break;
case 12:
    $dennemaaned="December";
    $naestemaaned="Jan";
    $forrigemaaned="Nov";
    break;
}
?>
<p><a href="<? $PHP_SELF; ?>?maaned=%0A<?
    if($maaned==01)
        {
        echo "12";
        }
    else if($maaned==12 || $maaned==11)
        {
        echo $maaned-1;
        }
    else
        {
        echo "0".($maaned-1);
        }
    ?>
    &aar=
    <?
    if($maaned=="01")
        {
        echo $aar-1;
        }
    else
        {
        echo $aar;
        }
        ?>
        " title="Vis forrige måned">&lt;&lt;
  <? echo $forrigemaaned; ?></a> <font color="#ffffff"><? echo "  [ ".$dennemaaned." - ".$aar." ]  "; ?></font>
  <a href="<? $PHP_SELF; ?>?maaned=
  <?
  if($maaned==12)
      {
      echo "01";
    }
    else if($maaned==9 || $maaned==10 || $maaned==11)
    {
    echo $maaned+1;
    }
    else
    {
    echo "0".($maaned+1);
    }
    ?>
    &aar=
    <?
    if($maaned=="12")
    {
    echo $aar+1;
    }
    else
    {
    echo $aar;
    }
    ?>" title="Vis næste måned"><? echo $naestemaaned; ?>
  &gt;&gt;</a></p>
</body>
</html>
Avatar billede muddi Praktikant
10. februar 2004 - 01:40 #1
Hvad sker der? Hvilken fejl får du?
Avatar billede muddi Praktikant
10. februar 2004 - 01:43 #2
Aha, det er sandsynligvis fordi din streng i adresse-feltet overskrider grænsen på 256 tegn...
Avatar billede muddi Praktikant
10. februar 2004 - 03:00 #3
Fejlen ligger her, men jeg kan ikke lige gennemskue hvorfor den fejler... Det ligner faktisk mest en fejl i PHP.

switch ($maaned)
{
case "01": // Der skal "" omkring!
    $dennemaaned="Januar";
    $naestemaaned="Feb";
    $forrigemaaned="Dec";
    break;
case "02":
    $dennemaaned="Februar";
    $naestemaaned="Mar";
    $forrigemaaned="Jan";
    break;
case "03":
    $dennemaaned="Marts";
    $naestemaaned="Apr";
    $forrigemaaned="Feb";
    break;
case "04":
    $dennemaaned="April";
    $naestemaaned="Maj";
    $forrigemaaned="Mar";
    break;
case "05":
    $dennemaaned="Maj";
    $naestemaaned="Jun";
    $forrigemaaned="Apr";
    break;
case "06":
    $dennemaaned="Juni";
    $naestemaaned="Jul";
    $forrigemaaned="Maj";
    break;
case "07":
    $dennemaaned="Juli";
    $naestemaaned="Aug";
    $forrigemaaned="Jun";
    break;
case "08":
    $dennemaaned="August";
    $naestemaaned="Sep";
    $forrigemaaned="Jul";
    break;
case "09":
    $dennemaaned="September";
    $naestemaaned="Okt";
    $forrigemaaned="Aug";
    break;
case "10":
    $dennemaaned="Oktober";
    $naestemaaned="Nov";
    $forrigemaaned="Sep";
    break;
case "11":
    $dennemaaned="November";
    $naestemaaned="Dec";
    $forrigemaaned="Okt";
    break;
case "12":
    $dennemaaned="December";
    $naestemaaned="Jan";
    $forrigemaaned="Nov";
    break;
}
Avatar billede muddi Praktikant
10. februar 2004 - 03:20 #4
Det her script gør det samme som det du havde lavet, men du undgår alle mellemrum (%20) der kom i din http-query. Scriptet er lavet kun for dig :o)

<?php

// If $maaned is not present
if ($maaned=="")
{
    // Initialize $maaned as current month
    $maaned = date("m");
}
// If we have exceeded 12 months
elseif ($maaned >= 13)
{
    // Increase year by one
    ++$aar;
    // Restart counting of months
    $maaned = 1;
}
// If $maaned is zero or below
elseif ($maaned <= 0)
{
    // Decrease year by one
    --$aar;
    // Set $maaned to 12
    $maaned = 12;
}

// If $aar is not present
if ($aar == "")
{
    // Initialize $aar as the current year
    $aar = date("Y");
}
// Now we have to determine the name of the current month,
// the next month and the previous month
switch ($maaned)
{
    case "01":                         // Remember the double quotation!
        $denneMaaned    = "Januar";    // Name of this month
        $naesteMaaned    = "Feb";    // Name of next month
        $forrigeMaaned    = "Dec";    // Name of previous month
        break;
    case "02":
        $denneMaaned    = "Februar";
        $naesteMaaned    = "Mar";
        $forrigeMaaned    = "Jan";
        break;
    case "03":
        $denneMaaned    = "Marts";
        $naesteMaaned    = "Apr";
        $forrigeMaaned    = "Feb";
        break;
    case "04":
        $denneMaaned    = "April";
        $naesteMaaned    = "Maj";
        $forrigeMaaned    = "Mar";
        break;
    case "05":
        $denneMaaned    = "Maj";
        $naesteMaaned    = "Jun";
        $forrigeMaaned    = "Apr";
        break;
    case "06":
        $denneMaaned    = "Juni";
        $naesteMaaned    = "Jul";
        $forrigeMaaned    = "Maj";
        break;
    case "07":
        $denneMaaned    = "Juli";
        $naesteMaaned    = "Aug";
        $forrigeMaaned    = "Jun";
        break;
    case "08":
        $denneMaaned    = "August";
        $naesteMaaned    = "Sep";
        $forrigeMaaned    = "Jul";
        break;
    case "09":
        $denneMaaned    = "September";
        $naesteMaaned    = "Okt";
        $forrigeMaaned    = "Aug";
        break;
    case "10":
        $denneMaaned    = "Oktober";
        $naesteMaaned    = "Nov";
        $forrigeMaaned    = "Sep";
        break;
    case "11":
        $denneMaaned    = "November";
        $naesteMaaned    = "Dec";
        $forrigeMaaned    = "Okt";
        break;
    case "12":
        $denneMaaned    = "December";
        $naesteMaaned    = "Jan";
        $forrigeMaaned    = "Nov";
}

// Now we have to assemble the output string
$out = "<a href=\"" . $PHP_SELF . "?maaned=" . ($maaned - 1) .
          "&aar=" . $aar . "\">&lt;&lt;" .
          $forrigeMaaned . "</a> " .
         
          " | " . $denneMaaned . " | " .
         
          "<a href=\"" . $PHP_SELF . "?maaned=" . ($maaned + 1) .
          "&aar=" . $aar . "\">" .
          $naesteMaaned . " &gt;&gt;</a> " . $aar;

// Finally we print the output to the browser
print($out);
?>


Jeg håber du kan bruge svaret :o)
Avatar billede 13thsky Nybegynder
10. februar 2004 - 07:07 #5
Tak for dit forsøg muddi (godt at se at vi stadig kæmper for at hjælpe hinanen).
Problemet er at den simpelthen ikke printer August og September ud! Prøv at gå ind på www.lycho.dk/kristian/test/dato.php og tryk frem til August og September. Tilgengæld begynder det at virke igen for Oktober...!!! -og som du kan se, overskrider den ikke de 256 tegn i adresselinien...

HELP MEEEE!!!

//13th Sky
Avatar billede muddi Praktikant
10. februar 2004 - 07:45 #6
Har du husket "" som jeg skrev længere oppe?
Avatar billede 13thsky Nybegynder
10. februar 2004 - 07:53 #7
Ahhh, yep det var problemet... Men underligt nok at den så accepterer alle andre end netop august og september... Det var vel også det du mente med en fejl i PHP..
Men tnx (c:

//13th Sky
Avatar billede muddi Praktikant
10. februar 2004 - 07:55 #8
Jeg kan ikke se hvad årsagen ellers skulle være :o)
Avatar billede 13thsky Nybegynder
10. februar 2004 - 08:03 #9
tnx der... (c:
Avatar billede muddi Praktikant
11. februar 2004 - 12:44 #10
Jeg har fundet ud af hvad der er galt! Altså hvorfor det går galt!

if($maaned=="")
{
$maaned=date("m");
}

skal være

if($maaned=="")
{
$maaned=date("n");
}

Årsagen er, at PHP bruger typen integer til at gemme måned. Hvis en integer starter med 0, f.eks. 01,02,03,04, så opfatter PHP dem som værende base-8 notation.

Ligesom hvis du gemmer integers som hexadecimal notation, f.eks. 0xAE

Ved at vælge datoformatet, som ikke bruger foranstillede nuller bliver måned-variablen opfattet som værende base-10 (10-talssystemet).

Alle de steder du så kontrollerer for månedens værdi skal du altså også fjerne det foranstillede nul!

Skriv hvis du har forstået det :o)
Avatar billede muddi Praktikant
11. februar 2004 - 12:47 #11
Ps. grunden til at det går galt ved august og september er, at 8-talssystemet kun går fra 0-7!

0 = 0
1 = 1
2 = 2
3 = 3
4 = 4
5 = 5
6 = 6
7 = 7
8 = 10
9 = 11

osv.
Avatar billede 13thsky Nybegynder
11. februar 2004 - 18:31 #12
Det må jeg sige Muddi, good work. Tak for hjælpen...

(c:
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