Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Työtunnit oikealle päivälle

Sivun loppuun

pikkue [20.08.2011 11:59:34]

#

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.

Antti Laaksonen [20.08.2011 13:09:52]

#

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.

pikkue [26.08.2011 23:01:55]

#

Tuollaista ideaa en ajatellutkaan. Koitan ensin itse keksiä funktion, mutta jos ei onnistu pyydän apua.

Kiitos ideasta.

pikkue [29.08.2011 22:37:26]

#

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.

Synomi [29.08.2011 22:57:36]

#

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!

pikkue [30.08.2011 16:48:21]

#

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.

pikkue [01.09.2011 14:46:47]

#

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.

$i = 1;
while ($rivi = mysql_fetch_assoc($kysely) || ($i<=date"n")) {
  $paiva = $rivi['paiva'];
  $tunnit = $rivi['tunnit']

if ($i == $paiva) {
  echo $i $tunnit;
}
else {
  echo $i;
}
$i++
}

Synomi [01.09.2011 16:07:13]

#

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

pikkue [05.09.2011 17:42:56]

#

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.

pikkue [15.09.2011 18:25:38]

#

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.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta