Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]wyświetlanie danych z tabeli na podstawie kilku kryteriów
kosior11
post 19.06.2012, 20:26:47
Post #1





Grupa: Zarejestrowani
Postów: 101
Pomógł: 0
Dołączył: 20.03.2011

Ostrzeżenie: (10%)
X----


Witam!

Męczę się z tym od jakiegoś czasu. Mam dwa kryteria kategorie i lokalizacje. Nie mam problemu z wybraniem danych na podstawie jednego kryterium czyli np. kategorii albo lokalizacji.

  1. $query = "(SELECT id,...,kategoria,podkategoria,lokalizacja FROM tabela where kategoria='".$_GET['kat']."') ORDER BY dane DESC";


kategorie, lokalizacje i podkategorie pobieram z adresu strony.

Problem mi sprawia to żeby pobrać dane na podstawie dwóch kryteriów, czyli np. najpierw wybrać z menu kategorie żeby wyświetlić dane z tej kategorii i później wybrać lokalizacje żeby wyświetlone dane z kategorii odnosiły się do wybranej lokalizacji.

adres dla lokalizacji wyglądał by tak: kategoria.php?kat=kategoria1,lok=lokalizacja

Próbowałem:
  1. SELECT ... where kategoria='".$_GET['kat']."' AND lokalizacja='".$_GET['lok']."'

ale wtedy muszą być oba kryteria spełnione

Jak zrobić, żeby skrypt działa zarówno z jednym z tych kryteriów jak i z dwoma?

Pozdrawiam
Go to the top of the page
+Quote Post
eviance
post 19.06.2012, 20:32:27
Post #2





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 18.03.2011
Skąd: R do M / Sanniki

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


siemka

łączenie np. "or"

  1. SELECT ... WHERE kategoria='".$_GET['kat']."' OR lokalizacja='".$_GET['lok']."'
Go to the top of the page
+Quote Post
kosior11
post 19.06.2012, 21:14:46
Post #3





Grupa: Zarejestrowani
Postów: 101
Pomógł: 0
Dołączył: 20.03.2011

Ostrzeżenie: (10%)
X----


Dzięki za odpisanie ale niestety nie wyświetla mi danych według lokalizacji, jest pustka.

mam adres: ....kat=kategoria1,lok=lokalizacja3

zapytanie wygląda następująco:
  1. $query = "(SELECT id,...,kategoria,lokalizacja FROM tabela where kategoria='".$_GET['kat']."' OR lokalizacja='".$_GET['lok']."') ORDER BY dane DESC";


kategorie są wyświetlane dobrze ale jak próbuje filtrować dane według lokalizacji to nie ma żadnych danych wyświetlonych.
Go to the top of the page
+Quote Post
eviance
post 19.06.2012, 21:36:38
Post #4





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 18.03.2011
Skąd: R do M / Sanniki

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


nie wiem co masz na przodzie ale


masz 2 zmienne

pierw bym sprawdził czy w $_get są zmiene

alertem lub confirm_return

dalej bym układał pod mysql

i co ostano się naciąłem to warunek or w () po where dodaj

Luka

Go to the top of the page
+Quote Post
BaN
post 19.06.2012, 22:24:01
Post #5





Grupa: Zarejestrowani
Postów: 158
Pomógł: 43
Dołączył: 9.11.2007

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


Cytat(kosior11 @ 19.06.2012, 21:26:47 ) *
... adres dla lokalizacji wyglądał by tak: kategoria.php?kat=kategoria1,lok=lokalizacja ...


Jeśli nie masz ustawionych jakiś reguł dla htaccess oraz nie zmieniałeś separatora parametrów przekazywanych przez $_GET, to z takiego fragmentu adresu będziesz miał ustawioną jedną zmienną $_GET['kat'] równą oczywiście 'kategoria1,lok=lokalizacja'

Parametry w adresie zwykle oddziela się znakiem & (ampersand) o ile tego nie zmieniłeś, zatem adres powinien mieć format:
Kod
kategoria.php?kat=kategoria1&lok=lokalizacja


