Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Sprawdzanie upływania terminu ważności
Forum PHP.pl > Forum > Przedszkole
pawel06281990
Witam,

mam problem próbuje zrobić sprawdzanie daty w bazie danych przed upływem terminu ważności opłaty, w tabeli mam date 31/12/2021 i chce, aby skrypt dodał go do innej bazy.

  1. $res2 = $wpdb->get_results("SELECT * FROM ".WYSZUKIWARKA_TABLE." WHERE oplata_pokladne < DATE_SUB( current_date() - INTERVAL 3 DAY) group by oplata_pokladne");
  2.  
  3. if ($res2) {
  4. foreach ($res2 as $data) {
  5. if ($data->oplata_pokladne < date("d/m/Y", time()) && $data->oplata_pokladne != "00/00/0000") {
  6. var_dump($data->oplata_pokladne);
  7. $wpdb->query("INSERT INTO ". WYGASA_TABLE." SET imie='".$data->imie."', nazwisko='".$data->nazwisko."', data_urodzienia = '".$data->data_urodzienia."', data_smierci='".$data->data_smierci."', sektor='".$data->sektor."', rzad='".$data->rzad."', pole_grobu='".$data->pole_grobu."', oplata_pokladne='".$data->oplata_pokladne."', zmarly_id='".$data->Id."', status='wygasa' ");
  8. }
  9. }
  10. }


Gdzie jest błąd??
Neutral
Problem jest z ifem, czy INSERTem?

https://www.php.net/manual/en/function.mktime.php
  1. //define('DATE_ANYF', '2004-08-19 00:45:33');
  2.  
  3. if(mktime(0, 45, 33, 8, 19, 2004)<// ....
pawel06281990
Z ifem inser dodaje do bazy

w bazie mam różne daty mam daty które już przeminęły rok temu a nawet 2 lata temu mam np.24/10/2018 a w typ przykładzie

  1. if(mktime(0, 45, 33, 8, 19, 2004)


to date trzeba ręcznie wpisać.
Neutral
  1. $date_slash = '2009/06/22';
  2.  
  3. $date_slash = explode('/', $date_slash);
  4.  
  5. list($year, $month, $day) = $date_slash;
  6.  
  7. //$year; // 2009
  8. //$... // 06
  9. //$... // 22
  10.  
  11. mktime(0,0,0,$month,$day,$year);
pawel06281990
Cytat(Neutral @ 28.12.2021, 20:00:12 ) *
  1. $date_slash = '2009/06/22';
  2.  
  3. $date_slash = explode('/', $date_slash);
  4.  
  5. list($year, $month, $day) = $date_slash;
  6.  
  7. //$year; // 2009
  8. //$... // 06
  9. //$... // 22
  10.  
  11. mktime(0,0,0,$month,$day,$year);


Ok, ale w bazie to ja przetrzymuję pełną date w tej kolejności 31/12/2021

bo sprawdziłem i to mktime to podaje 1647882382 więc mi nie zadziała.

chyba ze zrobię to tak


  1. $date_slash = '2009/06/22';
  2.  
  3. $date_slash = explode('/', $date_slash);
  4.  
  5. list($year, $month, $day) = $date_slash;
  6.  
  7. echo date('d/m/Y',mktime($date_slash[0],$date_slash[1],$date_slash[2]));



ale jeszcze nie testowałem.

EDIT:

Zrobiłem tak


  1. $res2 = $wpdb->get_results("SELECT * FROM ".WYSZUKIWARKA_TABLE." WHERE oplata_pokladne < DATE_SUB(current_date() - INTERVAL 3 DAY) group by oplata_pokladne");
  2.  
  3. if ($res2) {
  4. foreach ($res2 as $data) {
  5. $date_slash = $data->oplata_pokladne;
  6.  
  7. $date_slash = explode('/', $date_slash);
  8.  
  9. list($year, $month, $day) = $date_slash;
  10. if ($data->oplata_pokladne < date('d/m/Y',mktime(0,0,0,$month,$day,$year))) {
  11. var_dump($data->oplata_pokladne);
  12. $wpdb->query("INSERT INTO ".WYGASA_TABLE." SET imie='".$data->imie."', nazwisko='".$data->nazwisko."', data_urodzienia = '".$data->data_urodzienia."', data_smierci='".$data->data_smierci."', sektor='".$data->sektor."', rzad='".$data->rzad."', pole_grobu='".$data->pole_grobu."', oplata_pokladne='".$data->oplata_pokladne."', zmarly_id='".$data->Id."', status='wygasa' ");
  13. }
  14. }
  15. }


ale nie mam żadnej reakcji.
Neutral
Zamień

list($day, $month, $year) = $date_slash;


Ogólnie

U Ciebie $year jest na 3, $day na 1.
"06/08/2014"

U mnie,
"1367/08/18"
pawel06281990
Ok zmieniłem, ale zauważyłem, że mam problem zapytanie do bazy o sprawdzianie 3 dni przed końcem

To jest moje zapytanie sprawdzające
  1. $res2 = $wpdb->get_results("SELECT * FROM ".WYSZUKIWARKA_TABLE." WHERE oplata_pokladne > DATE_SUB( current_date(), interval 3 DAY ) group by oplata_pokladne ");


i jak sprawdzam go

  1. var_dump($res2);


To mam taki wynik

  1. array(0) { }


To znaczy, że nic mi nie sprawdza .
Neutral
No dobra.

https://dev.mysql.com/doc/refman/8.0/en/using-date.html


Usuń grupowanie.

Cytat
The format of a DATE value is 'YYYY-MM-DD'. According to standard SQL, no other format is permitted. You should use this format in


pawel06281990
Zrobiłem inaczej i mi to działa dodaje mi z datami przestarzałymi, ale nie wiem, jak zabezpieczyć, że wrzuci raz i wyłączy się dodawanie, bo cały czas jak przeładuje stronę dodaje te same rekordy.


a dokładnie zrobiłem tak

  1. $res2 = $wpdb->get_results("SELECT * FROM ".WYSZUKIWARKA_TABLE." WHERE oplata_pokladne<>'' AND if(length(oplata_pokladne)=4,concat('31/12/',oplata_pokladne),concat(replace(substring(oplata_pokladne, 7, 4),'/','0'),'/',replace(substring(oplata_pokladne, 4, 2),'/','0'),'-',replace(substring(oplata_pokladne, 1, 2),'/','0')))<=curdate()
  2. ORDER BY nazwisko, imie, data_Smierci");


a if wyglada tak

  1. if (date('d/m/Y',mktime(0,0,0,$month, $day, $year))) {


i muszę zablokować to w if że sprawdzi i jak są daty przestarzale to doda i ich nie powtórzy.
ilidir
Myślę że powinieneś najpierw sprawdzać czy z danego dnia nie istnieje już rekord jeżeli istnieje to nic nie robisz a jeżeli nie istnieje to dodajesz.
pawel06281990
Rozwiązałem problem.
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.