Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP] Warunkowe dodawanie zmiennych
Therminus
post
Post #1





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 24.05.2015

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


Mam taką tabelkę ze zmiennymi:
  1. echo '<tr >
  2. <td align="center">'.$wiersz2['Status_A'].'</td>
  3. <td align="right">'.$wiersz2['Pow_Uzyt_A'].'</td>
  4. <td align="center">'.$wiersz2['Status_B'].'</td>
  5. <td align="right">'.$wiersz2['Pow_Uzyt_B'].'</td>
  6. <td align="center">'.$wiersz2['Status_C'].'</td>
  7. <td align="right">'.$wiersz2['Pow_Uzyt_C'].'</td>
  8. ...
  9. <td align="right">'.($wiersz2['Pow_Uzyt_A'])+
  10. ($wiersz2['Pow_Uzyt_B'])+
  11. ($wiersz2['Pow_Uzyt_C'])+
  12. ...
  13.  
  14. .'</td>
  15. </tr>';

W sumie 8 pozycji (do litery "H")
Problem w tym, że na końcu muszę dodać te zmienne (wiersz 9 i dalsze w przedstawionym kodzie) pod warunkiem, że...
i tutaj zaczynają się schody.
Zmienna $wiersz2['Pow_Uzyt_A'] ma być brana pod uwagę w dodawaniu tylko wtedy, kiedy zmienna $wiersz2['Status_A'] = 'A' .
I analogicznie wartość ze zmiennej $wiersz2['Pow_Uzyt_B'] będzie dodawana, jeżeli zmienna $wiersz2['Status_B'] = 'B' i tak dalej.
W bazie pole w kolumnach "Status_[A...H]" po prostu zawiera tylko jedną literę (A...H) lub jest puste.
Jak to zrobić?

Ten post edytował Therminus 24.08.2022, 13:23:50
Go to the top of the page
+Quote Post
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Użyj funkcji if.


--------------------
Go to the top of the page
+Quote Post
Salvation
post
Post #3





Grupa: Zarejestrowani
Postów: 403
Pomógł: 72
Dołączył: 15.07.2014

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


  1. <?php
  2.  
  3. declare(strict_types=1);
  4.  
  5. function summary(array $row): int
  6. {
  7. $sum = 0;
  8.  
  9. foreach(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] as $char) {
  10. $char = mb_strtoupper($char);
  11. $status = (string)($row['Status_' . $char] ?? '');
  12. $userPower = (int)($row['Pow_Uzyt_' . $char] ?? 0);
  13.  
  14. if ($status === $char) {
  15. $sum += $userPower;
  16. }
  17. }
  18.  
  19. return $sum;
  20. }

Wykorzystanie (w Twoim przypadku):
  1. <td align="right">' . summary($wiersz2) . '</td>


PS. Czy ktoś może wyłączyć parsowanie na emoty w blokach kodu?

Ten post edytował Salvation 24.08.2022, 16:26:56
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
PS. Czy ktoś może wyłączyć parsowanie na emoty w blokach kodu?

Niestety nie.
Ale mozesz zrobic to sam przed wyslaniem postu, WYLACZ EMOTKI czy jakos tak checkbox. To wylaczy dla calego postu


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

"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
Salvation
post
Post #5





Grupa: Zarejestrowani
Postów: 403
Pomógł: 72
Dołączył: 15.07.2014

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


Cytat(nospor @ 24.08.2022, 16:58:50 ) *
Niestety nie.
Ale mozesz zrobic to sam przed wyslaniem postu, WYLACZ EMOTKI czy jakos tak checkbox. To wylaczy dla calego postu

Dzięki! Zapamiętam smile.gif
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




ps: oj ta funkcja co naskrobales to chyba cos ci nie wyszla wink.gif I to tak dosc mocno wink.gif


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

"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
Salvation
post
Post #7





Grupa: Zarejestrowani
Postów: 403
Pomógł: 72
Dołączył: 15.07.2014

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


Niby dlaczego? Wszystko dobrze jest wg mnie: https://3v4l.org/4MkRf

Ten post edytował Salvation 24.08.2022, 16:26:17
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A widzisz, nie doczytalem o co chodzilo autorowi. Zwracam honor smile.gif


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

"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
Therminus
post
Post #9





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 24.05.2015

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


