Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sprawdzanie wpisu - porównywanie - usuwanie
Forum PHP.pl > Forum > PHP
majesgrudziadz
Borykam się z takim problemem i nie wiem - nie mogę sobie przypomnieć.
Może ktoś z was mi przypomni jak tego dokonać.

Mianowicie jest tabela zawierająca następujące wpisy:

id_aut
email
kod_autoryzacji
data_wygasniecia ---> zapisana w formacie Y.m.d - H:i:s czyli 2012.02.02 - 18:02:45


mój kod wygląda tak w zasadzie jego początek:
  1.  
  2. <?
  3.  
  4. require 'config.php';
  5.  
  6. // Tworzy aktualną datę w formacie RRRR.MM.DD - GG.MM
  7. $data_aktualna = date('Y.m.d - H:i:s');
  8.  
  9. // Sprawdza czy istnieje autoryzacja która miała ważność do daty aktualnej
  10. $data_sprawdzona = mysql_query("SELECT * FROM `autoryzacja` WHERE `data_wygasniecia`='$data_aktualna'");
  11. $data_sprawdzona = mysql_fetch_array($data_sprawdzona);
  12.  
  13. // Jeżeli jest taka autoryzacja to ją usuwa.
  14. if ($data_sprawdzona['data_wygasniecia'] <= $data_aktualna) {
  15. echo "Jest autoryzacja do usunięcia";
  16. }else{
  17. echo "Nie ma autoryzacji do usunięcia";
  18. }
  19. ?>
  20.  


Nie ważne jaka jest ta data to zawsze pokazuje ze jest autoryzacja do usuniecia

Moje pytanie: Jak sformułować zapytanie if aby brał pod uwagę że data wygaśnięcia jest mniejsza lub równa od daty aktualnej ? bo w ten sposób coś mi nie działa
viking
Wykorzystaj moc bazy. Zobacz manual NOW() zamiast bawić się w $data_aktualna. Potrzebujesz tego Selecta? Bo możesz wykorzystać
  1. DELETE FROM autoryzacje WHERE data_wygasniecia<=NOW();
majesgrudziadz
Kolego viking a jak było by lepiej ?

twój sposób czy na wykorzystanie mocy bazy czy mój sposób który właśnie poprawiłem i powinien działać ... jeszcze to sprawdzę smile.gif

  1. <?
  2.  
  3. require 'config.php';
  4.  
  5. // Pobiera aktualną datę w formacie RRRR.MM.DD - GG.MM
  6. $data_aktualna = date('Y.m.d - H:i:s');
  7.  
  8. // Pobiera daty aktywacji i wyswietla je
  9. $data_sprawdzona = mysql_query("SELECT * FROM `autoryzacja`");
  10.  
  11. while($data_sprawdzona = mysql_fetch_array($data_sprawdzona)) {
  12.  
  13. if ($data_sprawdzona['data_wygasniecia'] <= $data_aktualna) {
  14. //Tutaj usuwamy jeżeli data wygaśnięcia jest starsza niż data aktualna
  15. }
  16.  
  17. }
  18.  
  19. ?>


Bo z tego co mi się wydaje to NOW() zapisze date w formacie RRRR-MM-DD GG:MM:SS a ja mam format daty RRRR.MM/DD - GG:MM:SS
viking
Twoje pole w bazie musi być typu daty więc nie ma możliwości żeby nie porównało. Chyba że jakimś cudem jako string wcisnąłeś. To co robisz jest bezsensowne. Obciążasz bazę niepotrzebnym selectem, obciążasz serwer parsowaniem by w końcu zrobić to, co ci podałem.
majesgrudziadz
Moja wersja sprawdzona i działa w 100%

  1. <?
  2.  
  3. require 'config.php';
  4.  
  5. // Pobiera aktualną datę w formacie RRRR.MM.DD - GG.MM
  6. $data_aktualna = date('Y.m.d - H:i:s');
  7.  
  8. // Pobiera daty aktywacji i wyswietla je
  9. $data_sprawdzona = mysql_query("SELECT * FROM `autoryzacja`");
  10.  
  11. while($data_sprawdzona = mysql_fetch_array($data_sprawdzona)) {
  12. echo "Aktualna data ".$data_aktualna." jest większa od dat:<br><br>";
  13. if ($data_sprawdzona['data_wygasniecia'] <= $data_aktualna) {
  14. //Wyświetla daty mniejsze bądź równe dacie aktualnej
  15. echo $data_sprawdzona['data_wygasniecia'];
  16. }
  17.  
  18. }
  19.  
  20. ?>


Co do obciążania to zadaje pytanie select czyli twoja wersja również zada pytanie select
Moja wersja usuwa wpisy jeżeli tak samo jak twoja

Więc nie widzę różnicy w obciążalności serwera jednakże z ciekawości wypróbuję twoją wersję gdyż jak już pisałem w poprzednim poście ... dawno nie pisałem scryptów, dużo się pozmieniało, więc nie dość, że muszę sobie wszystko przypomnieć to i pouczyć się nowych możliwości więc każda rada i propozycja jest dla mnie przydana smile.gif więc sprawdzę to smile.gif


Hmm jednak moja wersja nie działa tak do końca ... wyświetla tylko 1 zapytanie reszty nie chce ... może ktoś podpowie dlaczego ?
viking
A gdzie ja robię selecta? Jak będziesz miał milion rekordów to wszystkie wybierzesz, po czym je ziterujesz w PHP żeby kilka skasować? Naprawdę zrób jak Ci mówię bo nie potrzebujesz inaczej.
majesgrudziadz
Zrobiłem po swojemu ... takich rekordów w bazie to będzie koło 2 na tydzień smile.gif jak dobrze pójdzie...

Jak próbowałem zrobić tak jak pokazałeś to nie generuje mi daty :/

Btw w późniejszej fazie kodu wyciągam jeszcze z tabeli adres email i wg niego usuwam usera który nie aktywował konta w przeciągu 24h więc już totalnie nie wiem jak zrobić to po twojemu smile.gif bo usunie wszystkie wpisy ... a jak mam wtedy usunąć userów ?

Dlatego zostałem przy mojej wersji.
viking
A pokaż mi jak wiążesz z tabelą użytkowników? Trochę schemat rozjaśnij.
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.