Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Banowanie rekordu po uplywie n dni
Forum PHP.pl > Forum > Bazy danych > MySQL
wasik89
Witam. oto moj skrypcik ktory oczywiscie nie dziala winksmiley.jpg meczylem sie dlugo, ale nie spelnia swych zadan...

  1. #Zabanowanie wpisu po minieciu ustalonego w zamowieniu okresu dni.
  2.  
  3. $czas_aktywacji2 = $mysql['czas_aktywacji'];
  4. $ilosc_trwania_dni = $mysql['czas_trwania'];
  5.  
  6. $ilosc_trwania_dni_sekundy = $ilosc_trwania_dni * 24 * 3600;
  7. $data_zakonczenia = $czas_aktywacji2 + $ilosc_trwania_dni_sekundy;
  8. $ilosc_sekund_do_konca = $data_zakonczenia - mktime();
  9. $ilosc_dni_do_konca_warunek = $ilosc_sekund_do_konca / 86400;
  10.  
  11. if($ilosc_dni_do_konca_warunek < 0 && $mysql['aktywnosc'] == 1)
  12. {
  13. $zero2 = 0;
  14. mysql_query("UPDATE reklama SET aktywnosc='$zero2' WHERE czas_aktywacji < DATE_SUB(CURDATE(),INTERVAL $ilosc_trwania_dni DAY) ");
  15. }


Skrypt wykonuje sie do zapytania sql smile.gif czyli w nim samym jest problem... prosze o rade i dziekuje smile.gif btw... nie odsylajcie do manuali bo wlasnie w oparciu o nie skleilem cos takiego.

Pozdrowki.
scanner
  1. mysql_query("UPDATE reklama SET aktywnosc='$zero2' WHERE czas_aktywacji < DATE_SUB(CURDATE(),INTERVAL $ilosc_trwania_dni DAY) ") or die( mysql_error() );

I zobacz jaki błąd Ci zwraca.
Ja stawiałbym na to, że zamotałeś się w łączeniu zmiennych w tym zapytaniu.

Ahh.. i zmień z łaski swojej tytuł wątku, bo warna zaliczysz.
wasik89
Dziekuje za odpowiedz.

Wiec tak : po dodaniu or die nie zwraca mi doslownie zadnego bledu ... czyli cos sie wykonuje, ale nie tak jak trzeba ;]
jak za 'echowalem' zapytanie to dostalem cos takiego :

  1. UPDATE reklama SET aktywnosc='0' WHERE czas_aktywacji < DATE_SUB(CURDATE(),INTERVAL 30 DAY);


co niby tez jest dobre ... a mimo to aktywnosc nadal jest 1 . Nawet skrypcik wczesniej dobrze rozpoznaje wlasciwy rekord ktory ma zablokowac , ale zapytanie nie daje rady sad.gif
nospor
Cytat
Ahh.. i zmień z łaski swojej tytuł wątku, bo warna zaliczysz.
warna dawac nie bede ale temat zamkne i bede grzecznie czekal az na PW przeslesz nową propozycję tytułu

edit: otwieram
Mchl
A co dostajesz jak puścisz:

  1. SELECT * FROM reklama WHERE czas_aktywacji < DATE_SUB(CURDATE(),INTERVAL 30 DAY);
thek
A może chodzi o prostą różnicę między 0 i '0' dla aktywność. W końcu to string czy int? smile.gif
milmen
To może tak:
  1. mysql_query("UPDATE reklama SET aktywnosc=".$zero2." WHERE czas_aktywacji < NOW() + INTERVAL $ilosc_trwania_dni DAY");
Mchl
Cytat(thek @ 25.01.2010, 13:38:51 ) *
A może chodzi o prostą różnicę między 0 i '0' dla aktywność. W końcu to string czy int? smile.gif


Kod
SELECT 0 = '0'
wasik89
Wlasnie co do wartosci 0 to jest ok smile.gif jak zmienilem w warunku z < na > to skrypt zabanowal mi wszystkie wpisy ;]
aktywnosc mam w tabeli jako tinyint.

  1. mysql_query("UPDATE reklama SET aktywnosc=".$zero2." WHERE czas_aktywacji < NOW() + INTERVAL $ilosc_trwania_dni DAY");


To tez banuje mi wszystkie wpisy smile.gif
Prawda ze dziwne ? smile.gif
Mchl
Nie dziwnie, tylko wskazuje na to, że nie ma wierszy spełniających ten warunek (tak więc wszystkie wiersze spełniają zaprzeczenie tego warunku)
wasik89
A wlasnie ze dziwne ...

bo if spelnia warunek. jakbym zamiast mysql_query dal echo'doszlo'; to wypisaloby doszlo...
Czym sie rozni moje rozumowanie z zapytania od tego calego rachunku na zmiennych przed ifem ;]
Mchl
If ifem, a co w bazie to inna historia. Tak jak mówiłem, zapuść SELECT z takim samym warunkiem WHERE i zobacz ile wierszy Ci zwróci.

Jesteś pewien że wartości które masz w tablicy $mysql są prawidłowe? My ich w ogóle nie widzimy, to możemy się tylko domyślać co tam jest.
wasik89
A no ok wiec tak tabela w bazie ma czesciowo taka postac :

aktywnosc tinyint
natomiast data dodania i data aktywacji dalem w "intidżerach" i juz tlumacze czemu:
Gdyz phap dobrze przelicza mi wszystkie rzeczy zwiazane z rachunkami , dobrze rozpoznaje dnie itp itd.
Wiec nie ma samego problemu z tym. Natomiast jezeli daty nie ma to po prostu jest zero i prosciej mi jakis
warunek dac w calosci ... bo jak mam pole date czy inne to 0000-00-00 jakos warunki nie widza ze to jest pusta data i nijak sie do tego odwolac ;]

Byc moze mysql ma problem z tym bo widzi w bazie zamiast wlasnie 2010-01-25 to 1264451757 choc chyba nie powinno byc z tym newansow skoro php sobie radzi hmm ?
Mchl
Niestety. Dla MySQL data 2015-01-25 w kontekście liczbowym to 20150125. Daty musisz porównywać z datami, a stemple czasowe ze stemplami czasowymi.
Masz w php strtotime() i date(), a w MySQL FROM_UNIXTIME() i UNIX_TIMESTAMP
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.