[quote name='Salvation' date='24.08.2022, 16:52:52 ' post='1259713']
Coś mi się ta funkcja nie odpala z moim kodem.

  1. declare(strict_types=1);
  2.  
  3. function summary(mysqli_fetch_array $row): int
  4. {
  5. $sum = 0;
  6.  
  7. foreach(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] as $char) {
  8. $char = mb_strtoupper($char);
  9. $status = (string)($row['Status_'.$char] questionmark.gif '');
  10. $userPower = (int)($row['Pow_Uzyt_'.$char] questionmark.gif 0);
  11.  
  12. if ($status === $char) {
  13. $sum += $userPower;
  14. }
  15. }
  16.  
  17. return $sum;
  18. }
  19.  
  20. $zapytanie2 = "SELECT * FROM `budynki` WHERE `Ulica` = '$wybor' and `Kategoria` LIKE 'LU%' and `Podzielone` = 'P'";
  21. $wykonaj2 = mysqli_query($sql, $zapytanie2);
  22. while($wiersz2=mysqli_fetch_array ($wykonaj2)) {
  23.  
  24. echo '<tr >
  25. <td align="center">'.$wiersz2['Status_A'].'</td>
  26. <td align="right">'.$wiersz2['Pow_Uzyt_A'].'</td>
  27. <td align="center">'.$wiersz2['Status_B'].'</td>
  28. <td align="right">'.$wiersz2['Pow_Uzyt_B'].'</td>
  29. <td align="center">'.$wiersz2['Status_C'].'</td>
  30. <td align="right">'.$wiersz2['Pow_Uzyt_C'].'</td>
  31. ...
  32. <td align="right">' . summary($wiersz2) . '</td>
  33.  
  34. </tr>';
  35. }


Nie jestem pewien wiersza nr 3. Być może tutaj jest błąd.

Ten post edytował Therminus 25.08.2022, 13:53:39
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Czemu zrobiles
mysqli_fetch_array $row
?
Przeciez wyraznie miales napisane
array $row

Row to tablica

ps: I patrze nadal masz wywalone na to ze twoj skrypt jest podatny na sql injection. Zamiast to poprawic jak ci to juz dawno mowiono to ty wiesz "lepiej "


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

"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
Salvation
post
Post #11





Grupa: Zarejestrowani
Postów: 403
Pomógł: 72
Dołączył: 15.07.2014

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


Cytat(Therminus @ 25.08.2022, 14:04:34 ) *
Nie jestem pewien wiersza nr 3. Być może tutaj jest błąd.

Nie być może, a tak. Niepotrzebnie zmieniałeś deklarację funkcji. Miałeś zrobić jedynie copy-paste do siebie do kodu.

I popraw ten SQL Injection, bo Puchatek zaraz krwotoku dostanie haha.gif
Go to the top of the page
+Quote Post
Therminus
post
Post #12





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 24.05.2015

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


Cytat(nospor @ 25.08.2022, 14:56:59 ) *
ps: I patrze nadal masz wywalone na to ze twoj skrypt jest podatny na sql injection.

Mam wywalone, bo mnie w LAN nikt atakował nie będzie. oneeyedsmiley02.png

Cytat(Salvation @ 25.08.2022, 18:17:16 ) *
Niepotrzebnie zmieniałeś deklarację funkcji.

Na początku rzeczywiście przekopiowałem tak jak było, ale nie działało. Potem kombinowałem i zmieniłem na próbę, a przed wysłaniem posta zapomniałem zmienić z powrotem.
Mam w przeglądarce biały ekran. Jak zakomentuję tę funkcję, to stronka się wyświetla (oczywiście z błędem o próbie użycia nie zadeklarowanej funkcji).
Wersja PHP: 7.4.29
Cytat(Salvation)
I popraw ten SQL Injection, bo Puchatek zaraz krwotoku dostanie haha.gif

haha.gif

Ten post edytował Therminus 26.08.2022, 13:05:32
Go to the top of the page
+Quote Post
nospor
post
Post #13





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Mam wywalone, bo mnie w LAN nikt atakował nie będzie

Tyko kiedys zaczniesz pisac poza LAN i nagle ZONK bo zle nawyki zostaly. Jaki problem tam uzyc binodwania? Toz to 10 sekund roboty :/

Cytat
Na początku rzeczywiście przekopiowałem tak jak było, ale nie działało. Potem kombinowałem i zmieniłem na próbę, a przed wysłaniem posta zapomniałem zmienić z powrotem.
Mam w przeglądarce biały ekran. Jak zakomentuję tę funkcję, to stronka się wyświetla (oczywiście z błędem o próbie użycia nie zadeklarowanej funkcji).

