Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V  < 1 2  
Reply to this topicStart new topic
> [PHP]Funkcja if kilka warunków
nospor
post 20.10.2023, 18:22:38
Post #21





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




Ja nie widze zadnych zmian. Nadal wszedzie tam gdzie mialo by == to jest =


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
brzanek
post 20.10.2023, 18:37:31
Post #22





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


ach racja
  1. $dataa = date('Y-m-d');
  2.  
  3. $result = $mysqli->query("SELECT date FROM liczniki ORDER BY date DESC LIMIT 1");
  4. while ( $row = mysqli_fetch_array($result) ) {
  5. $dzisiaj = $row['date'];
  6. }
  7.  
  8. $result = $mysqli->query("SELECT * FROM liczniki WHERE date = '".$dataa."'");
  9. while ( $row = mysqli_fetch_array($result) ) {
  10. $miastoid = $row['miasto'];
  11. }
  12.  
  13. if (( $dzisiaj == date('Y-m-d') ) && ( $miastoid == $rodzaj_danych )){
  14. $result = $mysqli->query("UPDATE liczniki SET licznik=licznik+1 WHERE date = '".$dataa."' AND miasto = '".$rodzaj_danych."'");
  15. }
  16. else if (( $dzisiaj == date('Y-m-d') ) && ( $rodzaj_danych !== $miastoid )) {
  17. $result = $mysqli->query("INSERT INTO liczniki (date, miasto, licznik) VALUES ('".$dataa."','".$rodzaj_danych."',1)");
  18. }
  19. else {
  20. $result = $mysqli->query("INSERT INTO liczniki (date, miasto, licznik) VALUES ('".$dataa."','".$rodzaj_danych."',1)");
  21. }
Go to the top of the page
+Quote Post
nospor
post 20.10.2023, 20:39:36
Post #23





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




Skoro jak twierdzisz, nie wykonuje ci sie to
$result = $mysqli->query("UPDATE liczniki SET licznik=licznik+1 WHERE date = '".$dataa."' AND miasto = '".$rodzaj_danych."'");

