Haluan tulostaa kaikki kuukauden päivät. Työpäivien kohdalle haluan tulostaa työtunnit, muuten ei mitään
Esim:
Tietokannassa näin:
1 5-7
2 6-10
6 8-10
Tulostus olisi tällainen:
1 5-7
2 6-10
3
4
5
6 8-10
Olen miettinyt sisäkkäisiä for, while ja if lausekkeita, mutta ainakaan omassa testissä ei toiminut.
Yksi ratkaisu on muodostaa tietokannan tiedoista taulukko, jossa jokaisesta kuukauden päivästä kerrotaan sen työtunnit. Tämän jälkeen riittää käydä kuukauden päivät läpi for-silmukalla ja tulostaa tiedot taulukosta.
Esimerkissäsi taulukon kohdassa 1 olisi arvo 5-7, kohdassa 2 olisi arvo 6-10 jne.
Tuollaista ideaa en ajatellutkaan. Koitan ensin itse keksiä funktion, mutta jos ei onnistu pyydän apua.
Kiitos ideasta.
Pakko pyytää apua lisää, koska olen niin huono PHPssä.
Minulla on tietokannassa päivät, milloin töitä on tehty. Kuitenkaan en osaa, ainakaan vielä, miten tietoja pystytään käsittelemään neuvomallasi tavalla. Olen aina tallentanut tiedot muuttujiin mysql_fetch_array ja while lausekkeiden avulla.
Varmaa jollain laskurilla onnistuu kuhan ottaa päivät tietokannasta pienimmästä suurimpaan:
$laskuri=0; $tmp=""; while ($rivi = mysql_fetch_assoc($kysely)) { $paiva = $rivi['paiva']; $tunnit = $rivi['tunnit']; $laskuri++; for($i=$laskuri ; $i < $paiva ; $i++) { $tmp.="$i <br />"; $laskuri++; } $tmp.="$paiva $tunnit <br />"; } echo $tmp;
Eipä oo mitenkään testattu koodi kylläkään.
Mod. vaihtoi oikeat kooditagit!
Kiitos tästä.
Olen tekemässä itselleni ja muille kenellä on henkilökohtainenavustaja, esim. vammaisuuden takia, tuntien seuranta sovellusta. Vapaa kaikille, ehkä lahjotuksia otetaan vastaan Porin MS-yhdistykselle, sitten joskus.
Koodi on hyvä, mutta ei toimi tarkoituksen mukaisesti.
Ensin tulee while looppi, mikä hakee ekat tiedot kannasta, sitten for, joka ajaa päivät muuttujaan $paiva asti ja lopuksi while loopin loput. Muuten siis hyvä, mutta ei tulosta kuin ekan tiedon oikein. Loput tiedot tulevat, vasta loppuun.
En ole kokeillut vielä, mutta olisiko while loopissa tällaista mahdollisuutta tai jotain ideaa edes.
Hmmh ainakin mitä nyt testasin tuota niin toimi ainaki silleen miten tuossa aluksi halusit. Eli testasin koodia:
<?php $laskuri=0; $tmp=""; $taulukko = array("5" => "8-10","6" => "6-7","7" => "8-9","10" => "8-19"); foreach ($taulukko as $key => $value) { $paiva = $key; $tunnit = $value; $laskuri++; for($i=$laskuri ; $i < $paiva ; $i++) { $tmp.="$i <br />"; $laskuri++; } $tmp.="$paiva $tunnit <br />"; } echo $tmp;
Ja tämä koodi tulostaa:
1
2
3
4
5 8-10
6 6-7
7 8-9
8
9
10 8-19
Jätinpä sitten kertomatta asioita, mitkä olis olleet tärkeitä.
Tietokannasta tulee seuraavanlaista tietoa
solu = tarkoitus -> esim.
pv = päivä -> 9
tulo = tuloaika -> 10
meno = lähtöaika -> 15
Seuraavat tiedot on kannassa:
pvm (timestamp) tulo meno hyhteensapv (tunnit yhteensä meno-tulo) pv vko kk vuosi
Tämän takia ei toimi toi, kiitos silti. Olisin toki voinut kertoa tämän heti alkuun, mutta en ajatellut asiaa tarpeeksi pitkälle.
Sain haluamani, toimimaan seuraavalla koodilla
$kysely = "SELECT pv, tulo, meno, hyhteensapv FROM aika WHERE nikki = \"{$valnikki}\" AND kk = \"{$kuukausi}\""; $tulos = mysql_query($kysely, $connection); confirm_query($kysely); $i=1; while($i<=date("t")) { while($row = mysql_fetch_array($tulos)) { $paiva = $row['pv']; $meno = $row['meno']; $tulo = $row['tulo']; $hyhteensa = $row['hyhteensapv']; while ($paiva != $i) { echo '<tr><td>'.$i.'</td><td>0</td><td>0</td></tr>'; $i++; } echo '<tr><td>' . $paiva . '</td><td>' . $tulo . '-' . $meno . '</td><td>' . $hyhteensa . '</td></tr>'; $i++; } echo '<tr><td>'.$i.'</td><td>0</td><td>0</td></tr>'; $i++; }
Ei mitään hienointa koodia, mutta toimii toivotulla tavalla.
Aihe on jo aika vanha, joten et voi enää vastata siihen.