Pewnie uzywasz starego php. Salvation niestety lubi zakladac ze ludzie jada na najnowszym. Od mysli ze ktos uzywa starego to jemu krwotok grozi tongue.gif


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

"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
Therminus
post
Post #14





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 24.05.2015

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


Cytat(nospor @ 26.08.2022, 13:30:16 ) *
Jaki problem tam uzyc binodwania? Toz to 10 sekund roboty :/

Jak się już wie co to jest bindowanie w tym przypadku. A ogarnięcie tematu, to dla mnie pewnie kilkanaście godzin. tongue.gif
Cytat(nospor)
Pewnie uzywasz starego php. Salvation niestety lubi zakladac ze ludzie jada na najnowszym. Od mysli ze ktos uzywa starego to jemu krwotok grozi tongue.gif

Tak pomyślałem, dlatego edytowałem poprzedniego posta
PHP 7.4.29 (cli) (built: Apr 14 2022 14:45:47) ( ZTS )
Nie taki bardzo stary, zatem...

EDIT:
Sprawdziłem na tej stronce gdzie Salvation umieścił kod i wybrałem moją wersję PHP i... tam działa. smile.gif
A u mnie nie chce.

Ten post edytował Therminus 26.08.2022, 13:38:36
Go to the top of the page
+Quote Post
nospor
post
Post #15





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Skoro masz biala strone to sprawdz logi, jakis blad masz

Cytat
Jak się już wie co to jest bindowanie w tym przypadku. A ogarnięcie tematu, to dla mnie pewnie kilkanaście godzin

https://www.php.net/manual/en/mysqli-stmt.bind-param.php


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

"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
Therminus
post
Post #16





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 24.05.2015

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


Cytat(nospor @ 26.08.2022, 14:27:01 ) *
Skoro masz biala strone to sprawdz logi, jakis blad masz


Wiemy coś więcej.
PHP Fatal error: strict_types declaration must be the very first statement in the script in /var/www/(...)/lok_uzytkowe.php on line 147,
U mnie ta linia to:
  1. declare(strict_types=1);


Dzięki za linka.
Go to the top of the page
+Quote Post
nospor
post
Post #17





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
PHP Fatal error: strict_types declaration must be the very first statement in the script in /var/www/(...)/lok_uzytkowe.php on line 147,

Komunikat dosc jasny...

Daj
declare(strict_types=1);
Na poczatku pliku jako pierwsza linia albo wywal to w ogole


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

"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
Therminus
post
Post #18





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 24.05.2015

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


Cytat(nospor @ 26.08.2022, 14:57:17 ) *
Daj
declare(strict_types=1);
Na poczatku pliku jako pierwsza linia albo wywal to w ogole


Wywaliłem to, ale przy dodawaniu nie bierze pod uwagę części dziesiętnych liczb.

Na początku pliku, to znaczy zaraz za <?php
?
Tak miałem od początku.

Go to the top of the page
+Quote Post
nospor
post
Post #19





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No bo w kodzie masz

$userPower = (int)($row['Pow_Uzyt_'.$char] questionmark.gif 0);

zamien na
$userPower = (float)($row['Pow_Uzyt_'.$char] questionmark.gif 0);


Dostales pare linije kkodu, no naprawde mogles sie zastanowic co robi kazda z nich. Branie z forum tez polega na nauce tego co sie dostaje

Cytat
Na początku pliku, to znaczy zaraz za <?php
?
Tak miałem od początku.

Komunikat bledu mowil jednak co innego, mowil tez ze bylo to w linii 147 a nie na poczatku pliku


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

"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
Salvation
post
Post #20





Grupa: Zarejestrowani
Postów: 403
Pomógł: 72
Dołączył: 15.07.2014

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


Cytat(nospor @ 26.08.2022, 13:30:16 ) *
Od mysli ze ktos uzywa starego to jemu krwotok grozi :P

xDDD dokładnie!

Cytat(Therminus @ 26.08.2022, 15:18:49 ) *
przy dodawaniu nie bierze pod uwagę części dziesiętnych liczb.

Bo masz rzutowanie na INT, no ale to już nospor wyjaśnił.

Cytat(Therminus @ 26.08.2022, 15:18:49 ) *
Na początku pliku, to znaczy zaraz za <?php
?
Tak miałem od początku.

Jak znam życie, to ten plik co umieściłeś w temacie include'ujesz do index.php albo do innego pliku, prawda?
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 Aktualny czas: 21.08.2025 - 02:59