Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][SQL] Przeszukiwanie bazy danych. Wyciaganie ze zmiennej jej czesci.
Gallar
post 9.03.2009, 09:55:29
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 9.03.2009

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


Witam serdecznie.
Od dłuższego czasu głowie się stworzeniem wyszukiwarki.

Problem - który próbowałem ugryźć na kilkanaście sposobów - wygląda następująco:
Posiadam dwie bazy danych MySQL 'mieszkaniac5' i 'mieszkaniac6'.
W bazach interesują nas kolumny:
'bud' - przybiera wartości dla mieszkaniac5 1-2, dla mieszkaniac6 3-5;
'nr';
'pietro';
'pow_uzyt';
'taras';
'ogródek';
'ilosc_pokoi';
'price'

podejście numer 1:
index.html
  1. <?php [codebox]<html>
  2. <script typ="text/javascript" src="grid.js"></script>
  3. <link href="grid.css" type="text/css" rel="sytlesheet"/>
  4. </head>
  5. <body onlaod="init();">
  6. <align="center">
  7. <form action="grid.php" method="post">
  8. Cena:<br>
  9. Od: <input type="text" name="AA" /> do <input type="text" name="AB" />
  10. <br>
  11. Wielkość w m2:<br>
  12. Od: <input type="text" name="BA" /> do <input type="text" name="BB" />
  13. <br>
  14. Ilość pokoi:<br>
  15. Od: <input type="text" name="CA" /> do <input type="text" name="CB" />
  16. <br>
  17. Piętro:<br>
  18. Od: <input type="text" name="EA" /> do <input type="text" name="EB" />
  19. <br>
  20. Nr. mieszkania: <input type="text" name="FA" />
  21. <br>
  22. <br>
  23. <input type="submit" value="Szukaj!" />
  24. </form>
  25. </align>
  26. </body>
  27. </html>[/codebox]
  28. ?>

grid.php
  1. CODE
    <?php
  2. // program wyszukiwarki - grid.php
  3. // wyświetlenie nagłówka
  4. echo'<h2>Wyniki wyszukiwania</h2>';
  5. // usunięcie niepotrzebnych białych znaków
  6. $_post['AA']=trim($_post['AA']);
  7. $_post['AB']=trim($_post['AB']);
  8. $_post['BA']=trim($_post['BA']);
  9. $_post['BB']=trim($_post['BB']);
  10. $_post['CA']=trim($_post['CA']);
  11. $_post['CB']=trim($_post['CB']);
  12. $_post['EA']=trim($_post['EA']);
  13. $_post['EB']=trim($_post['EB']);
  14. $_post['F']=trim($_post['F']);
  15.  
  16. $AA = $_post['AA'];
  17. $AB = $_post['AB'];
  18. $BA = $_post['BA'];
  19. $BB = $_post['BB'];
  20. $CA = $_post['CA'];
  21. $CB = $_post['CB'];
  22. $EA = $_post['EA'];
  23. $EB = $_post['EB'];
  24. $F = $_post['F'];
  25.  
  26. require_once ('error_handler.php');
  27. require_once ('config.php');
  28. $mysqli=mysqli_connect ('xxx', 'xxx', 'xxx', 'xxx');
  29. $query="SELECT 'bud', 'nr', 'pietro', 'pow_uzyt', 'taras', 'ogrodek', 'ilosc_pokoi', 'price' FROM mieszkaniac5 WHERE pietro BETWEEN '{$EA}' AND '{$EB}' OR pow_uzyt BETWEEN '{$BA}' AND '{$BB}' OR ilosc_pokoi BETWEEN '{$CA}' AND '{$CB}' OR price BETWEEN '{$AA}' AND '{$AB}' OR nr='{$F}'" ;
  30. $results=$mysqli->query($query) or die( mysql_error ()) ;
  31. // ustalenie ilości wyszukanych obiektów
  32. if(empty($results))
  33. // jeśli nie, to wyświetl komunikat i zakończ działanie skryptu
  34. {
  35. die('Formularz wypełniony niepoprawnie! Nie można wyświetlić wyników wyszukiwania!');
  36. }
  37. // jeśli jednak dane są wpisane poprawnie
  38. else
  39. {
  40. $obAmount=mysql_num_rows($results); // TU WYSTĘPUJE BŁĄD
  41. // wyswietlenie iloœci wyszukanych obiektów
  42. echo'Znaleziono: '.$obAmount.'<br /><br />';
  43.  
  44. for($x=0;$x<$obAmount;$x++)
  45. {
  46. // przekształcenie danych na tablicę
  47. $row=mysql_fetch_assoc($results);
  48. // wyœwietlenie numeru identyfikacyjnego
  49. echo $x+1;
  50. echo '. ';
  51. // wyœwietlenie nazwy produktu
  52. echo $row['pr_name'];
  53. echo'<br />';
  54. }
  55. }
  56. // zamknięcie połączenia
  57. mysqli_close($mysqli);
  58. // koniec aplikacji
  59.  
  60. ?>


