Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Syötetty päivämäärä MySQL-kantaan

Sivun loppuun

volume [06.11.2010 11:56:31]

#

hei,
pakko kysellä apuja seuraavaan ongelmaan:

minulla on lomake, jossa olevalla syöttökentällä käyttäjä voi tallettaa haluamansa päivämäärän tietokantaan. päivämäärä ei siis ole curdate(). miten saan php:n puolella pakotettua syötettävän päivämäärän johonkin formaattiin (esim. pp/kk/vvvv tai paremminkin vvvv/kk/pp).

ongelmani on siinä, että käyttäjähän voi syöttää päivämäärän lomakkeen kenttään periaatteessa ihan minkälaiseen muotoon tahansa. myöhemmin käytän syötettyä päivämäärää taulussa indeksinä, joten se pitäisi saada siihen käyttöön sopivaan muotoon.

temu92 [06.11.2010 12:01:53]

#

Tällä koodilla saa UNIX-timestampin päivämäärästä:

<?php
	$day	= 15;
	$month	= 5;
	$year	= 2015;

	$day	= max(1, min(31, $day));
	$month	= max(1, min(12, $month));

	$time	= strtotime("$year-$month-$day");

	echo date("d.m.Y H:i", $time);

En tiedä sitten onko juuri se mitä haet :P

Jos lomakkeeseen on tarkoitus syöttää päivämäärä yksittäiseen kenttään, homma muuttuukin vähän hankalammaksi. Helpompaa olisi antaa käyttäjän valita päivämäärä alasvetovalikosta jolloin ei tarvitse miettiä turhaan päivämäärän parsimista.

volume [06.11.2010 12:06:30]

#

tarkoitan sitä että käyttäjä voi antaa päivämäärän esim:
-15/4/2010 tai
-15/04/2010 tai
-15.4.2010 tai
-15.04.2010 tai
sitten kaikki päinvastaisessa järjestyksessä.

miten saan tästä mössöstä tietokantakelpoisen päiväyksen?

Grez [06.11.2010 12:09:28]

#

volume kirjoitti:

ongelmani on siinä, että käyttäjähän voi syöttää päivämäärän lomakkeen kenttään periaatteessa ihan minkälaiseen muotoon tahansa.

No, tuo on kieltämättä sen luokan ongelma, ettei siihen ole olemassa ratkaisua.

Jos käyttäjä syöttää 9/10/2010, niin et voi tietää onko se 9. lokakuuta vai 10. syyskuuta. Vielä hienompi esimerkki olisi 9/10/11.. Eli 9.10.2011, 10.9.2011, 9.11.2010, 11.9.2010, 10.11.2009 vai 11.10.2009. Eli "minkälaiseen muotoon tahansa" syötetty päivämäärä ei ole missään tapauksessa järkevä lähtökohta.

Ehdotan, että ohjeistat käyttäjälle, missä muodossa päivämäärä tulee syöttää. Jos järjestelmän kohdeyleisö on suomalaiset, niin sitten suosittelen, että pyydät ne muodossa p.k.vvvv.

Jos käyttäjät on oikeasti niin pöljiä että syöttelee mitä sattuu ohjeistukesta huolimatta, niin ainahan voit tehdä kolme alasvetolistaa. Tosin tämä on mielestäni todella huono vaihtoehto, koska tyhmimmän prosentin väestöstä takia 99% väestöstä joutuu kärsimään. Tosin niinhän se usein menee.

volume [06.11.2010 12:15:41]

#

no, suomalaisessa ympäristössähän me toimitaan :-)

eikö sellaista merkkijonofunkkaria ole joka toimisi seuravalla tavalla:

1)luetaan merkkijonon alusta asti niin pitkälle kuin tulee vastaan ensimmäinen merkki, joka ei ole numero = päivät.

2) jatketaan edelleen lukemista niin pitkälle kun tulee vastaan merkki, joka ei ole numero= kuukaudet

3) loput on sitten vuotta.

sitten yhdistetään 1.2.3 tai 3.2.1

miten ton saisi koodiksi?

Metabolix [06.11.2010 12:25:08]

#

Opettele säännölliset lausekkeet.

$aika = "abc0012abc.abc007abc.abc002011abc";
$aika = preg_replace("#.*?([1-9]\\d*).+?([1-9]\\d*).+?([1-9]\\d*).*#", "\\1.\\2.\\3", $aika, -1, $osumia);
if (!$osumia) {
  die("Virheellinen päivämäärä!");
}
echo $aika, "\n"; // 12.7.2011

Lausekkeen hienosäätö jääköön kotitehtäväksi.

Grez [06.11.2010 12:34:42]

#

Mielestäni abc0012abc.abc007abc.abc002011abc tapauksessa olisi loogisempaa tulostaa "Virheellinen päivämäärä", kuin kaivaa tuosta 12.7.2011.

Jos joku nyt kirjoittaisi vaikka että:
Lempikanavani on MTV3. Joskus katson myös YLE2:ta. Tämä on tilanne vuonna 2010.

Olisiko mitään järkeä että tuosta tulisi "validi" päivämäärä joka olisi 3.2.2010?

Itse kelpuuttaisin erotinmerkeiksi . - ja /. Mahdolliset tyhjät (välilyönti, tabulaattori) voitaisiin jättää huomiotta mutta niiden lisäksi ei sitten tarvitsisi hyväksyä muuta kuin numeroita. Vuoden voisi arpoa ±50 -säännöllä tai esim +20/-80 -säännöllä jos se on annettu kahdella numerolla.

volume [06.11.2010 12:38:47]

#

täsmälleen mitä hain....kiitos

maakke [06.11.2010 20:49:46]

#

On olemassa javascriptillä tehty scriptin pätkä joka laittaa esim. .(pisteen) pakottavasti päivien jälkeen, kun kirjoittaa ekan päivämäärän tulee piste automaattisesti, kuukauden jälkeen tulee piste ja sitten vuosi eli 11.12.2010 eli käyttäjä ei voi syöttää väärin päivämäärää kenttään, samassa scriptissä on tarkistukset ja sitten kääntää annetun päivämäärän esim. mysqllän hyväksymään muotoon php:llä.

Macro [06.11.2010 21:51:37]

#

Ei ole mahdollista, koska päivämäärä voi olla yksi tai kaksinumeroinen (päivä tai kuukausi siis). Tai sitten on mahdollista, jos päivämäärä pitää kirjoittaa 01.02.2010

Lebe80 [06.11.2010 23:11:56]

#

Jos halutaan, että käyttäjä valitsee päivämäärän, niin eikö olisi selkeämpää laittaa käyttäjä valitsemaan sen esim. "datepickerillä".

Tuo olisi kaikille kaikkein selkein tapa.


http://jqueryui.com/demos/datepicker/


Sivun alkuun

Vastaus

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

Tietoa sivustosta