Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [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
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
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: 405
Pomógł: 73
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
Go to the top of the page
+Quote Post
Salvation
post
Post #5





Grupa: Zarejestrowani
Postów: 405
Pomógł: 73
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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/wink.gif) I to tak dosc mocno (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
Salvation
post
Post #7





Grupa: Zarejestrowani
Postów: 405
Pomógł: 73
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 (IMG:style_emoticons/default/smile.gif)
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] (IMG:style_emoticons/default/questionmark.gif) '');
  10. $userPower = (int)($row['Pow_Uzyt_'.$char] (IMG:style_emoticons/default/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 "
Go to the top of the page
+Quote Post
Salvation
post
Post #11





Grupa: Zarejestrowani
Postów: 405
Pomógł: 73
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 (IMG:style_emoticons/default/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. (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/haha.gif)

(IMG:style_emoticons/default/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 (IMG:style_emoticons/default/tongue.gif)
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. (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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. (IMG:style_emoticons/default/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
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
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
Go to the top of the page
+Quote Post
Salvation
post
Post #20





Grupa: Zarejestrowani
Postów: 405
Pomógł: 73
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 12:14