Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Masowa aktualizacja danych
alkesz1718
post 5.05.2022, 23:45:26
Post #1





Grupa: Zarejestrowani
Postów: 98
Pomógł: 0
Dołączył: 8.12.2014
Skąd: Czernina

Ostrzeżenie: (0%)
-----


Witam,
Mam pewien problem z masową aktualizacją danych w bazie danych z poziomu skryptu php.
Mam przykładowo tabelę XXXX_users z struktórami jak:
- user_id
- name
- user_group
- time_limit
itd ale nie są one ważne tylko te co podałem.
Na stronie użytkownicy mają różne grupy (user_limit), niektórzy z nich daną grupę mają na określony czas (time_limit) i np.w bazie mam tak:
user_id | name | user_group | time_limit
1 | Admin |1 |
2 | Kowalski |3| 1651789500
3 | Nowak | 4 |
4 | Somsiad | 3 | 1851789500

teraz potrzebuję że jeśli wartość time_limit jest więsze niż 0/NULL ale mniejsze niż aktualna data to wartość user_group zmieni się tylko dla tej 1 osoby.

Napisałem taki kod:
  1. if ($row['time_limit'] > 0 ){
  2. $date_now = date("Y-m-d H:i");
  3. $limit = $row['time_limit'];
  4. if ($date_now > $limit) {
  5. $db->query( "UPDATE " . PREFIX . "_users SET user_group = '4', time_limit = '' ");
  6. }
  7. }


Kod ogólnie działa ale zmienia mi wartość user_group dla wszystkich użytkowników i pytanie jak zrobić by nie zmieniało mi wartość wszystkim użytkownikom a tylko tym co posiadają wartość time_limit który się "skończył"
Go to the top of the page
+Quote Post
aras785
post 6.05.2022, 00:22:05
Post #2





Grupa: Zarejestrowani
Postów: 859
Pomógł: 177
Dołączył: 29.10.2009

Ostrzeżenie: (0%)
-----


Tutaj wgl. nie masz warunku WHERE więc nie będzie działać


Dodaj w zapytaniu WHERE time_limit IS NOT NULL AND time_limit > 0 AND time_limit < $date_now
Go to the top of the page
+Quote Post
alkesz1718
post 6.05.2022, 17:22:37
Post #3





Grupa: Zarejestrowani
Postów: 98
Pomógł: 0
Dołączył: 8.12.2014
Skąd: Czernina

Ostrzeżenie: (0%)
-----


Dodałem ale nic się nie dzieje, nawet teraz widzę że ten mój kod nie chce działać a wczoraj jeszcze zadziałał jakimś cudem.
Podejrzewam że data zapisywana w tabeli nie jest porównywalna do tego co mam pod $date_now

W bazie data zapisana jako: 1651850400 odpowiada dacie 2022-05-06 17:20 może trzeba jakoś zakodować $date_now by skrypt mógł porównywać zapisaną datę w bazie z aktualną datą i godziną
Go to the top of the page
+Quote Post
Salvation
post 6.05.2022, 17:32:37
Post #4





Grupa: Zarejestrowani
Postów: 396
Pomógł: 71
Dołączył: 15.07.2014

Ostrzeżenie: (0%)
-----


To użyj pustego time() albo strtotime() zamiast date()

Ten post edytował Salvation 6.05.2022, 17:33:33
Go to the top of the page
+Quote Post
alkesz1718
post 6.05.2022, 17:49:58
Post #5





Grupa: Zarejestrowani
Postów: 98
Pomógł: 0
Dołączył: 8.12.2014
Skąd: Czernina

Ostrzeżenie: (0%)
-----


Nadal nic :/
Go to the top of the page
+Quote Post
phpuser88
post 7.05.2022, 13:16:16
Post #6





Grupa: Zarejestrowani
Postów: 66
Pomógł: 1
Dołączył: 4.05.2019
Skąd: PHP5.6

Ostrzeżenie: (0%)
-----


W bazie masz unix date więc w PHP nie spełnisz ostatniego warunku. Pamiętaj też, że warunki PHP nie określają warunków zapytania SQL więc warunek WHERE jest konieczny jak już zostało wspomniane wyżej. wink.gif
  1. if ($row['time_limit'] > 0 ){
  2. $date_now = date("Y-m-d H:i");
  3. $date_now = strtotime($date_now);//konwert na unix
  4. $limit = $row['time_limit'];
  5. if ($date_now > $limit) {//lub strtotime() > $limit
  6. $db->query( "UPDATE " . PREFIX . "_users SET user_group = '4', time_limit = '' WHERE ... ");
  7. }
  8. }


Ten post edytował phpuser88 7.05.2022, 13:34:54
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 21.06.2025 - 12:04