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
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.
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!
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."); } ?>
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.
Ö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."); ?>
Kaarisulut lienevät turhat $user[tunnus] ympärillä ja mitä $kysely5:ssä tarkoittaa tuo nolla asunto = '£sekinday, 0':ssa?
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
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).
Aihe on jo aika vanha, joten et voi enää vastata siihen.