Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Jak vypsat datum z databáze MySQL?

Mám dotaz do databáze

$result = mysql_query("SELECT * FROM tkosp_akce WHERE krajakce='Jihomoravský kraj' ORDER BY mestoakce,datumakce");

while ($zaznam = mysql_fetch_array ($result)):

A potom

<span><?php echo $zaznam['mestoakce']; ?>, <?php echo $zaznam['datumakce']; ?></span>

Tím se mi ale samozřejmě vypíše tvar 2017-09-21. Kdyby to byl jeden záznam, tak bych to uměl. Ale když to je třeba 20 řádků, tak nevím, jak na to, abych docílil u všech

echo $zaznam['datumakce']

den. měsíc.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Můžeš naformátovat datum na straně MySQL, jak navrhuje Jan Fiala. Ale také na straně PHP si můžeš ud…
hynajs 12.07.2017 10:57
hynajs
Nějak se mi nedaří. Možná to dávám na špatné místo. Dal jsem to hned před while a Notice: Undefine…
Kráťa 12.07.2017 11:29
Kráťa
1. Tu funkci dej třeba na konec skriptu. 2. Nahraď uvnitř while řádek echo $zaznam['datumakce'];…
hynajs 12.07.2017 11:34
hynajs
On se mi ten datum už vypíše jak chci. Ale dělá mi to ještě nějaké chybky. [http://pc.poradna.net/f…
Kráťa 12.07.2017 11:53
Kráťa
Vypiš sem, prosím, řádky kolem řádku 77.
hynajs 12.07.2017 12:59
hynajs
Je tam 72 <?php 73 echo zpracuj_datum_z_sql($zaznam['datumakce']); 74 75 function zpracuj_datum_z_s…
Kráťa 12.07.2017 13:16
Kráťa
Vyhoď řádek 73 tohoto výpisu - pole $zaznam se definuje až na řádku 79.
hynajs 12.07.2017 13:25
hynajs
Paráda, děkuji 1 897x, jdu to prostudovat. Jen ještě malý dotaz. Z db to tahám na jednotlivé kraje.…
Kráťa 12.07.2017 13:36
Kráťa
Tu funkci načteš jenom jednou.
hynajs 12.07.2017 13:40
hynajs
Jo, dal jsem jí před všechny ty selecty hned po připojení. Chtěl bych do ní zabudovat i, aby ze zobr…
Kráťa 14.07.2017 00:02
Kráťa
Před konkrétním řešením je vhodné uvědomit si základní: funkce přiřazuje datům, které jí dáš, nějaký…
hynajs 14.07.2017 00:23
hynajs
Také nefunguje buuuuuuuu :-) function den($datum) { static $nazvy = array('neděle', 'pondělí', 'úte…
Kráťa 14.07.2017 00:51
Kráťa
A já tě vrátím zpět k selectu. Tohle vše (naformátované datum, dny apod.) můžeš dostat přímo jako vý…
Jan Fiala 14.07.2017 06:12
Jan Fiala
Tak to je cisty antipattern. Databazovy select sa o taketo veci nema starat. To ma mat na starosti a…
wam_Spider007 14.07.2017 07:16
wam_Spider007
S tím jsem počítal, ale v případě Kráti bych to moc nečekal. A naše společnost zase tak multikutli n…
Jan Fiala 14.07.2017 08:58
Jan Fiala
Nemáš nějaký link, kde bych to nastudoval v češtině? poslední
Kráťa 14.07.2017 09:07
Kráťa

Můžeš naformátovat datum na straně MySQL, jak navrhuje Jan Fiala.
Ale také na straně PHP si můžeš udělat pěkné cvičení na práci s řetězci po vlastní ose:

echo zpracuj_datum_z_sql($zaznam['datumakce']);

function zpracuj_datum_z_sql($datum) {
  $expl=explode("-",$datum);
  return $expl[2].".".$expl[1].".".$expl[0]; 
}

Ta funkce není nic moc, ale účel splní a můžeš ji doplnit a obměnit pro vlastní potřebu.

Je tam

72 <?php
73 echo zpracuj_datum_z_sql($zaznam['datumakce']);
74
75 function zpracuj_datum_z_sql($datum) {
76  $expl=explode("-",$datum);
77  return $expl[2].". ".$expl[1].". ".$expl[0]; 
78 }
79 while ($zaznam = mysql_fetch_array ($result)):
80 ?>

Paráda, děkuji 1 897x, jdu to prostudovat. Jen ještě malý dotaz. Z db to tahám na jednotlivé kraje. Vždy nový select a while. Musím to dát pokaždé, nebo to funguje globálně pro všechny další selecty (jasně, že to vyzkouším, ale abych zbytečně nebobtnal kód)?

Jo, dal jsem jí před všechny ty selecty hned po připojení.
Chtěl bych do ní zabudovat i, aby ze zobrazoval rovněž název dne. Ani po hodině různého zkoušení jsem nepřišel na to, jak tam zabudovat "W" (či A). Buď se mi vracelo všude "čtvrtek". Zkoušel jsem právě i novou funkci, ale výsledek stejný, tak jdu ještě s prosíkem.

function den($datum) {
$den=StrFTime("%A");
return $den; 
}

nebo různě dlouhé (1-4 místné) číslo , nebo rovnou nějaká chyba.
Zkoušel jsem právě i novou funkci, ale výsledek stejný, tak jdu ještě s prosíkem.

function den($datum) {
$den=StrFTime($datum ["%W"]);
return $den; 
}

Před konkrétním řešením je vhodné uvědomit si základní: funkce přiřazuje datům, které jí dáš, nějaký výsledek, který z nich vypočítá (velmi zhruba řečeno).
Takže se podívejme na první Tvůj kód: dáváš funkci $datum, ale ona s ním dále nepracuje, nýbrž tvrdošíjně vrací StrFTime("%A") . Vždycky musí vracet totéž, vstupní hodnotu vůbec nebere v úvahu.
V druhém kódu s proměnnou $datum pracuješ, ale předpokládáš, že $datum je array (což může být) a má nějakou hodnotu pro "%W" (a tuto hodnotu postrkuješ funkci StrFTime), o čemž pochybuji.

Zpět do poradny Odpovědět na původní otázku Nahoru