Dodatkowo moim zdaniem należałoby sprawdzić przed wykonaniem zapytania czy coś jest podane w zmiennych oraz stosować funkcję mysql_real_escape_string


Go to the top of the page
+Quote Post
kosior11
post 19.06.2012, 22:47:43
Post #6





Grupa: Zarejestrowani
Postów: 101
Pomógł: 0
Dołączył: 20.03.2011

Ostrzeżenie: (10%)
X----


Doszedłem do błędu który sprawiał, że nie wyświetlało nic w lokalizacji a problem tkwił w adresie, zamieniłem:
kategoria.php?kat=kategoria1,lok=lokalizacja
na:
kategoria.php?kat=kategoria1&lok=lokalizacja

Niestety rozwiązanie z OR nie jest odpowiednie
  1. SELECT ... WHERE kategoria='".$_GET['kat']."' OR lokalizacja='".$_GET['lok']."'

bowiem np. w kategorii 1 wyświetlane są również dane z innych kategorii ale o podanej lokalizacji, a mi chodzi o to, żeby były wyświetlane dane tylko z wybranej kategorii i wybranej lokalizacji, chodzi o zawężenie wyświetlenia do kolejnego kryterium.

Czy mógłbym to tak rozwiązać:

  1. SELECT ... WHERE kategoria='".$_GET['kat']."' AND (lokalizacja='".$_GET['lok']."' OR lokalizacja='')


lokalizacja='' miałoby oznaczać że w ogóle nie występuje w adresie.

Kombinuje w ten sposób, bo jak np. wybiorę sama kategorię to wtedy mi nic nie wyświetla bo adres wygląda tak: kategoria.php?kat=kategoria1
a jak wybiore kategorie i lokalizacje to tak: kategoria.php?kat=kategoria1&lok=lokalizacja2
Go to the top of the page
+Quote Post
BaN
post 19.06.2012, 22:58:24
Post #7





Grupa: Zarejestrowani
Postów: 158
Pomógł: 43
Dołączył: 9.11.2007

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


  1. if (isset($_GET['kat']) && (strlen($_GET['kat']) > 0)) {
  2. $query = "SELECT ... WHERE kategoria='" . mysql_real_escape_string($_GET['kat']) . "'";
  3. if (isset($_GET['lok']) && (strlen($_GET['lok']) > 0)) {
  4. $query .= " AND lokalizacja='" . mysql_real_escape_string($_GET['lok']) . "'";
  5. }
  6. $query .= ' ORDER BY dane DESC';
  7. }
Go to the top of the page
+Quote Post
kosior11
post 22.06.2012, 13:01:28
Post #8





Grupa: Zarejestrowani
Postów: 101
Pomógł: 0
Dołączył: 20.03.2011

Ostrzeżenie: (10%)
X----


Wielkie dzięki za pomoc w rozwiązaniu działa jak chciałem!

Pozdrawiam!

Witam!

Ktoś wie co w tym kodzie jest nie tak?

  1. if (isset($_GET['kat']) && (strlen($_GET['kat']) = 0)) {
  2. $query = "SELECT id,...,kategoria,podkategoria,lokalizacja, FROM tabela";
  3. if (isset($_GET['kat']) && (strlen($_GET['kat']) > 0)) {
  4. $query = " WHERE kategoria='" . mysql_real_escape_string($_GET['kat']) . "'"; }
  5. if (isset($_GET['lok']) && (strlen($_GET['lok']) > 0)) {
  6. $query .= " AND lokalizacja='" . mysql_real_escape_string($_GET['lok']) . "'";
  7. }
  8. $query .= ' ORDER BY rodzaj_konta DESC, dane DESC';
  9. }


Kod przedstawiony przez Bana działa poprawnie, ale chciałem go trochę zmodyfikować i już nie działa.

Ten post edytował kosior11 22.06.2012, 13:02:20
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.05.2025 - 19:57