Autor Zpráva
ondra.prenek
Profil
Ahoj, mám udělané vkládání příspěvků na stránce pomocí php/mysql. Měl bych dotaz jak udělám automatické odstranění příspěvku? například po třech měsících že se smaže a taky jak udělám odstranění uživatelem. Například že když bude daný uživatel, co příspěvek vložil přihlášený, tak se mu ukáže u příspěvku tlačítko, nebo nějaký odkaz na odstranění příspěvku z databáze(tedy i z webu).
Jde to nějak? díky za návrhy/odpovědi
Marschmallow
Profil
ondra.prenek:
Ukládáš do databáze i čas? A v jakém formátu?
ondra.prenek
Profil
Ukládám. Vkládá se tam automaticky ve formátu Date. Pak ho akorát jinak vypisuji(aby tam nebyli pomlčky ale tečky)
juriad
Profil
ondra.prenek:
Máš nějaký důvod staré příspěvky mazat (úspora místa opravdu důvodem v dnešní době není)?
Pak by stačil proště do každého dotazu přidat jednu podmínku (datum pro porovnávání ideálně spočítej v PHP jako dnešek - 3 měsíce; jak se to má chovat vůči letnímu/zimnímu času?):
WHERE datum > '2014-09-29 12:01:59'
A pokud opravdu chceš mazat, tak jednou za čas spustíš (ručně nebo cronem) dotaz:
DELETE FROM prispevky WHERE datum < '2014-09-29 12:01:59'

Každý příspěvek má číselné ID (má ho, ne?) a to si předáš mazacímu skriptu:
<a href="smaz.php?id=1234">Smazat příspěvek 1234</a>
Mazací skript pak provede buď:
DELETE FROM prispevky WHERE id = 1234
nebo pokud nechceš mazat (není k mazání důvod, třeba existují reakce na smazaný příspěvek, které je potřeba zachovat):
UPDATE prispevky SET smazany = 1 WHERE id = 1234
a do dotazu přidáš ještě jednu podmínku:
WHERE smazany = 0
ondra.prenek
Profil
takže nejde přidat nějaký script který to jednou za tři měsíce smazal? nejsou to příspěvky ale inzeráty a chtěl bych aby ten web byl aktuální. Blbě jsem to napsal.. :)
juriad
Profil
V databázi klidně můžou zůstat. Jen do všech dotazů přidáš podmínku, že chceš jen ty novější než 3 měsíce.

Takový skript lze napsat, ale spíš je problém v tom, co ho spustí. Můžeš testovat při každém výpisu, zda je nějaký inzerát ke smazání, ale to asni není úplně ono. Další možností je ruční spuštění (pokud adminovi bude připadat, že jsou tam moc staré inzeráty, prostě stiskne tlačítko). A poslední možností je cron nebo nějaký jiný plánovač, který spustí skript v naplánovaný okamžik (třeba první den v měsíci).
Marschmallow
Profil
ondra.prenek:
Takže máš u inzerátů nějaké číselné ID, které je s každým dalším inzerátem vyšší?
ondra.prenek
Profil
jo každý inzerát má přidělený id i datum vložení. A jak by ten script měl vypadat? Líbí se mi ten s tím že se spustí začátkem měsíce
juriad
Profil
Na hostingu je nejčastějším plánovačem cron nebo jeho obdoba (nezadává se obecně příkaz, ale cesta k php skriptu). Ale poptej (myšleno přečti si dokumentaci) se svého hostingu. Často se nastavuje někde ve webovém rozhraní a často je omezený počtem nebo frekvencí událostí.
Konfigurace může vypadat takto:
0 0 1 * * skript.php

A skript.php bude zastrčený v neveřejné části hostingu (tak, aby nebyl zvenku dostupný).
Tento skript prostě spočítá datum před třemi měsíci a položí dotaz do databáze na smazání starých inzerátů; spuštěn 1. ledna bude dotaz vypadat takto:
DELETE FROM prispevky WHERE datum < '2014-10-1 0:00:00'

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: