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é.

  1. 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.....
  2. 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 ;-)
  3. 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 ;-)
  4. > 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.
  5. 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.

← Zpět na všechna témata