Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Aikoja MySQL:issä

Sivun loppuun

Auvo [27.10.2007 19:06:41]

#

Moi,

mulla on myslissä tietue, jonka arvo on 20. Miten pystyisin joka päivä vähentämään lukua yhdellä? Eli vaikka koodi suoritettaisiin vasta 5 päivän päästä, arvoksi olisi vaihtunut 15 jne.

Auvo

T.M. [27.10.2007 19:31:01]

#

Ota talteen aika jolloin asetit sen, sitten vaan lasket nykyisen ja sen vanhan ajan erotuksen, ja lasket kuinka monta päivää siihen väliin mahtuu. sitten vähennä se tosta luvusta 20. Tuohon siis voi käyttää esim time() funktiota että saa nykyisen ajan.

Auvo [27.10.2007 19:44:12]

#

Olen aloittelija PHP:ssä, joten toivoisin jotain koodiesimerkkiä miten sen helpoiten voi toteuttaa.. omat aivot käy tyhjää.

EDIT: Aivoissa välähti ja nyt toimii koodikin. Kiitos!

Auvo [27.10.2007 21:22:50]

#

Muttamutta.. vielä on sellainen pulma, että miten saisin sen "kuinka monta päivää siihen väliin mahtuu"? Nyt mulla on vasta tietokannassa se aika, jolloin asetin sen kahdenkymmenen tietueessa 'aika' ja itse 20 on tietueessa 'asunto'. Mutta kun haen asunnon arvoa, koodi tulostaa jotain tyyliin '1193507759'.

Päivässä asunnon arvoa siis pitäisi miinustaa vain 1:llä, mutta vaikka koodi ladattaisiin 5 päivän päästä, arvon pitää olla miinustunut viidellä.

Koodini on tässä (koodi voi sisältää jotan turhuuksia, joita ei siellä tarvitse, sillä otin pätkän siitä suoraan Ohjelmointiputkan tietokantaoppaasta, joten kommentoikaa, lyhentäkää ja auttakaa):

<?php
$kysely4 = "SELECT aika FROM tavara WHERE omistaja = '{$user['tunnus']}' AND tavara = 'Asunto'";
$haku4 = mysql_query($kysely4) or die("Virhe kyselyssä! Ole hyvä ja yritä hetken kuluttua uudelleen.");
for ($i = 0; $i < mysql_num_rows($haku4); $i++) {
$nykyaika = mysql_result($haku4, $i, "aika");
$nykytime = time();
$aikatotal = $nykytime - $nykyaika;
$kysely5 = "UPDATE users SET asunto = '$aikatotal' WHERE tunnus = '{$user['tunnus']}'";
mysql_query($kysely5) or die("Virhe kyselyssä! Ole hyvä ja yritä hetken kuluttua uudelleen.");
} ?>

T.M. [27.10.2007 22:49:32]

#

time() funktio palauttaa sekunteja, laske ensin kuinka monta sekuntia on päivässä, sitten jaa se erotus tuolla summalla, jolloin saat luvun joka kertoo kuinka monta päivää niiden aikojen välissä oli.

mysql_query() käyttäminen silmukan sisällä on muuten todella huono idea.

Auvo [28.10.2007 09:55:36]

#

Örgh.. en vaan saa toimimaan. Nyt väänsin tämmösen:

<?php
$kysely4 = "SELECT aika FROM tavara WHERE omistaja = '{$user['tunnus']}' AND tavara = 'Asunto'";
$haku4 = mysql_query($kysely4) or die("Virhe kyselyssä! Ole hyvä ja yritä hetken kuluttua uudelleen.");
for ($i = 0; $i < mysql_num_rows($haku4); $i++) {
$nykyaika = mysql_result($haku4, $i, "aika");
$nykytime = time();
$aikatotal = $nykytime - $nykyaika;
$sekinday = $aikatotal / 86400;
}
$kysely5 = "UPDATE users SET asunto = '$sekinday, 0' WHERE tunnus = '{$user['tunnus']}'";
mysql_query($kysely5) or die("Virhe kyselyssä! Ole hyvä ja yritä hetken kuluttua uudelleen.");
?>

Hakoulinen [28.10.2007 10:04:49]

#

Kaarisulut lienevät turhat $user[tunnus] ympärillä ja mitä $kysely5:ssä tarkoittaa tuo nolla asunto = '£sekinday, 0':ssa?

Auvo [28.10.2007 10:15:54]

#

Joku on muistaakseni sanonut, että ei voi viitata taulukko-muuttujan soluun merkkijonon sisällä ilman hakasulkuja.

Äh, yritin säätää vaan, että se tallentaisi sen 0 desimaalin tarkkuudella. :D

kayttaja-2791 [28.10.2007 12:16:06]

#

Auvo kirjoitti:

Joku on muistaakseni sanonut, että ei voi viitata taulukko-muuttujan soluun merkkijonon sisällä ilman hakasulkuja.

Omalla serverilläni se ei yksinkertaisesti toimi, vaan PHP heittää herjan :P En sitten tiedä että toimiiko tuo jollain PHP versiolla sitten eritavalla, tai onko se riippuvainen puskuroinnista tai vastaavasta... Mielenkiintoinen juttu, ehkä joku osaa valottaa tarkemmin? Mutta se on ainakin varmaa ettei siitä mitään haittaa ole, monet editoritkaan eivät näytä osaavan värittää oikein koko rimpsua ilman niitä kaarisulkuja (sanoin aiemmin väärin niitä hakasuluiksi).


Sivun alkuun

Vastaus

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

Tietoa sivustosta