Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Wybór z listy rozwijanej, a wpływ na zapytanie do innej tabeli
Therminus
post 30.07.2022, 11:52:34
Post #1





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

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


Mam tabelę `ulice`z nazwami ulic (ok 20 pozycji). W PHP stworzyłem kod, który dokonuje wybranie konkretnej ulicy z listy rozwijanej, w której wyświetlają się nazwy ulic z tabeli `ulice` właśnie.
Fragment kodu:
  1. $sql = mysqli_connect('localhost', 'admin', 'admin');
  2. $db = mysqli_select_db($sql, 'nieruchomosci');
  3. $char = "SET CHARSET UTF8";
  4. mysqli_query($sql, $char);
  5. /* ustawiamy polskie locale */
  6. setlocale(LC_ALL, 'pl_PL');
  7.  
  8. echo "<form><select style='width:250px'>";
  9. $zapytanie0 = "SELECT `Ulica` FROM `ulice` ";
  10. $jaka_ulica = mysqli_query($sql, $zapytanie0);
  11. while($ulica = mysqli_fetch_array ($jaka_ulica))
  12. {
  13. <option value="'.($ulica['Ulica']).'">'.$ulica['Ulica'].'</option> ';
  14. }
  15. echo "</select></form>";

I teraz jak to zrobić, aby wybrana ulica z listy mogła mieć wpływ na zapytanie do innej tabeli. Na przykład:
  1. $zapytanie = "SELECT * FROM `budynki` WHERE `Ulica` LIKE 'Tutaj_zmienna_odwolujaca_sie_do_nazwy_wybranej_z_listy_rozwijanej' and `Kategoria` LIKE 'LU%' ";
  2. $wykonaj = mysqli_query($sql, $zapytanie);
  3. while($wiersz=mysqli_fetch_array ($wykonaj)) {
  4. echo '<tr>
  5. <td >'.$wiersz['ID'].'</td>
  6. <td >'.$wiersz['Ulica'].'</td>
  7. <td align="center">'.$wiersz['Klatka'].'</td>
  8. <td align="center">'.$wiersz['Nr_Nazwa'].'</td>
  9. <td align="center">'.$wiersz['Kategoria'].'</td>
  10. <td style="padding-right:10px"; align="right">'.$wiersz['Pow_Uzyt'].'</td>
  11. <td style="padding-right:10px"; width=\"10\"; align="right">'.$wiersz['Udzial_w_nieruch'].'</td>
  12. <td align="center">'.$wiersz['Data_ust_prawa_odr_wlasn'].'</td>
  13. <td >'.$wiersz['Nr_aktu_notar'].'</td>
  14. <td align="center">'.$wiersz['Ilosc'].'</td>
  15. </tr>';
Go to the top of the page
+Quote Post
viking
post 30.07.2022, 12:35:13
Post #2





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


A jak tam klucze wyglądają? Budynek jest przy ulicy więc pewnie w budynki jakieś id_ulicy.
Wstaw w tej liście id_ulicy -> nazwa_ulicy, potem wybrane id podstaw (przez bindowanie parametrów w mysqli aby nie otworzyć się na sql injection) do SELECT * FROM `budynki` WHERE `Ulica_id` = %d


--------------------
Go to the top of the page
+Quote Post
Therminus
post 31.07.2022, 12:08:34
Post #3





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

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


Już dałem sobie radę.
Kod wygląda tak:
  1. $sql = mysqli_connect('localhost', 'admin', 'admin');
  2. $db = mysqli_select_db($sql, 'nieruchomosci');
  3. $char = "SET CHARSET UTF8";
  4. mysqli_query($sql, $char);
  5. /* ustawiamy polskie locale */
  6. setlocale(LC_ALL, 'pl_PL');
  7.  
  8. if(isset($_POST['wybor'])){
  9.  
  10. $wybor = $_POST['wybor'];
  11. }
  12. echo "<form method='POST'><select name='wybor'>";
  13.  
  14. $zapytanie0 = "SELECT `Ulica` FROM `ulice` ";
  15. $jaka_ulica = mysqli_query($sql, $zapytanie0);
  16.  
  17. while($ulica = mysqli_fetch_array ($jaka_ulica))
  18. {
  19. <option value="'.($ulica['Ulica']).'">'.$ulica['Ulica'].'</option> ';
  20. }
  21. echo "<input type='submit'/>";
  22. echo "</select></form>";
  23. $zapytanie = "SELECT * FROM `budynki` WHERE `Ulica` = '$wybor' and `Kategoria` LIKE 'LU%' ";
  24. (...)
  25.  

I to działa tak jak chcę. Ale wyłożyłem się na zdawałoby się prozaicznej sprawie: działaniu arytmetycznym na zmiennych.
Ale na to założę nowy wątek.
Go to the top of the page
+Quote Post
viking
post 31.07.2022, 13:32:10
Post #4





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


No i tak jak napisałem, jesteś podatny na sql injection...


--------------------
Go to the top of the page
+Quote Post
Therminus
post 2.08.2022, 11:23:45
Post #5





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

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


Cytat(viking @ 31.07.2022, 14:32:10 ) *
No i tak jak napisałem, jesteś podatny na sql injection...

A mógłbyś coś więcej napisać? W jaki sposób ktoś mógłby w tym konkretnym przypadku zaszkodzić?
Przyznam, że temat tylko liznąłem.
Go to the top of the page
+Quote Post
nospor
post 2.08.2022, 11:25:48
Post #6





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




To ze ktos dzieki tej luce moze wybrac wszystkie dane z twojej bazy, a jak mu sie poszczesci to nawet dobrac sie do serwera.
Tak jak juz ci pisano: uzyj BINDowania


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

"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 2.08.2022, 12:33:21
Post #7





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

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


Cytat(nospor @ 2.08.2022, 12:25:48 ) *
To ze ktos dzieki tej luce moze wybrac wszystkie dane z twojej bazy, a jak mu sie poszczesci to nawet dobrac sie do serwera.
Tak jak juz ci pisano: uzyj BINDowania

Te ogólniki to ja znam. Jak konkretnie w moim przypadku może się dobrać do bazy?
Go to the top of the page
+Quote Post
nospor
post 2.08.2022, 12:57:03
Post #8





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




przeczytaj w necie jak sie robi SQL INJECTION, 5 minut czytania, i bedziesz wiedzial. Cala masa przykladow na 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
Therminus
post 2.08.2022, 13:12:29
Post #9





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

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


Cytat(nospor @ 2.08.2022, 13:57:03 ) *
przeczytaj w necie jak sie robi SQL INJECTION, 5 minut czytania, i bedziesz wiedzial. Cala masa przykladow na to jest

Jak na razie trafiłem tylko na przykłady z formularzem logowania. Nie mam takiego formularza.
Go to the top of the page
+Quote Post
nospor
post 2.08.2022, 13:15:43
Post #10





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




Ale tu nie chodzi o zaden formularz tylko o to, ze wkladasz do zapytania tekst ktory przychodzi od uzytkownika a uzytkownik moze tam wstawic wszystko.

Pierwszy lepszy przyklad z netu
https://sekurak.pl/czym-jest-sql-injection/
I tu nie ma znaczenia czy dane ida z URL czy z formularza. Wszystko idzie od uzytkownikia i uzytkownik moze namieszac o hakerze nie wspominajac


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

"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

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: 27.04.2024 - 17:19