Niestety występuję błąd - jakby zmienne były permanentnie puste...
Pomijam w tym momencie problem dwóch tabel w bazie...

Podejście numer dwa:
index wygląda tak samo
za to w grid:
  1. CODE
    <?php
  2. // program wyszukiwarki - grid.php
  3. // wyświetlenie nagłówka
  4. echo'<h2>Wyniki wyszukiwania</h2>';
  5. // usunięcie niepotrzebnych białych znaków
  6. $_post['AA']=trim($_post['AA']);
  7. $_post['AB']=trim($_post['AB']);
  8. $_post['BA']=trim($_post['BA']);
  9. $_post['BB']=trim($_post['BB']);
  10. $_post['CA']=trim($_post['CA']);
  11. $_post['CB']=trim($_post['CB']);
  12. $_post['EA']=trim($_post['EA']);
  13. $_post['EB']=trim($_post['EB']);
  14. $_post['F']=trim($_post['F']);
  15.  
  16. $AA = $_post['AA'];
  17. $AB = $_post['AB'];
  18. $BA = $_post['BA'];
  19. $BB = $_post['BB'];
  20. $CA = $_post['CA'];
  21. $CB = $_post['CB'];
  22. $EA = $_post['EA'];
  23. $EB = $_post['EB'];
  24. $F = $_post['F'];
  25.  
  26. require_once ('error_handler.php');
  27. require_once ('config.php');
  28. $mysqli=mysqli_connect ('xxx', 'xxx', 'xxx', 'xxx');
  29. $query="SELECT 'bud', 'nr', 'pietro', 'pow_uzyt', 'taras', 'ogrodek', 'ilosc_pokoi', 'price' FROM mieszkaniac5 WHERE pietro BETWEEN '$EA' AND '$EB' OR pow_uzyt BETWEEN '$BA' AND '$BB' OR ilosc_pokoi BETWEEN '$CA' AND '$CB' OR price BETWEEN '$AA' AND '$AB' OR nr='$F'" ;
  30. $results=$mysqli->query($query) or die( mysql_error ()) ;
  31. // ustalenie ilości wyszukanych obiektów
  32. if(empty($results))
  33. // jeśli nie, to wyświetl komunikat i zakończ działanie skryptu
  34. {
  35. die('Formularz wypełniony niepoprawnie! Nie można wyświetlić wyników wyszukiwania!');
  36. }
  37. // jeśli jednak dane są wpisane poprawnie
  38. else
  39. {
  40. $obAmount=mysql_num_rows($results); // TU WYSTĘPUJE BŁĄD
  41. // wyswietlenie iloœci wyszukanych obiektów
  42. echo'Znaleziono: '.$obAmount.'<br /><br />';
  43.  
  44. for($x=0;$x<$obAmount;$x++)
  45. {
  46. // przekształcenie danych na tablicę
  47. $row=mysql_fetch_assoc($results);
  48. // wyœwietlenie numeru identyfikacyjnego
  49. echo $x+1;
  50. echo '. ';
  51. // wyœwietlenie nazwy produktu
  52. echo $row['pr_name'];
  53. echo'<br />';
  54. }
  55. }
  56. // zamknięcie połączenia
  57. mysqli_close($mysqli);
  58. // koniec aplikacji
  59.  
  60. ?>

Błąd ten sam
Następnie zamiast zmiennych próbowałem dać zmienne $post_('wartość') - również nici.

Następnie umieściłem wszystko w jednym pliku 'index.php'
błąd dalej się powtarzał.

