Stránka 1 z 1
Ukládání datumu do DB + úprava kodu
Napsal: pon 6. črc 2009, 20:44
od KapaCZ
Potřeboval bych pomoc s úpravou těchto kodu. Jde mi o to že potřebuji aby se mi datum ukládal do DB ve formátu v takovém jakém ho píši tedy DD.MM.RRRR ale vždy se to změní na RRRR-DD-MM
Další bod by byl aby se mi z DB načítalo pouze posledních 5 přidaných.
Bych potřeboval aby
admin/aktuality.php a
admin/aktuality_pridej.php byly v jendom souboru a vždy když přidám aktualitu tak se objevilo
Aktualita byla úspěšně přidána. Td to tam je taky ale otevře se mi
admin/aktuality_pridej.php kde je ten text a nic jiného což se mi vůbec nehodí. Doufám že jste to pochopili
admin/aktuality.php
Kód: Vybrat vše
<?php
function juw_page_content ()
{
echo ("<h3>Správa Aktualit</h3>");
echo ("<form action=\"./admin/aktuality_pridej.php\" method=\"post\">");
echo ("<input type=\"hidden\" name=\"sent\" value=\"\" />");
echo ("<table border=\"0\" align=\"center\">");
echo ("<tr><td align=\"left\"><b>Aktualita:</b> </td><td><textarea type=\"text\" name=\"nazev\" rows=\"6\" cols=\"23\" class=\"input\"></textarea></td></tr>");
echo ("<tr><td align=\"left\"><b><u>Den</u></b></td><td><input type=\"text\" name=\"den\" size=\"30\" maxlength=\"32\" class=\"input\" /></td></tr>");
echo ("<tr><td colspan=\"2\" class=\"sede\" align=\"left\"><br/><b>DD.MM.RRRR</b> - 07.06.2009</td><td></td></tr>");
echo ("<tr><td colspan=\"2\" align=\"right\"><input type=\"submit\" name=\"send\" value=\"Přidat\" class=\"inputbook\" /></td><td></td></tr>");
echo ("</table>");
echo ("</form>");
$vypis = mysql_query("SELECT * FROM juw_nastenka LIMIT 5");
echo $vypis;
}
?>
admin/aktuality_pridej.php
Kód: Vybrat vše
<?php
include ("./db.php");
if(isset($_POST['sent'])){
$nazev = $_POST['nazev'];
$den = $_POST['den'];
if($nazev=="" || $den==""){ // byly vyplneny vsechny povinne udaje ?
echo "nebyly vyplněny všechny údaje";
}else{
$query = mysql_query("INSERT INTO juw_nastenka (`nazev`,`den`) VALUES ('$nazev', '$den')") or die ("Chyba pri vkladani dat do databaze: ".mysql_error());
if($query){
echo "<h3>Aktualita byla úspěšně přidána</h3>";
}
}// end else
}// end isset
?>
aktuality.php
Kód: Vybrat vše
<?php
require "./config.php"; // Pripojime se na databazi
$datum= date ("d.m.Y"); // Získáme aktuální datum
$vypis = mysql_query("SELECT * FROM juw_nastenka WHERE '$datum' LIMIT 5"); // SQL dotaz.
echo "<table>";
while ($zaznam= mysql_fetch_array($vypis)){ // vypiseme vsechny radky, ktere vratil SQL dotaz
echo "<tr>
<td align=\"left\">
<strong>".$zaznam["den"]."".$zaznam["nazev"]."</strong>
</td>
</tr>";
}// end while
echo "</table>";
?>
Re: Ukládání datumu do DB + úprava kodu
Napsal: pon 6. črc 2009, 21:20
od TomTom
Záleží jaký je DBS, ale dle kódu vidím, že MySql a bohuzel jiný formát data nejde. Pokud chceš formátovat datum, tak na úrovni aplikace v php nebo možná lépe přímo v dotazu mysql fcí DATE_FORMAT(), viz manual.
Posledních 5 záznamů přes klauzuli LIMIT (nastavíš si čísla, jak potřebuješ) a ORDER BY id DESC.
Jinak mi přijde v tom výpisu formuláře zbytečný volat na každým řádku echo, stačí jednou.
Re: Ukládání datumu do DB + úprava kodu
Napsal: pon 6. črc 2009, 22:02
od KapaCZ
Prosím mohl by jsi to napsat nák pro blbější

