![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 1 335 Pomógł: 34 Dołączył: 9.11.2005 Skąd: Wrocław Ostrzeżenie: (10%) ![]() ![]() |
Witam, nie mam pomysłu na dobre zapytanie, może mógłby mi ktoś pomóc.
Struktura formularza: Nick (tekstowe) Wiek pomiędzy (lista rozwijana) a (lista rozwijana) Płeć (lista rozwijana) Miejscowość (tekstowe) Cel ogłoszenia (lista rozwijana) Kolor oczu (lista rozwijana) Kolor włosów (lista rozwijana) Długość włosów (lista rozwijana) Nie wszystkie pola muszą być wypełnione. Aha i ma uwzględnić, żeby wyszukiwać osoby tylko ze statusem równym 1 czyli STATUS = '1' Z góry dziękuję za pomoc. Najlepiej jakby to miało ręce i nogi. Po prostu nie wiem jak to za bardzo dobrze stworzyć. -------------------- > > > Tworzenie stron < < <
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 033 Pomógł: 125 Dołączył: 17.09.2005 Skąd: Żywiec Ostrzeżenie: (0%) ![]() ![]() |
Zakładam, że chodzi ci o pobranie danych z bazy spełniających kryteria z formularza. Jeśli tak to:
- Zapisujesz sobie do zmiennej początek zapytania, np. "SELECT * FROM tabela WHERE" - Sprawdzasz wszystkie pola formularza i jeśli nie są puste/domyślne to dodajesz nowy warunek do tego zapytania, np. "(gender = 'f') AND " - W razie potrzeby usuwasz " AND " odstające na końcu zapytania, żeby zachować poprawną składnię. - Możesz jeszcze dodać jakiś ORDER BY czy LIMIT i zapytanie jest gotowe do użycia. -------------------- "Sumienie mam czyste, bo nieużywane."
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 590 Pomógł: 40 Dołączył: 11.01.2007 Skąd: Centrum Ostrzeżenie: (0%) ![]() ![]() |
Jako uzupełnienie tego co napisał Kicok zrobiłbym takie zapytanie:
select * from tabela where 1=1 a potem tak samo sprawdzałbym, czy dane przesyłane z formularza są inne niż puste/domyślne. Jeżeli tak to do zapytania dodajesz wartość " AND nazwa_kolumny=$wartosc_z_formularza". W ten sposób nie będziesz musiał potem sprawdzać, czy na końcu zapytania nie ma AND i go usuwać. EDIT: Oczywiście Kicok ma rację ![]() -------------------- 404
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 033 Pomógł: 125 Dołączył: 17.09.2005 Skąd: Żywiec Ostrzeżenie: (0%) ![]() ![]() |
W sumie jeśli ma być STATUS = '1' to można go użyć zamiast 1=1 ;]
-------------------- "Sumienie mam czyste, bo nieużywane."
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 335 Pomógł: 34 Dołączył: 9.11.2005 Skąd: Wrocław Ostrzeżenie: (10%) ![]() ![]() |
Ale ja pisałem (jeżeli nie to teraz pisze), że nie trzeba wypełnić wszystkich pół, to co wtedy?
Jak zrobię coś takiego: SELECT * FROM users WHERE status = '1' AND nick LIKE '$nick' AND wiek BETWEEN '$wiek1' AND '$wiek2' AND plec = '$plec' AND miejscowosc = '$miejscowosc' AND cel = '$cel' AND kolor_oczu = '$kolor_oczu' AND kolor_wlosow = '$kolor_wlosow' AND dlugosc_wlosow = '$dlugosc_wlosow' To będzie poprawnie? I wyświetli dobrze wszystko jeżeli ktoś nie wpisze (wybierze) jakieś pole? Ten post edytował in5ane 8.05.2007, 20:43:58 -------------------- > > > Tworzenie stron < < <
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 590 Pomógł: 40 Dołączył: 11.01.2007 Skąd: Centrum Ostrzeżenie: (0%) ![]() ![]() |
Przeczytaj dokładnie to co napisał Kicok w swojej pierwszej odpowiedzi a dokładnie to co jest po drugim myślniku.
Tam masz odpowiedź na swoje pytanie i tak powinieneś to zrobić. -------------------- 404
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 335 Pomógł: 34 Dołączył: 9.11.2005 Skąd: Wrocław Ostrzeżenie: (10%) ![]() ![]() |
Czy tak?
SELECT * FROM users WHERE status = '1', nick LIKE '$nick', wiek BETWEEN '$wiek1' AND '$wiek2', plec = '$plec', miejscowosc = '$miejscowosc', cel = '$cel', kolor_oczu = '$kolor_oczu', kolor_wlosow = '$kolor_wlosow', dlugosc_wlosow = '$dlugosc_wlosow' AND Jak dodałem to to mi wyskoczył takie error: Kod Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\str2(2)\szukaj.php on line 73 a ta linia to: mysql_num_rows($result) == 0 (to odpowiada za to, jak nie znajdzie żadnych wyników.
Ten post edytował in5ane 9.05.2007, 06:26:15 -------------------- > > > Tworzenie stron < < <
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 590 Pomógł: 40 Dołączył: 11.01.2007 Skąd: Centrum Ostrzeżenie: (0%) ![]() ![]() |
Czy tak? SELECT * FROM users WHERE status = '1', nick LIKE '$nick', wiek BETWEEN '$wiek1' AND '$wiek2', plec = '$plec', miejscowosc = '$miejscowosc', cel = '$cel', kolor_oczu = '$kolor_oczu', kolor_wlosow = '$kolor_wlosow', dlugosc_wlosow = '$dlugosc_wlosow' AND .... Stanowczo nie tak. Widać nie do końca zrozumiałeś jak powinno to wyglądać. Oto krótki przykład pisany bardzo schematycznie.
I tak robisz dla każdego pola z formularza. Musisz pamiętać że sprawdzenie ma nie być na sztywno !='' ( różne od pustego ) ale sprawdzasz czy jest dane pole ustawione ( czy jest różne od pola domyślnego - a jakie jest pole domyślne to chyba powinieneś wiedzieć w końcu sam pisałeś formularz ) -------------------- 404
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 1 033 Pomógł: 125 Dołączył: 17.09.2005 Skąd: Żywiec Ostrzeżenie: (0%) ![]() ![]() |
Po pierwsze to jeśli jakieś zapytanie nie za bardzo chce działać, to stosuj taki zapis:
Dzięki temu w oknie przeglądarki pojawi się jeden, trochę bardziej czytelny błąd. Więcej informacji tutaj: musql_error" title="Zobacz w manualu PHP" target="_manual Po drugie napisałem: Cytat Sprawdzasz wszystkie pola formularza i jeśli nie są puste/domyślne to dodajesz nowy warunek do tego zapytania Czyli jeśli ktoś nie wypełni żadnego pola w formularzu, to powinieneś uzyskać takie zapytanie: SELECT * FROM users WHERE status = '1' Jeśli ktoś uzupełni jedno pole, to coś w rodzaju: SELECT * FROM users WHERE status = '1' AND nick = '$nick' Jeśli dwa pola, to coś w rodzaju: SELECT * FROM users WHERE status = '1' AND nick = '$nick' AND kolor_oczu = '$kolor_oczu' itd. Po prostu sprawdzasz sprawdzasz czy dane pole tekstowe z formularza jest puste empty" title="Zobacz w manualu PHP" target="_manual. Co do tej wartości domyślnej, to chodziło mi o pola SELECT. Nie wiem jak je utworzyłeś, ale jeśli zrobiłeś coś w rodzaju: Kod <select name="plec"> <option value="0">Wybierz płeć</option> <option value="1">Kobieta</option> <option value="2">Mężczyzna</option> </select> to sprawdzasz, czy $_POST['plec'] jest równe zero. Jeśli tak, to znaczy że użytkownik nie "wypełnił" tego pola, i nie dodajesz warunku do zapytania. A teraz kilka szczegółów. Po pierwsze to zapis: nick LIKE '$nick' wydaje mi się bez sensu. Jeśli chcesz znaleźć dokładnie takie nicki jak podany w formularzu, to użyj: nick = '$nick'. Jeśli natomiast chcesz znaleźć nicki podobne, to dodaj tam jeszcze znaczek procenta: nick LIKE '$nick%'. Więcej informacji tutaj: http://dev.mysql.com/doc/refman/5.0/en/str...l#operator_like Po drugie zastanów się, czy na pewno warto używać zapisu: wiek BETWEEN '$wiek1' AND '$wiek2'. Co będzie, gdy użytkownik poda tylko $wiek1 albo tylko $wiek2. IMHO lepiej będzie rozbić to na dwa warunki: (wiek >= '$wiek1') AND (wiek <= '$wiek2') -------------------- "Sumienie mam czyste, bo nieużywane."
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 1 335 Pomógł: 34 Dołączył: 9.11.2005 Skąd: Wrocław Ostrzeżenie: (10%) ![]() ![]() |
Wielkie dzięki
![]() -------------------- > > > Tworzenie stron < < <
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 24.06.2025 - 20:25 |