Autor Zpráva
sheep
Profil *
Chtel jsem se zeptat jestli nekdo zna jak napsat script,nebo nastavit databazi aby kdyz pridam odkaz(zaznamenavam do databaze datum),po uplynuti treba 10 dnu se odkaz z databaze sam auto vymazal.Diky predem za odpoved.
kiflik
Profil
$konec = date("Y-m-d",mktime (0,0,0,date("m") ,date("d")-10,date("Y")));

$smazat = MySQL_Query("DELETE FROM xxxx WHERE datum>'$konec'");

a Cron nebo na začátek stránky nebo každý den kliknout
sheep
Profil *
Diky to je presne co potrebuji,jen jeste mala otazecka.Pres cron bzch to nedelal,je mi privetivejsi rovnou do stranky.Je nutny kliknout kazdy den?Pokud to budu mit umisteno jako prvni v pozici.A az po tomhle zasahu budu nacitat aktualni data,z databaze tak je jedno jestli kliknu az treti den.Je to tak?Protoze skript porovnava aktualni datum s datumem u jednotliveho odkazu..
sheep
Profil *
Tak mam smutnou zpravu ze to nefunguje jak jsem ocekaval,pokud je datum v danem mesici tak vsechno bezi jak ma.Ovsem pokud je datum treba 8.6. a ja chci mazat po deseti dnech,bohuzel z predchazejiciho mesice to nejak nefunguje.Takze ten kdo udela zapis do databze na prelomu mesice,tak tento zapis je ignorovan.Nevim co stim.
sheep
Profil *
Tak ted jsem z toho trochu mimo.muze mi nekdo vysvetlit jak je mozny ze prikaz
$smazat = MySQL_Query("DELETE FROM xxxx WHERE datum<'$konec'"); se neprovede v databazi korektne.
V databazi je datum 25-05-2007 a ja zadam rucne na zkousku $konec = "12-06-2007";

Tak se zaznam nesmaze?? Odjakziva 12.6 je vetsi nez 25.5 tomu trochu nerozumim a databaze asi taky ne.

Diky za pripadne rady.
Kajman_
Profil *
Použijte sloupeček typu date, kde je pak zápis 2007-06-12.
sheep
Profil *
Koukam ze si asi nerozumime.Ja sloupec kde se zaznamenava datum pouzivam a jak pisi o trochu nahore,ze vsechno funguje.Ale pokud je datum z jineho mesice tak bohuzel ne.A nevim jestli chybu delam nekde ja.Ze by delala chybu databaze to se mi nezda.
Aleš Janda
Profil
sheep: protože kiflik ti špatně poradil s tím datumem. Správně to má být

$konec = date("Y-m-d",Time()-10*24*60*60);
sheep
Profil *
aha,zkusim to,jestli se muzu zeptat jestli by jsi me trochu nerozebral tenhle prikaz.Nechci jen davat neco kdyz nevim co to dela.Jen tak pro zajimavost.Co dela TIME a proc tech*24*60*60
sheep
Profil *
Tohle mi hlasi chybu

Parse error: syntax error, unexpected ',' in /domains1/do589700/public/www_root/demo/prod.php on line 40
Kajman_
Profil *
Koukam ze si asi nerozumime.Ja sloupec kde se zaznamenava datum pouzivam

Psal jsem, že ten sloupeček má být typu date, protože podle Vašeho příspěvku to vypadalo spíš na nějaký varchar.
djlj
Profil
Co dela TIME
http://php.net/time

Tohle mi hlasi chybu
Tak tam máš holt chybu.
sheep
Profil *
To Kajman : varchar nedo date je to uplne jedno oboji se chova stejne..

