![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 94 Pomógł: 0 Dołączył: 9.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
mam takie zapytanie
gdy sie poda w formularzu wszystko tj nazwa, opis, firma, kolor to wszystko dziala ok ale jesli ktores z pol zostaje niewypelnione (a użytkownik musi miec taka mozliwosc) to mimo ze pozostale wartosci znajduja sie w bazie nie zwraca nic Jesli ktos wie jak to rozwiazac to bylbym wdzieczny Interesuja mnie rozwiazana w samym zapytaniu mysql oraz przez php Ten post edytował batman 2.09.2008, 18:12:04
Powód edycji: nobody expects spanish inquisition
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 295 Pomógł: 9 Dołączył: 8.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
problem zapewne wynika z tego, że kiedy UŻYTKOWNIK (pisownia polska nie jest taka trudna;P ) nie poda jakiejś wartości to zapytanie wyszukuje pól z pustymi ciągami znaków...przez to, że masz wszędzie AND to wygląda na tej zasadzie, że szuka pól gdzie opis czy tam firma jest pustym ciągiem znaków, a takowych nie znajduje bo jak sam napisałeś pozostałe wartości są w tabeli. Dlatego moja rada:
1. albo zamiast AND daj OR wtedy powinno działać 2. albo zrób sprawdzanie tego co jest zaznaczone i konstruuj w locie zapytanie np: Kod $sql = "SELECT * FROM sprzet WHERE ";
if($_POST['nazwa'] != '') { $sql .= "nazwa LIKE '%nazwa%' AND"; } if($_POST['opis'] != '') { $sql .= "opis LIKE '%opis%'"; .... // i tak dalej |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 94 Pomógł: 0 Dołączył: 9.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
nie jest trudna ale kazdemu sie zdazaja bledy ;p ale nie o tym tutaj Dzieki za rozwiazanie ale nie chodzi o to zeby je skopiowac tylko rozumiec o co chodzi.
W tym rozwiazaniu chodzi o to zeby posklejac zapytanie a pozniej dopiero go uzyc?
PS nie do konca dziala bo jak mam
i pozostale zmiene sa puste to przyczepia sie do 'AND' ale pracuje nad tym ![]() Ten post edytował di@blo 2.09.2008, 20:21:31 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 295 Pomógł: 9 Dołączył: 8.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
tak chodzi o to żebyś posklejał zapytanie i go potem użył.
Też się kiedyś spotkałem z tym problemem co opisujesz. Możesz to zrobić na dwa sposoby. Jeden jest dość skomplikowany bo wymaga od ciebie szeregu instrukcji warunkowych które uwzględnią wszystkie możliwe przypadki. drugi sposób jest taki Kod ... if($zmienna1 != '') { $sql .= "cos LIKE '%cos%' AND "; } if($zmienna2 != '') { $sql .= "cos2 LIKE '%cos2%' AND "; } $sql .= "jakies_pole != ''"; // może tu też być np: $sql .= "jakies_pole LIKE '$''$'"; może to nie jest zbyt eleganckie i nie powinno się tak robić, ale ja tak rozwiązałem ten problem kiedyś przy czymś tam pracując. Ogólnie rzecz polega na tym, że dajesz jakiś absurdalny warunek który będzie spełniony zawsze. Np. pole z identyfikatorem różne od pustego ciągu znaków. W ten sposób zamykasz zapytanie i nie zostaje ci to brzydkie AND na końcu ![]() ![]() mam nadzieje, że nikt się nie zgorszy tym może trochę mało wyrafinowanym sposobem....on po prostu spełnia swoją rolę i nikomu nie wadzi ![]() |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 17 Dołączył: 23.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Zawsze możesz to zrobić tak:
nie do konca dziala bo jak mam
i pozostale zmiene sa puste to przyczepia sie do 'AND' Najszybszy sposób na pozbycie się tego 'AND' w zlepionym zapytaniu, to skorzystanie z funkcji substr(). Można to zrobić tak:
Ten skrawek kodu wykonujesz, gdy zapytanie jest już praktycznie gotowe ![]() -------------------- serwiswww.pl
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 94 Pomógł: 0 Dołączył: 9.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 11:31 |