[php/mysql] Automatyczne usuwanie wpisów

Witam ponownie.

Czy da radę zrobić tak, aby wpis usuwany był z bazy automatycznie o określonej dacie? Gdy jednym z rekordów jest data na podstawie której wpis był by usuwany?

Musisz mieć na serwerze CRONA.

http://home.pl/pomoc/funkcje/cgi/cron

hhhmm…

A może bało by się zrobić, aby wpis był w bazie ale nie był wyświetlany gdy obecna data będzie równa lub większa od tej zapisanej w bazie?

ps. Format daty zapisanej w bazie jest taki- 01 sty 2007 00:00:00

Oczywiście;]

Pobierasz wszystkie dane z bazy, potem w pętli wszystkie je “przebierasz” i wyświetlasz tylko te, które mają odpowiednią datę (za pomocą warunku IF);

Powiedzmy, że nie do końca rozumiem;p

Ale jak w IF’ie porównać takie coś:

Datę nalezy przekształcić do formatu timestamp. W twoim przypadku będzie to trochę zawiłe, ale wszystko się da zrobić. Powinien działać ten kod, choć nie testowałem go, może wywalać jakiś błąd:

<?

include ("data.php");

$daty=explode(' ',$data);

$godziny=explode(':',$daty[3]);

if($daty[1]=='sty') $daty[1]=1;

else if($daty[1]=='lut') $daty[1]=2;

else if($daty[1]=='mar') $daty[1]=3;

else if($daty[1]=='kwi') $daty[1]=4;

else if($daty[1]=='maj') $daty[1]=5;

else if($daty[1]=='cze') $daty[1]=6;

else if($daty[1]=='lip') $daty[1]=7;

else if($daty[1]=='sie') $daty[1]=8;

else if($daty[1]=='wrz') $daty[1]=9;

else if($daty[1]=='paź') $daty[1]=10;

else if($daty[1]=='lis') $daty[1]=11;

else if($daty[1]=='gru') $daty[1]=12;

$timestamp=mktime($godziny[0],$godziny[1],$godziny[2],$daty[1],$daty[0],$daty[2]);

mysql_connect ("localhost", "xxxxx", "xxxxx") or

die ("Error!");

mysql_select_db ("xxxxx") or

die ("Error!");


$wynik = mysql_query ("SELECT * FROM wpisy ORDER BY `nr` DESC");

while ($wynik && $rekord = mysql_fetch_array ($wynik)) {

if ($rekord[kategoria] == "Antyki i Sztuka") {


if ($rekord['data_koniec'] > $timestamp) echo "Xxxxxxxxx";


}

}

?>
include ("data.php");

kutar: podaj jeszcze zawartość pliku data.php

buahahahaha, a skąd ja mam go znać?! To chyba nie do mnie powinno być pytanie;p LOL

Swoją drogą to nic mi (nam) po tym kodzie data.php. Nie wiem po co kubar3k to chciał… Działa Ci ten mój kodzik?

Generalnie działa ale musiałem zmienić “<” na “>” w tym if’ie"

// edit

chyba jednak nie działa;p

// edit

Gdy jest “<” to nie wyswietla się nic, nawet jak $rekord[data_koniec] jest mniejsza. Przy “>” wyświetla się wszystko…

Powiedz w jakim formacie przechowujesz datę w bazie (czyli zmienna $rekord[‘data_koniec’] ) i w zmiennej $data

d n Y H:i:s

Przy czym “n” zamienione jest na język polski.

Zauważyłem, że datę aktualną generujesz w w pliku data.php i masz ją w zmiennej $data. I od razu w tej zmiennej można przecież dać timestamp. Bo w ten sposób jedziemy do Zakopanego przez Gdańsk… A mój błąd bo nie skojarzyłem że w bazie masz tą datę “po polsku”. OK, poprawiam kod:

<?

$data=time();

mysql_connect ("localhost", "xxxxx", "xxxxx") or

die ("Error!");

mysql_select_db ("xxxxx") or

die ("Error!");


$wynik = mysql_query ("SELECT * FROM wpisy ORDER BY `nr` DESC");

while ($wynik && $rekord = mysql_fetch_array ($wynik)) {

if ($rekord[kategoria] == "Antyki i Sztuka") {


$daty=explode(' ',$rekord['data_koniec']);

$godziny=explode(':',$daty[3]);

if($daty[1]=='sty') $daty[1]=1;

else if($daty[1]=='lut') $daty[1]=2;

else if($daty[1]=='mar') $daty[1]=3;

else if($daty[1]=='kwi') $daty[1]=4;

else if($daty[1]=='maj') $daty[1]=5;

else if($daty[1]=='cze') $daty[1]=6;

else if($daty[1]=='lip') $daty[1]=7;

else if($daty[1]=='sie') $daty[1]=8;

else if($daty[1]=='wrz') $daty[1]=9;

else if($daty[1]=='paź') $daty[1]=10;

else if($daty[1]=='lis') $daty[1]=11;

else if($daty[1]=='gru') $daty[1]=12;

$timestamp=mktime($godziny[0],$godziny[1],$godziny[2],$daty[1],$daty[0],$daty[2]);


if ($timestamp < $data) echo "Xxxxxxxxx";


}

}

?>

I wtedy niepotrzebny jest już plik data.php . Jak się nigdzie nie pomyliłem znowu to powinno działać;]

Dzięki! kutar :mrgreen:

Po wstępnych testach działa bez zarzutu. :stuck_out_tongue:

Złączono Posta : 08.01.2007 (Pon) 20:50

Myślę, że dało by się zrobić coś takiego:

AA, czyli rozumiem, że jeśli data jest nieodpowiednia to ma usunąć wpis z bazy. Ale tu jest jedno “ale”. Dopóki skrypt ten (usuwanie) nie zostanie odpalony, to w bazie będą cały czas te nieaktualne dane. Nie wiem czy to będzie przeszkadzać Ci, ale w razie co zwracam uwagę.

i jeszcze jedno, popraw tutaj:

else mysql_query ("DELETE FROM wpisy WHERE `data_koniec` = '$rekord[data_koniec]'");