to sprawdz co zawieraja zmienne z twojego warunku
if (( $dzisiaj == date('Y-m-d') ) && ( $miastoid == $rodzaj_danych )){

var_dump($dzisiaj);
var_dump($miastoid);
var_dump($rodzaj_danych);
No przeciez to jest logiczne ze tak trzeba zrobic...

swoja droga moglbys jakos normalnie nazywac zmiennej, odnosnie tego co zaweiraja a nie losowo. W obecnej nazewniczej sytuacji nie trudno o mase glupich innych bledow


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
brzanek
post 21.10.2023, 07:08:43
Post #24





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


  1. if (( $dzisiaj == date('Y-m-d') ) && ( $miastoid == $rodzaj_danych )){
  2. $result = $mysqli->query("UPDATE liczniki SET licznik=licznik+1 WHERE date = '".$dataa."' AND miasto = '".$rodzaj_danych."'");
  3. }
  4. else if (( $dzisiaj == date('Y-m-d') ) && ( $rodzaj_danych !== $miastoid )) {
  5. $result = $mysqli->query("INSERT INTO liczniki (date, miasto, licznik) VALUES ('".$dataa."','".$rodzaj_danych."',1)");
  6. }
  7. else {
  8. $result = $mysqli->query("INSERT INTO liczniki (date, miasto, licznik) VALUES ('".$dataa."','".$rodzaj_danych."',1)");
  9. }


W tym całym kodzie poprawnie działa tylko przypadek kiedy w BD nie ma dzisiejszej daty - wtedy jest dopisywany nowy rekord. Jeśli jest już dzisiejsza data i przypisane do niej miasto Szczecin to po wywołaniu strony ze Szczecinem tworzy się nowy rekord w BD a powinien tylko dodać 1 do licznika przy tym wcześniejszym rekordzie.
Go to the top of the page
+Quote Post
nospor
post 21.10.2023, 08:02:08
Post #25





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




Prosilem zebys sprawdzic zmienne z tego IFa. Zrobiles to?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
brzanek
post 21.10.2023, 08:32:03
Post #26





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Zawierają
$dzisiaj - 2023-10-21
$miastoid - szczecin
$rodzaj_danych - szczecin
Go to the top of the page
+Quote Post
nospor
post 21.10.2023, 08:46:18
Post #27





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




Ja cie proszse zebys podal mi dokladnie to co zwraca var_dump. Dokladnie


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
brzanek
post 21.10.2023, 09:00:01
Post #28





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


string(10) "2023-10-21" string(9) "szczecin" string(9) "szczecin"
Go to the top of the page
+Quote Post
nospor
post 21.10.2023, 09:21:16
Post #29





Grupa: Moderatorzy
Postów: 36 457
Pomógł: 6297
Dołączył: 27.12.2004




No to widac wyraznie ze wartosci wszystkie sie zgadzaja i ten warunek
if (( $dzisiaj == date('Y-m-d') ) && ( $miastoid == $rodzaj_danych )){
sie musi wykonac.

Moze wiec twoje zapytanie sie nie wykonuje

Zrob:

if (( $dzisiaj == date('Y-m-d') ) && ( $miastoid == $rodzaj_danych )){

echo 'WIDZISZ MNIE?questionmark.gifexclamation.gif!!';exit;
$result = $mysqli->query("UPDATE liczniki SET licznik=licznik+1 WHERE date = '".$dataa."' AND miasto = '".$rodzaj_danych."'");
}


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
trueblue
post 21.10.2023, 09:40:59
Post #30





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Cytat(brzanek @ 20.10.2023, 16:14:36 ) *
  1. if (( $dzisiaj = date('Y-m-d') ) && ( $miastoid = $rodzaj_danych )){
  2. $result = $mysqli->query("UPDATE liczniki SET licznik=licznik+1 WHERE date = '".$dataa."' AND miasto = '".$rodzaj_danych."'");
  3. }
  4. else if (( $dzisiaj = date('Y-m-d') ) && ( $rodzaj_danych != $miastoid )) {
  5. $result = $mysqli->query("INSERT INTO liczniki (date, miasto, licznik) VALUES ('".$dataa."','".$rodzaj_danych."',1)");
  6. }
  7. else {
  8. $result = $mysqli->query("INSERT INTO liczniki (date, miasto, licznik) VALUES ('".$dataa."','".$rodzaj_danych."',1)");
  9. }

Po co else if i else skoro i tak mają wykonać się takie same zapytania?

Inna sprawa, że zamiast tworzyć ify i kilka zapytań, wystarczy nadać na pole date i miasto klucz unique i stworzyć jedno zapytanie bez żadnych ifów:
  1. INSERT INTO liczniki (date, miasto, licznik) VALUES ('".$dataa."','".$rodzaj_danych."',1)
  2. ON DUPLICATE KEY UPDATE licznik=licznik+1;

Gdybyś użył powyższego, to nadając wartość domyślną 1 dla pola licznik, wystarczy wstawiać dane tylko do date i miasto.

Ten post edytował trueblue 21.10.2023, 09:42:22


--------------------
Go to the top of the page
+Quote Post
brzanek
post 21.10.2023, 09:56:41
Post #31





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


O co chodzi?
Mam listę miast po wybraniu odpowiedniego miasta jesli nikt wcześniej dzisiaj nie wybrał tego miasta to pojawia się nowy rekord w BD
id: 1
data: 2023-10-21
miasto: szczecin
licznik: 1
Jeśli ktoś wejdzie na stronę i wybierze inne miasto to do bazy trafia kolejny rekord:
id: 2
data: 2023-10-21
miasto: koszalin
licznik: 1
Teraz jeśli ktoś wejdzie na strone i wybierze ponownie szczecin to do bazy danych tam gdzie było id: 1 dodaje się tylko wartość do licznika.
Teraz mam tak, że jak ktoś ponownie wybierze szczecin to tworzy sie nowy rekord:
id: 3
data: 2023-10-21
miasto: szczecin
licznik: 2

Oczywiście przy zmianie daty ponownie pojawiają się nowe rekordy i tak dalej.

Dodałem to echo 'WIDZISZ MNIE?';exit; i pojawia się na stronie ale to chyba normalne?

Cytat(trueblue @ 21.10.2023, 10:40:59 ) *
Po co else if i else skoro i tak mają wykonać się takie same zapytania?

Inna sprawa, że zamiast tworzyć ify i kilka zapytań, wystarczy nadać na pole date i miasto klucz unique i stworzyć jedno zapytanie bez żadnych ifów:
  1. INSERT INTO liczniki (date, miasto, licznik) VALUES ('".$dataa."','".$rodzaj_danych."',1)
  2. ON DUPLICATE KEY UPDATE licznik=licznik+1;

Gdybyś użył powyższego, to nadając wartość domyślną 1 dla pola licznik, wystarczy wstawiać dane tylko do date i miasto.


Te wywołanie powoduje, że za każdym razem dodawany jest nowy rekord do BD

Ten post edytował brzanek 21.10.2023, 09:46:04
Go to the top of the page
+Quote Post
trueblue
post 21.10.2023, 10:06:36
Post #32





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Cytat(brzanek @ 21.10.2023, 10:56:41 ) *
Te wywołanie powoduje, że za każdym razem dodawany jest nowy rekord do BD

A założyłeś unikalny dwupolowy klucz na date i miasto?


--------------------
Go to the top of the page
+Quote Post
brzanek
post 21.10.2023, 10:43:47
Post #33





Grupa: Zarejestrowani
Postów: 427
Pomógł: 0
Dołączył: 8.11.2012

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


Niby założyłem unikalny klucz ale nie wiem czy dwupolowy

Ale nie działa to tak jak powinno

Dobra chyba sobie poradziłem - trueblue dzięki za pomoc
Go to the top of the page
+Quote Post

2 Stron V  < 1 2
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: 28.04.2024 - 00:37