21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
Daviid
Profil *
Dobrý den,
v inputu zadávám datum ve formátu DD.MM.YYY, používám na to datumpicker.
Do databáze se ovšem, když zadám dnešní datum 19, tak se to zapíše jako rok 2019, kvůli tomu, že v databázi se datum ukládá YYY.MM.DD, lze nějak docílit při ukládání, aby se mi datum z DD.MM.YYY převedl na YYY.MM.DD? Vím, že si to v datepickeru můžu přehodit to formátování, ale lepší je číst datum 19.02.2015 než 2015.02.19
juriad
Profil
Do databáze se ukládá jako 2015-02-19. Pokud to vezme něco jiného, máš v tom okamžiku jen štěstí.

date("Y-m-d", strtotime("19.2.2015"));

Odstraněno echo.
Daviid
Profil *
juriad:
Nejde mi o vypisování právě, ale o ukládání
Teď mám:
...
...
'datum' => $_POST["datum"],
...
...
používám dibi


Aha, takže tím jak vypisuji datum, můžu i ukládat, díky zase o něco chytřejší.
Ještě jeden dotaz, když chci ukládat čísla s desetinnou čárkou (místo čárky musí být tečka), tak by se asi měl používat datový typ FLOAT nebo DOUBLE? (to, ale asi umí jen s čárkou a né tečkou, ne?) Momentálně používám datový typ pro to char, tak jeslti to není konina. Díky :)
Amunak
Profil
Daviid:
Rozdíl mezi zápisem s čárkou a tečkou dělá jen "zvyk" (podobně jako u uvozovek). V česku je zvykem oddělovat desetinná čísla čárkou, ve většině světa (přinejmenším v anglii a americe :) se používá tečka, takže se to tak dostalo i do valné většiny programovacích jazyků.

V PHP je všechno double, takže používej double i v databázi. Ona výsledná přesnost se stejně může trochu lišit, takže je lepší na to nespoléhat. Obzvlášť věci jako měna (peníze) se musí ukládat jako int, jinak to nadělá paseku (jako float obecně, to zrovna s databází jako takovou nemá moc společného). Co se vlastně pokoušíš ukládat ty?

A co, proboha, ukládáš do charu? desetinná čísla?
Daviid
Profil *
Amunak:
ukládám kurzy... ty jsou s tečkou, takže například 1.72, 1.50, 2.00 atd
juriad
Profil
Daviid:
Je-li to datum, ukládej to jako DATE.
Je-li to datum s časem, ukládej to jako DATETIME.

Je-li to celé číslo, ukládej to jako INT.
Je-li to nepřesné desetinné číslo, ukládej to jako DOUBLE.
Je-li to přesné desetinné číslo, ukládej to jako NUMERIC.
Přesné/nepřesné záleží na tom, kolik cifer od toho čísla potřebuješ. Na počet metrů plotu kolem zahrady stačí DOUBLE; na cenu objednávky na fakturu NUMERIC.

Je-li to krátký text (vždy krátký), ukládej to jako VARCHAR.
Je-li to dlouhý text, ukládej to jako TEXT.
Pokud cokoli jiného než text ukládáš jako VARCHAR, pak to děláš blbě.

Dej si extra záležet, aby data v databázi měla správný formát - takový který vyhoduje databázi, ne tobě. Ty si to vždy zformátuj, jak se ti zlíbí, při výpisu.
Daviid
Profil *
juriad:
díky moc, ještě mě napadá myšlenka jak to bude u obrázku? Když je ukládám i s koncovkou např. 52.jpg. Používám VARCHAR(50).
Amunak
Profil
Daviid:
Používej to, co se ti hodí pro aplikaci. Pokud ukládáš celé jméno obrázku, možná na to celkově jdeš špatně - když máš nějaký záznam v databázi, typicky má nějaký identifikátor. Proč jako jméno obrázku rovnoou nepoužiješ tento identifikátor?

A i kdybys ho použít nemohl, pokud máš pevnou délku názvů (např. vždy jsou xx.jpg), tak zaprvé .jpg můžeš úplně vyhodit, ale i kdyby tam bylo někdy .png nebo .gif, tak můžeš používat CHAR(6), ímž ušetříš asi bajt místa (a pokud jsou všechny sloupce v té tabulce fixní šířky, rapidně urychlíš cokoliv co pracuje s celou tabulkou).

Na druhou stranu o moc nejde - pokud nemáš desetitisíce záznamů, takovéhle mikrooptimalizace nemá moc cenu řešit.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0