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.

Předmět Autor Datum
Tohle te asi bude zajimat: https://www.w3schools.com/sql/func_mysql_date_form at.asp
Jan Fiala 12.07.2017 10:31
Jan Fiala
DATE_FORMAT znám. Ale nevím, jak to implementovat na všechny vypsané řádky. :-/
Kráťa 12.07.2017 10:36
Kráťa
SELECT mestoakce, DATE_FORMAT(datumakce, .... ) as datumakce FROM tkosp_akce WHERE krajakce='Jihomor…
Jan Fiala 12.07.2017 12:22
Jan Fiala
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
Já ten array zkoušel od Vrány function cesky_den($den) { static $nazvy = array('neděle', 'pondělí',…
Kráťa 14.07.2017 00:43
Kráťa
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
Toto urcite fungovat nemoze, kedze premennu $nazvy ani len nevyuzivas. Neber to nijak v zlom, ale je…
wam_Spider007 14.07.2017 07:28
wam_Spider007
Jo, teď jsi to vystihl. Ale zase umím rmutovat. A toto také asi očekává nějaký array. :-( function…
Kráťa 14.07.2017 09:04
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.

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.

Já ten array zkoušel od Vrány

function cesky_den($den) {
    static $nazvy = array('neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota');
    return $nazvy[$den];
}

https://php.vrana.cz/ceske-nazvy-mesicu-a-dnu-v-ty dnu.php

Ono by to možná i stačilo jen nějak

$den=StrFTime("%A", Time());
echo $den;

Jenže nevím právě syntaxi na to echo, aby to vyrábělo z $zaznam['datumakce']

Až to budu umět zobrazit, tak to snad budu umět i převést na české názvy.

Toto urcite fungovat nemoze, kedze premennu $nazvy ani len nevyuzivas.
Neber to nijak v zlom, ale je vidiet, ze v tom dost tapes a len lepis kod, ktory najdes kade tade aj ked mu nerozumies.
Vznika z toho kod, kde je krizom krazom PHP, HTML, rozne funkcie, selecty, cykly. Cisty chaos, ktory uz po tyzdni nebudes vediet udrziavat a v pripade potreby ani menit.

Myslim si, ze sa s tym trapis uz dost dlho na to, aby si si trochu postudoval OOP a skusil dat tomu nejaku kulturu.
Pracu ti moze zjednodusit aj nejaky microframework https://www.slant.co/topics/2642/~php-microframewo rks ... ja osobne preferujem SLIM.

Jo, teď jsi to vystihl. Ale zase umím rmutovat. A toto také asi očekává nějaký array. :-(

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

Trápím/netrápím. Já to dělám dobrovolně a je to dávno i funkční. Chtěl bych však ušetřit pole ve formuláři, kde mám výběr dne přes radio.
Přesto se ale něco velmi rád přiučím, bude se to hodit do budoucna. Jdu omrknout ten microframework.

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