Zastanawiałem się nad rozwiązaniem pobrania całych tabel i rozwiazania tego na zasdzie:
if (empty('AA'))
{ if (empty('AB'))
i tak dalej...
else
{ sprawdzenie pozostałych zmiennych

$zmienna_tablicy_mieszkaniac5 = $zmienna_tablicy_mieszkaniac5 - wszystkie pozycje, gdzie 'price' < wartości podanej w 'AA', ale szczerze przyznam, że po pierwsze wydaje mi się to strasznie pracochłonne, a po drugie nie wiem jak zmienić zawartość tej zmiennej...
Za szybką pomoc dziękuję. Na pytania chętnie odpowiem, choć mam nadzieję, że dość obrazowo opisałem problem...

Edit:
Zmiana quote na CODEBOX

Ten post edytował Gallar 9.03.2009, 10:43:36

--------------------
Jestem Misiem o Bardzo Małym Rozumku
i długie słowa sprawiają mi wielką trudność.
Alan Alexander Milne
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Mephistofeles
post 9.03.2009, 11:08:32
Post #2





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


Po co 2 bazy? Wystarczyłyby 2 tabele, chyba, że o to ci chodzi, ale i tak to za dużo. Lepiej dać kolumnę "rodzaj" ENUM ('c5', 'c6'). Twój kod jest lekko mówiąc nieczytelny, postarałbyś się o jakieś wcięcia...
No i totalnie niezabezpieczony skrypt. SQL Injection rozwali ci tę wyszukiwarkę w parę chwil. I totalnie nieoptymalny. Po co usuwasz białe znaki z POSTa, a potem przepisujesz go do zmiennych? Lepiej od razu przepisać, choć to i tak zły pomysł. Masz możliwość użycia PDO?
I jeszcze jedno, co to '{$EA}' jest? Nie powinno być bez {}?

Ten post edytował Mephistofeles 9.03.2009, 11:13:03
Go to the top of the page
+Quote Post
phpion
post 9.03.2009, 11:27:25
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Może problemem jest stosowanie $_post zamiast $_POST?
Go to the top of the page
+Quote Post
Gallar
post 9.03.2009, 13:32:42
Post #4





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 9.03.2009

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


Zmiana zmiennej z małej na wielką nic nie dało.
Próbowałem też metodą $_GET również nic...

Co do pierwszego pana, to za uwagę dziękuję, ale w takim razie może jakieś rady - bo krytyka była niekonstruktywna...
Wiem, że tam powinno być bez { } dlatego też zmieniłem.
Proszę o pilną pomoc, bo ta wyszukiwarka była na sobotę tongue.gif


--------------------
Jestem Misiem o Bardzo Małym Rozumku
i długie słowa sprawiają mi wielką trudność.
Alan Alexander Milne
Go to the top of the page
+Quote Post
erix
post 9.03.2009, 16:59:43
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
No i totalnie niezabezpieczony skrypt. SQL Injection rozwali ci tę wyszukiwarkę w parę chwil. I totalnie nieoptymalny. Po co usuwasz białe znaki z POSTa, a potem przepisujesz go do zmiennych?

To nie jest konstruktywne? Ewidentne dowody na braki w Twoim algorytmie.

  1. <?php
  2. $obAmount=mysql_num_rows($results); // TU WYSTĘPUJE BŁĄD
  3. ?>

Ok, błąd. Ale jaki?

Cytat
Proszę o pilną pomoc, bo ta wyszukiwarka była na sobotę

To jest Twój problem, że miała być na sobotę. winksmiley.jpg Na gotowca nie licz.


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Gallar
post 10.03.2009, 10:49:20
Post #6





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 9.03.2009

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


Konstruktywna, to taka, która nie tylko błędy wytyka, ale przynajmniej stara się nakierować jak te błędy naprawić.
Gotowca nie oczekuję, napisałbym wówczas w innym dziale. Miała być na sobotę, ale jak będzie na jutro, to jakoś przeżyję :-)
Ale nie o taką dyskusję przecie tu chodzi.
Chodzi o to, że nie jestem w stanie rozwiązać opisanego przeze mnie problemu, jeśli natomiast nauczę się czegoś nowego, to będę się tylko cieszył. Dlatego nawet nie gotowe rozwiązania, a coś co pomoże mi problem zrozumieć, dzięki czemu rozwiązać będzie równie pomocne.
Koniec już mojego mądrzenia się, w końcu to ja potrzebuję pomocy brzydal.gif

Błąd:
Cytat
ERRNO: 2 TEKST: mysql_num_rows(): supplied argument is not a valid MySQL result resource LOKALIZACJA: /home/euroland/ftp/index/wysz4/grid.php, linia 40



EDIT:
TAk, chodziło o dwie tabele...

Ten post edytował Gallar 10.03.2009, 11:17:29


--------------------
Jestem Misiem o Bardzo Małym Rozumku
i długie słowa sprawiają mi wielką trudność.
Alan Alexander Milne
Go to the top of the page
+Quote Post
erix
post 10.03.2009, 15:02:46
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Konstruktywna, to taka, która nie tylko błędy wytyka, ale przynajmniej stara się nakierować jak te błędy naprawić.

Przecież nakierowałem. winksmiley.jpg Poza tym, jeśli cały kod jest do przepisania, to więcej czasu zejdzie na jego naprawę, niż napisanie od nowa.

Cytat
Błąd:

Masz coś nie tak z zapytaniem; wyświetl je sobie i debuguj w konsoli MySQL.


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Mephistofeles
post 10.03.2009, 21:04:13
Post #8





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


Rady? Filtruj POSTa (mysql_real_escape_string itd.), a dane trimuj od razu do zmiennych, ominiesz 9 linijek kodu smile.gif.
Go to the top of the page
+Quote Post
Gallar
post 12.03.2009, 19:11:46
Post #9





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 9.03.2009

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


Cytat(Mephistofeles @ 10.03.2009, 21:04:13 ) *
Rady? Filtruj POSTa (mysql_real_escape_string itd.), a dane trimuj od razu do zmiennych, ominiesz 9 linijek kodu smile.gif.



Dziękuję.

Wpisałem w konsoli zapytanie z wpisanymi na "sztywno" danymi i wszystko jest ok, wywaliło mi to, co wywalić powinnoc...
Nie wiem co dalej. Mówicie, aby to napisać jeszcze raz. Może jeszcze jakieś rady, bym nie kręcił się w kółko ?


--------------------
Jestem Misiem o Bardzo Małym Rozumku
i długie słowa sprawiają mi wielką trudność.
Alan Alexander Milne
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: 14.08.2025 - 09:19