Autor Zpráva
thebigheead
Profil
Zdravím, potřeboval bych poradit s PHP a MySQL. Potřebuji vypsat data z databáze (přesněji jsou to transakce), které byli přidány v aktuálním měsíci. To znamená, že dnes by se vypsali transakce, které proběhli za měsíc říjen. Příští měsíc za listopad atd atd.. Rád bych do toho ještě zakomponoval formulář a input SELECT. Tam bych si vybral měsíc, který chci zobrazit (default bude samozřejmě ten aktuální). Nejdřív ale potřebuji vědět, jak vypsat ty data. Poradí mi někdo, jak na to? Vím, že se to musí dělat přes SELECT a v něm podmínku, ale ještě jsem s tím nikdy nepracoval. Díky moc
lionel messi
Profil
thebigheead:
V prvom rade základná otázka: Aký stĺpec (stĺpce?) používaš pre ukladanie db a v akom formáte (2015-10-11, 11. 10. 2015 alebo niečo úplne iné)?

Vím, že se to musí dělat přes SELECT a v něm podmínku,

S tým ti pomôže klauzula WHERE.
thebigheead
Profil
Sloupec se jmenuje datum a ukládám do něj formát date('Y-m-d').
lionel messi
Profil
thebigheead:
Sloupec se jmenuje datum a ukládám do něj formát date('Y-m-d').

SELECT *, MONTH(datum) AS mesic
FROM tabulka
WHERE mesic = $_POST['mesic']

Pozor! Kód v tejto podobe predpokladá ošetrenie užívateľského vstupu $_POST['mesic'] (ideálne pomocou intval - pretypovania na číslo), inak skrýva závažnú bezpečnostnú chybu.

$_POST['mesic'] samozrejme zodpovedá vstupu napr. z formulára.

Ešte pre istotu doplním, že tabulka treba nahradiť skutočným názvom tabuľky. :-)
Alphard
Profil
[#4]:
V tomhle řešení je takový hezký Easter egg, který uživatelé najdou přesně za rok.
lionel messi
Profil
Alphard:
V tomhle řešení je takový hezký Easter egg, který uživatelé najdou přesně za rok.

Ja ho tam nenájdem ani o 2 roky, mohli by ste mi ho, prosím, prezradiť? Na zraniteľnosť som dôrazne upozornil, evidentne však narážate na niečo celkom iné.
Keeehi
Profil
lionel messi:
Příští rok je přestupný, tak to bude asi ono.
juriad
Profil
Keeehi:
Ee. :-)

lionel messi:
ŘIjen je teď, bude za rok, bude i za ty dva. Ty filtruješ ne letošní říjen, ale jakýkoli říjen.
V dotazu máš navíc hrubou chybu - nelze se ve WHERE odkazovat na sloupce definované v SELECTovací části dotazu.

Správným řešením je mít v tom selectu na stránce měsíce včetně roku:
2015-10
2015-11
...
2016-10
...
A ty pak použít pro dotaz do databáze:
$zacatek = $rokmesic . '-01'; # plus ošetření vstupu proměnné, která pochází z formuláře
$konec = next_month($zacatek); # pro vhodně definovanou funkci next_month
$sql = "SELECT * FROM tabulka
WHERE datum >= '$zacatek' AND datum < '$konec'";

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: