smazat data z databáze v určitý datum
5 příspěvků
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
Potřebuju pomoct, vymejšlím na stránky jednoduchý weblog, díky kterému se dají zapisovat plánované akce. Dále při zobrazování to chci vymyslet, aby to zkontrolovalo datum akce a současné datum, a pokud bude akce starší, aby ji to nezobrazovalo a rovnou ji to smazalo z databáze. V tabulce mám tři sloupky: CREATE TABLE planovane ( datum int NOT NULL PRIMARY KEY, nazev varchar(60) NOT NULL, popis text NOT NULL,) Ten soubor, kterej má zobrazovat, mi ale nefunguje. Hází mi to chybu: Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in c:\apache\htdocs\a\zobrazit.php on line 6 Vypadá takto: <? mysql_Connect("localhost"); $zaznam = mysql("akce", "SELECT * FROM planovane ORDER BY datum"); while ($zaznam = MySQL_Fetch_Array($result)): if($zaznam["datum"] < Time()): // datum akce je mensi nez aktualni mysql("akce", "DELETE FROM planovane where datum=$zaznam["datum"]"); else: $result = mysql("akce", "SELECT * FROM planovane ORDER BY popis"); while ($result = MySQL_Fetch_Array($result)): echo $result["popis"]; endwhile; endif; endwhile; ?> Nevíte, jak lépe ten soubor napsat? Nebylo by třeba lepší těm akcím dát ID, které by se samo generovalo a díky němu by se pak jednodušeji akce z databáze mazali? Prosím poraďte.....
-
1) nepoužívej datum jako primární klíč, nemusí být vždy unikátní (2 akce v 1 den) 2) na řádku 6 máš jednoduchou syntaktickou chybu - uvozovky vnořené do druhých uvozovek (konkrétně místo $zaznam["datum"] dej $zaznam['datum']) 3) netuším, co znamená ten první parametr nesmyslné funkce mysql Zkus to třeba takto : CREATE TABLE planovane ( id int(11) NOT NULL auto_increment, datum int(11) NOT NULL default '0', nazev varchar(60) NOT NULL default '', popis text NOT NULL, PRIMARY KEY (id) ) /* datum ukladej jako unixovy cas - fce Time() - pocet sekund od 1.1.1970 (?) */ <? $spojeni = @MySQL_Connect($db_server, $db_user, $db_password) or Die("Nepodařilo se připojit k databázi!"); $db = @MySQL_Select_DB($db_name, $spojeni) or Die("Nepodařilo se připojit k databázi!"); $sql = "DELETE FROM planovane WHERE datum < " . Time(); $query = MySQL_Query($sql); $query = MySQL_Query("SELECT * FROM planovane ORDER BY datum"); while ($result = MySQL_Fetch_Array($query)) { echo $result['datum'] . " | " . $result['nazev'] . " | " . $result['popis'] . "<BR>\n"; } MySQL_Free_Result($query); MySQL_Close($spojeni); ?> Snad jsem tam neprehledl nejakou chybu a fungovat to bude :>) A treba ti poradi nekdo jeste lepe ;-)
-
No, myslím, že ta odpověď byla vyčerpávající. Chtěl jsem původně napsat pár připomínek, ale po přečtení jsem zjistil, že jsou zavádějící, tak se omezím jen na tuhle: Místo php fce Time() můžeš použít přímo fci MySQL UNIX_TIMESTAMP() takže ten jeden řádek by pak byl: $sql = "DELETE FROM planovane WHERE datum < UNIX_TIMESTAMP()"; PS: Tohle jsem napsal, abych mohl také něčím přispět a dělat chytrýho, když už to Pavel tak skvěle popsal ;-)
-
> UNIX_TIMESTAMP() Taky jsem uvažoval, jestli mu to tam nedám, ale snazší je imho nejprve pochopit všechny funkce php... A taky se mi zdá, že může nastat problém v různě natsveném času na webovém a databázovém serveru (i když by se to stávat nemělo). Stejně je to taková prkotina :-) p.s.: Určitě by to šlo napsat lépe, já to jen narychlo vysvětloval.
-
S rozdílným časem u servru na kterém běží PHP a MySQL jsem se setkal. Člověk prostě musí používat to, nebo ono raději neriskovat míchání php fcí s MySQL funkcema, neboť pak můžou vycházet zajímavé výsledky. Jinak nevím, jak lépe to napsat. Určitě je to dobré a jen by se to dalo zestručnit na míru té oné konkrétní aplikaci.