Chybu mam ale v tom prikazu tak jak jsem jej zkopiroval tak tam je.Chyba je zrejme v syntaxi toho prikazu s TIME.Nevadi stejne diky.
kiflik
Profil
Aleš Janda
můžu vědět co je špatně na date("Y-m-d",mktime (0,0,0,date("m"),date("d")-10,date("Y")));
Aleš Janda
Profil
kiflik:
Myslel jsem, že když vytváříš datum ze záporného dne, je to chyba. Teď jsem to ale zkoušel a PHP je opravdu tak inteligentní, že samo posune i měsíc/rok.
V tom případě se omlouvám, tvůj zápis se mi zdá jako velice dobrý.
kiflik
Profil
sheep
echo $konec = date("Y-m-d",mktime (0,0,0,date("m") ,date("d")-20,date("Y")));
echo $konec = date("Y-m-d",Time()-20*24*60*60);

oboje vrátí stejné datum: 2007-06-13 - 20dnů = 2007-05-24

a jak psal Kajman_ při porovnávání je nutné mít v tabulce (xxx) sloupeček (datum) - typ date (rrrr-mm-dd)
kiflik
Profil
Aleš Janda ničevo :-)

$tomorrow = mktime (0,0,0,date("m") ,date("d")+1,date("Y"));
$lastmonth = mktime (0,0,0,date("m")-1,date("d"), date("Y"));
$nextyear = mktime (0,0,0,date("m"), date("d"), date("Y")+1);

viz:
PHP manuál
Kajman_
Profil *
sheep
varchar nedo date je to uplne jedno oboji se chova stejne..

V tomhle nesprávném úsudku je zásadní chyba Vaší aplikace.
sheep
Profil *
Nechci zde rikat jaky je muj usudek.Ale vysvetluji zde veci ktere mi nefunguji.To znamena ze jsem je zkousel.A proto znova prikladam ze je jedno jestli jsem sloupec zmenil na VARCHAR nebo ho mam jako DATE.Obe varianty jsou stejne a je to divne funguji a chovaji se stejne.
Uvedeny priklad od kiflika je funkcni,vyzkousel jsem jaky datum generuje a opravdu posune i mesic.
Ale problem ktery jsem resil ze to nefunguje korektne,je takovy jestli to nekdo zkousel v databazi.
Protoze pokud provedu prikaz
$smazat = MySQL_Query("DELETE FROM xxxx WHERE datum<'$konec'");

a budu mit v databazi v tabulce nekolik zaznamu ktere jsou z predesleho mesice nez je $konec se proste nesmazou,alespon me ne.Tak si myslim ze je to spis veci MYSQL nez PHP.
Na vysvetlenou :
V tabulce jsou tri zaznamy a to s datumem 8.6.2007,1.6.2007 a 25.5.2007
dnes je 13.6.2007 dostanu vygenerovany datum -10,coz znamena ze se ma smazat vse co je mensi nez 3.6.2007.
Ted ale nastava ten problem ze se smaze jen zaznam s datumem 1.6.2007 ale zaznam 25.5.2007 NE.A ja resim proc.To jsem zde jiz o nekolik urovni ale psal.
Aleš Janda
Profil
A v jakém formátu zapisuješ to datum? RRRR-MM-DD?
sheep
Profil *
Nejdrive jsem mel DD-MM-RRRR potom jsem si rekl ze to muze byt prave spatne a zapisuji ho jako RRRR-MM-DD.Take jsem opravdu mel datum jako VARCHAR a zmenil ho na DATE ale stejny.Bez vysledku.
kiflik
Profil
když pustíš na tabulku dotaz select from xxx where datum='2007-5-25' vyleze Ti co?
Kajman_
Profil *
delete from tabulka where sloupecek_typu_date<date_sub(curdate(), interval 10 day)
sheep
Profil *
Tak jsem zkousel posledni prispevek od Kajmana a ten funguje perfektene.Prohledal jsem i diskuzi na Intervalu a tam mi jeden clen poradil to same co Kajman.Je lepsi to prenechat na Databazi cele,nez to delat pres PHP.
Kdo ma tedy zajem muze pouzivat,vyzkousel jsem.Timto dekuji vsem za podporu a cas nad stravenym problemem.
Toto téma je uzamčeno. Odpověď nelze zaslat.