S php a mysql umim opravdu jen začátky. Případně upravit kod. Všiml jsem si že jsem sem nedal SQL tak tak činim.
Kód: Vybrat vše
--
-- Struktura tabulky `juw_nastenka`
--
DROP TABLE IF EXISTS `juw_nastenka`;
CREATE TABLE IF NOT EXISTS `juw_nastenka` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nazev` varchar(1000) CHARACTER SET utf8 COLLATE utf8_czech_ci NOT NULL,
`den` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=25 ;
--
-- Vypisuji data pro tabulku `juw_nastenka`
--
INSERT INTO `juw_nastenka` (`id`, `nazev`, `den`) VALUES
(15, 'aaaaaaaaaaaa', '2007-05-20'),
(16, 'bbbbbbbbbbbb', '0000-00-00'),
(17, 'cccccccccccc', '2007-06-20'),
(18, 'dddddddddddd', '2007-06-20'),
(19, 'eeeeeeeeeeee', '2007-06-20'),
(20, 'Dnes jsem nahodil funkci mod_rewrite. Pokud najdete nefunkční link, což se může stát, nahlaste mi jej prosím, děkuji.', '2001-06-20'),
(21, 'fffffffffffffffffff', '2007-06-20'),
Re: Ukládání datumu do DB + úprava kodu
Napsal: pon 6. črc 2009, 22:36
od arxeiss
Nechce se mi to celé číst, už jsem dneska na to moc lenivý, ale jinak datum jinak asi nejde, ale nevidím problém v PHP si udělat funkci a pak to co chceš zobrazit tak jenom protáhnout přes ní a vrátí ti to jak chceš.
Jak psal výše, proč používáš echo furt, a jěště v závorkách? Jestli ti to přijde přehlednější tak jo, ale jinak.
Potom jěště by se mohlo hodit kdyby jsi připojení k db vložil na začátek indexu, a nemusel ho tak dávat všude.
A jestli dobře chápu že chceš mít ty 2 soubory admin/aktuality.php a admin/aktuality_pridej.php v jednom souboru jako že když to otevřeš poprvé tak se ti ukáe jenom admin/aktuality.php a když vyplníš formulář a potom aby se ukázaly oba, tak normálně obsahy normálně dej k sobě, jenom na formuláři změn cestu k souboru na action="#"
Re: Ukládání datumu do DB + úprava kodu
Napsal: pon 6. črc 2009, 22:42
od KapaCZ
Ok zítra na tu juknu. Budu rád když to zítra celé zhlédneš
Ještě mě napadlo co ten datum necpat přes "funkci" datum ale prostě jen jako pouho pouhý text. To by se to pak zobrazilo rovnou a nemusel bych to takto řešit. Když sme u toho stejnak nemám pořešené že pokud to není datum tak to napíše nějakou chybu

Re: Ukládání datumu do DB + úprava kodu
Napsal: pon 6. črc 2009, 22:54
od arxeiss
Tak jo, ale pak nemůžeš využít některých požností DB jako například že když chceš vložit aktuální datum, tak ho neumíš zjišťovat přes PHP ale dodá ti ho automaticky SQL.
Jinak kontrola zadaného datumu není zas takový problém, jenom jim musíš zadat jak přesně bude vypadat. Vedle toho napíšeš ve formátu dd.mm.rrrr a pak to zkontroluješ přes podmínku a přes regulární výrazy.
Pokud si s tím chceš pohrát tak můžeš to rozšířit natolik že budeš mít třeba 5 možností zadání datumu. Jako že nemusí zadávat 01 ale stačí 1 ... ale pak už si to jenom prodlužuješ a uživateli to ulehčuješ.
Re: Ukládání datumu do DB + úprava kodu
Napsal: pon 6. črc 2009, 23:16
od KapaCZ
Jelikož jsem začátečník půlce nerozumim a druhou snad najdu na googlu.
Jelikož to bude mít využití pouze pro mě tak mi to stačí co nejjednodušeji. Až se zdokonalim určitě zdokonalim i použité php scripty případně udělám vše nově

Re: Ukládání datumu do DB + úprava kodu
Napsal: úte 7. črc 2009, 12:25
od TomTom
Datum do db ukládej v datovým typu "date". Nabízí se sice uložení jako text do varchar, ale jedná se o špatné řešení, které vede k problémům se sortováním a dalšíma operacema s datem. Při insertu ho vkládej, tak jak to děláš, to je správně. Proto taky existuje dat. typ "date". Při získávání datumu z db využij mysql fci DATE_FORMAt(), tzn. např. tento dotaz ti vytáhne datum už ve formátu x.x.xxxx - "SELECT DATE_FORMAT(datum_vlozeni, '%e.%c.%Y') AS datum FROM tab". První parametr je název sloupce v db a druhý parametr -řetězec naformátuje datum dle požadavku. Klauzule AS slouží k vytváření aliasů, ve kterém je výsledek k dispozici.
Co se týče kontroly formátu data, můžeš využít javascriptu na straně klienta nebo lépe přímo v php přes regulární výrazy nebo se podívat po netu a vygůglit si už hotovou funkci. (což by neměl být problém)
Jinak, co vím, tak mysql do sloupce datovýho typu date "sežere" jak datum 2008-12-01 tak i 2008-12-1.
Re: Ukládání datumu do DB + úprava kodu
Napsal: úte 7. črc 2009, 16:57
od arxeiss
TomTom píše:"SELECT DATE_FORMAT(datum_vlozeni, '%e.%c.%Y') AS datum FROM tab". Klauzule AS slouží k vytváření aliasů, ve kterém je výsledek k dispozici.
Co se týče kontroly formátu data, můžeš využít javascriptu na straně klienta nebo lépe přímo v php přes regulární výrazy nebo se podívat po netu a vygůglit si už hotovou funkci. (což by neměl být problém)
Jinak, co vím, tak mysql do sloupce datovýho typu date "sežere" jak datum 2008-12-01 tak i 2008-12-1.
To AS je jako že potom když to budu tahat z pole $vysledek tak do těch hranatých závorek nemusím zadávat jméno sloupce ale to co je za tím AS v tomto případě nemusím psát $vysledek['datum_vlozeni'] ale $vysledek['datum']?
Nejlepší je použít i JS a PHP je nezbytností.
Tak to jsem nevěděl, ale teoreticky je to stejně "nepoužitelné" protože chtít po uživateli aby zadával datum ve tvaru RRRR-MM-DD je trochu krkolomné. I mi se někdy plete a zadám někdy měsíc a den naopak.
Re: Ukládání datumu do DB + úprava kodu
Napsal: úte 7. črc 2009, 19:21
od TomTom
arxeiss píše:
To AS je jako že potom když to budu tahat z pole $vysledek tak do těch hranatých závorek nemusím zadávat jméno sloupce ale to co je za tím AS v tomto případě nemusím psát $vysledek['datum_vlozeni'] ale $vysledek['datum']?
Ano, přesně jak píšeš, ještě jedna finta je, že "AS" nepoužiješ vůbec, resp. je nahrazeno jen mezerou, přesto to funguje stejně - "SELECT DATE_FORMAT(datum_vlozeni, '%e.%c.%Y') datum FROM tab". Někdy to může zpřehlednit zápis.
arxeiss píše:
Tak to jsem nevěděl, ale teoreticky je to stejně "nepoužitelné" protože chtít po uživateli aby zadával datum ve tvaru RRRR-MM-DD je trochu krkolomné. I mi se někdy plete a zadám někdy měsíc a den naopak.
To samozřejmě, datum by se mělo zadávat v "českým" formátu d.m.rrrr a jen ho převést pro uložení do databáze. Já to dělám přes E_REG(). Možná existuje lepší řešení, nevím. Ale jde o to, že po uživateli nemusíš požadovat ať zadá 01.02.2009, ale stačí 1.2.2009 .
Re: Ukládání datumu do DB + úprava kodu
Napsal: úte 7. črc 2009, 22:57
od arxeiss
E_REG()? jako v SQL? Jsem nikdy neviděl, ani google nenašel a jako jinak bych řekl že to jsou regulární výrazy ne?
Re: Ukládání datumu do DB + úprava kodu
Napsal: stř 8. črc 2009, 08:29
od TomTom
Sorry, je to ereg(), bez podtržítka. Je to funkce v php viz
http://php.net/manual/en/function.ereg.php
Umožňuje výraz rozsekat na jednotlivé části podle regulárního výrazu a uložit do pole. V manualu hned první příklad ukazuje práci s datem.
Bohužel teda koukám, že je od php 5.3 deprecated a doporučují použít preg_match(), viz poznámka pod tím example.
Re: Ukládání datumu do DB + úprava kodu
Napsal: čtv 16. črc 2009, 20:10
od KapaCZ
Upravil jsem si trochu kod ještě su juknu na to echo co mám všude ze začátku to vypadalo přehledně ale už vtom mám bordel

Měl bych prozbu mohli by jste mi udělat aby mi ten datum šel do db napsat ve tvaru d.m.rrrr nebo dd.mm.rr a z db se vypsal taky v tomto formátu. plus náký to ošetření že když se napíše něco jinýho nebo jinak napíše to nákou chybu.
aktuality.php
Kód: Vybrat vše
<?php
require "./config.php"; // Pripojime se na databazi
$vypis = mysql_query("SELECT * FROM juw_nastenka ORDER BY id DESC LIMIT 0, 5"); // SQL dotaz.
echo "<table>";
while ($zaznam= mysql_fetch_array($vypis)){ // vypiseme vsechny radky, ktere vratil SQL dotaz
echo "<tr>
<td>
<strong>".$zaznam["den"]." ".$zaznam["nazev"]."</strong>
</td>
</tr>";
}// end while
echo "</table>";
?>
admin/aktuality.php
Kód: Vybrat vše
<?php
include ("./db.php");
function juw_page_content ()
{
echo ("<h3>Správa Aktualit</h3>");
if(isset($_POST['sent'])){
$nazev = $_POST['nazev'];
$den = $_POST['den'];
if($nazev=="" || $den==""){ echo "nebyly vyplněny všechny údaje";}
else{
$query = MySQL_Query("INSERT INTO juw_nastenka (`nazev`,`den`) VALUES ('$nazev', '$den')") or die ("Chyba pri vkladani dat do databaze: ".mysql_error());
if($query){ echo "Aktualita byla úspěšně přidána.";}
}
}
echo ("<form action=\"#\" method=\"post\">");
echo ("<input type=\"hidden\" name=\"sent\" value=\"\" />");
echo ("<table border=\"0\" align=\"center\">");
echo ("<tr><td align=\"left\"><b>Aktualita:</b> </td><td><textarea type=\"text\" name=\"nazev\" rows=\"6\" cols=\"23\" class=\"input\"></textarea></td></tr>");
echo ("<tr><td align=\"left\"><b><u>Den</u></b></td><td><input type=\"text\" name=\"den\" size=\"30\" maxlength=\"32\" class=\"input\" /></td></tr>");
echo ("<tr><td colspan=\"2\" class=\"sede\" align=\"left\"><br/><b>DD.MM.RRRR</b> - 07.06.2009</td><td></td></tr>");
echo ("<tr><td colspan=\"2\" align=\"right\"><input type=\"submit\" name=\"send\" value=\"Přidat\" class=\"inputbook\" /></td><td></td></tr>");
echo ("</table>");
echo ("</form>");
}
?>
SQL
Kód: Vybrat vše
--
-- Struktura tabulky `juw_nastenka`
--
DROP TABLE IF EXISTS `juw_nastenka`;
CREATE TABLE IF NOT EXISTS `juw_nastenka` (
`id` int(11) NOT NULL auto_increment,
`nazev` varchar(1000) character set utf8 collate utf8_czech_ci NOT NULL,
`den` date default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=37 ;
--
-- Vypisuji data pro tabulku `juw_nastenka`
--
INSERT INTO `juw_nastenka` (`id`, `nazev`, `den`) VALUES
(32, '32', '2001-02-20'),
(31, '31', '2003-05-20'),
(30, '30', '2004-09-20'),
(29, '29', '2004-08-20'),
(28, '28', '2004-11-20'),
(26, '26', '2007-05-20'),
(27, '27', '0000-00-00'),
(25, '25', '2007-09-20');
Re: Ukládání datumu do DB + úprava kodu
Napsal: pát 17. črc 2009, 15:15
od arxeiss
Takže se to bude ukládat jako text, tím pádem nemůžeš v db s tím datumem pracovat jako s datumem.
A můžou být teda pouze tyto dormáty d.m.rrrr nebo dd.mm.rr
A jěště má být ta kontrola tak aby nemohl zadat 30 den v únoru atd...?
Re: Ukládání datumu do DB + úprava kodu
Napsal: sob 15. srp 2009, 11:21
od KapaCZ
Ano formáty pouze d.m.rrrr nebo dd.mm.rr
Ta kontorola by byla dobrá. Juknul by si na to prosím.
Re: Ukládání datumu do DB + úprava kodu
Napsal: sob 15. srp 2009, 15:55
od arxeiss
Sorry, ale ted jsem v Anglii, mrknu ti na to az se vratim. 24. ti to sem napisu. Predpokladam ze kdyz jsi napsal po mesici tak to nespecha tolik, aby jsi nemohl pockat jeste 9 dni

Re: Ukládání datumu do DB + úprava kodu
Napsal: úte 8. zář 2009, 23:35
od arxeiss
Omlouvám se, ale zapoměl jsem na to

Naštěstí Kapa se připoměl tak jak jsem slíbil, je to tu. Udělal jsem ti jenom samotný skript na kontrolu data, myslím že zapsaní do DB nebude problém. jenom musíš mít ten sloupec kde to budeš ukládat mít jako varchar a ne jako date(time) apod. Jelikož se to uloží jako text tak poté i vypíše pouze jako text.
Můžeš vyzkoušet různé datumy ale neměla by být chyba.
Kontroluje jestli je v daném měsíci tolik dnů, nemůže zadat 32.1 nebo 31.4, v únoru podle přestupného roku taky že nemůže zadat 29.2.1900 (1900 není přestupný viz
WIKI)
Pokud chceš můžeš i vypisovat přesně kde je chyba, je to hodně větvené.
Kód: Vybrat vše
<?php
$kont=TRUE;
$pdm=TRUE;
$datum="30.5.00";
if(ereg("^[1-3]?[0-9]{1}\.{1}[1]?[0-9]{1}\.{1}([0-9]{2}|[0-9]{4})$", $datum)){
$typ=explode(".", $datum);
if(strlen($typ[2])==2){
$typ[2]="20".$typ[2];
}
if($typ[0]>0 and $typ[1]>0 and $typ[0]<32 and $typ[1]<13 and $typ[2]>1999){
if(ereg("^([13578]{1}|(10){1}|(12){1})$", $typ[1])){
if($typ[0]>31){
$pdm=FALSE;
}
}elseif(ereg("^([469]{1}|(11){1})$", $typ[1])){
if($typ[0]>30){
$pdm=FALSE;
}
}else{
if($typ[2]%4==0 and $typ[2]%100==0 and $typ[2]%400==0){
if($typ[0]>29){
$pdm=FALSE;
}
}else{
if($typ[0]>28){
$pdm=FALSE;
}
}
}
if($pdm==FALSE){
echo "neplatí";
}else{
echo ":-)";
//----------------------------------------------------------
//------ZDE DOJDE POKUD JE DATUM SPRÁVNÝ--------------------
//----------------------------------------------------------
}
}else{
echo "neplatí";
}
}else{
echo "neplatí";
}
?>
P.S. Pokud někdo najde chybu, pište
Edit: je tam chyba, doma opravim
Edit2:\\ Chyba opravena...
Re: Ukládání datumu do DB + úprava kodu
Napsal: úte 15. pro 2009, 22:29
od arxeiss
Je už to sice dávno. Ale v tom skriptu je použita funkce ereg, která už se nepoužívá a bude zrušena.
Pokud nepotřebujete kontrolovat jestli to zadal ve vámi požadovaném formátu tak
http://www.php.net/manual/en/function.checkdate.php