Löytyisikö porukasta gurua, joka kertoisi, miksi oheinen koodinpätkä antaa väärän vastauksen vain kuukausille 08 ja 09. Kaikki muut kuukaudet antavat oikean päiväsumman vuoden alusta, vain ko. kuukaudet tekevät poikkeuksen. Numeerinen ja character-arvo antavat saman virheen, ja $nimi ei vaikuta tähän "kummajaiseen:
Koodi on "katseluvalmis", $month-määrän poikkeaman huomaa, kun alussa $akuuk=('08'); -tilalle kirjoittaa 06,07,08,09,10,11 jne.
<?php $akuuk=('08'); if($akuuk==01) $month="0"; elseif($akuuk==02) $month="31"; elseif($akuuk==03) $month="59"; elseif($akuuk==04) $month="90"; elseif($akuuk==05) $month="120"; elseif($akuuk==06) $month="151"; elseif($akuuk==07) $month="181"; elseif($akuuk==08) $month="212"; elseif($akuuk==09) $month="243"; elseif($akuuk==10) $month="273"; elseif($akuuk==11) $month="304"; elseif($akuuk==12) $month="334"; else $month="31"; echo "$month "; ?>
PHP:ssä luvun 0-alku tarkoittaa 8-järjestelmää, jossa on käytössä numerot 0 - 7. Tämän takia luvut 08 ja 09 muuttuvat nolliksi. Ratkaisuja on monia, joista yksinkertaisin on kirjoittaa vertailussa luvut heittomerkkien sisään. Mutta ehkä tyylikkäin tapa olisi käyttää taulukkoa näin:
<?php $alut = array(0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334); $akuuk = 9; echo $alut[$akuuk - 1]; ?>
Huomaa merkkijonojen ja lukujen ero! Merkkijonojen ympärillä on lainausmerkit tai heittomerkit, luvut kirjoitetaan sellaisinaan.
Kiitoksia Antti! PHP on minulle uusi alue, jonka aloitin vasta n. kuukausi sitten. Kirjoittamasi Käytännön PHP-opas antoi todellisen hevosenpotkun tälle uudelle harrastukselle. Aikaisemmin tein kone- ja sisäverkkokohtaisia ohjelmistoja Visual dBase'ella, mutta lisääntyvät käyttis-, käyttäjä- ja virusongelmat teettivät turhan paljon jälkihoitoa, joten tuumasin, että kun käyttää PHP/MySQL -yhdistelmää niin kaikki toimii käyttäjästä riippumatta jos vain selain toimii.
Teet todella arvokasta työtä, onnea ja menestystä kaikelle mitä tässä elämässä teetkin! Kiitoksin: JimLazy (JussiLaiska), 24h15min nykerrystä 7 pv/viikko.
Aihe on jo aika vanha, joten et voi enää vastata siihen.