![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 17.11.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam, próbuję uruchomić wyszukiwarkę bazy SQL. Ponieważ znam tylko HTML, mam ogromne problemy z dopasowaniem odnalezionego w internecie skryptu do własnych potrzeb. Dużo skorzystałem z zawartych na tym forum różnych informacji, ale zatrzymałem się w pewnym momencie i nie wiem jak rozwikłać ową zagwozdkę. Moja baza składa się z kilku tabel (na razie dwóch o nazwach misie i lale - poniżej), z których za pomocą przedstawionego niżej formularza chciałbym wyszukiwać konkretne dane.
![]() A to kod formularza Kod <form action="search.php" method="post"> <p>Nazwa produktu: <input type="text" name="phrase" /> Typ: <input type="checkbox" name="a" value="a"> A <input type="checkbox" name="b" value="b"> B <input type="checkbox" name="c" value="c"> C </p> <p>Cena od: <input type="text" name="cena1"> do <input type="text" name="cena2"> <input type="submit" value="Szukaj!" /> </p> </form> Tutaj kod skryptu PHP, który szuka i wyświetla
Moje problemy są takie: 1. Jak zrobić, żeby dane były wyszukiwane we wszystkich tabelach w bazie. Dopisanie po przecinku nazwy drugiej tabeli powoduje błąd. 2. A na tym mi najbardziej zależy: Czy da się zrobić (jak?) żeby skrypt wyszukiwał również na podstawie ceny, po wpisaniu do formularza kwot granicznych, żeby znalazł przedmioty o cenach pomiędzy tymi wpisanymi. 3. Nie udało mi się też wprowadzić warunku wyszukiwania wg typu (A-B-C). Żeby np. przy zaznaczonej opcji A i C znalazł tylko produkty tego typu. Nie wiem jak to zrobić. Poproszę o jakieś porady, wskazówki... |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Popróbuj coś według poniższych zapytań:
1.
2.
3. musisz połączyć warunki wyszukiwania z punktu 1.i 2., sprawdzić w jakiej konfiguracji wybrano typ (abc, ab, ac, bc, cb) i analogicznie sformułować odpowiednie zapytanie do bazy. Ten post edytował darko 17.11.2009, 15:29:42 -------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 17.11.2009 Ostrzeżenie: (0%) ![]() ![]() |
Zacząłem od punktu 1 ale niestety nie udało się. Po pierwsze Zmieniłem wyszukiwanie z pola "nazwa" na pole "magazyn" albowiem chciałem sprawdzić czy będą się wyświetlały dane z obu tabel. Podstawiłem zasugerowany przez darko kod w ten sposób :
Wyszukiwarka napisała, że znaleziono jakieś rekordy, ale nic się nie wyświetlało (dlaczego?), więc wpisałem wszystkie nazwy pól w ten sposób:
I okazało się, że znajduje i wyświetla rekordy ale tylko z jednej tabeli (lale) i to tylko te, w których nazwa magazynu powtarza się i w drugiej tabeli (misie) i dodatkowo wyświetla te rekordy podwójnie. Natomiast jeśli nazwa z pola magazyny nie powtarza się w tabeli misie (np. Katowice), wtedy nie znajduje niczego. Nie umiem sobie z tym poradzić. Podobnie jest z punktem 2. Za trzeci w ogóle się nie brałem, bo to chyba dla mnie za trudne. Więc moja prośba o pomoc jest nadal aktualna... |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 14 Pomógł: 2 Dołączył: 27.10.2009 Skąd: Kalwaria Zebrzydowska / Kraków Ostrzeżenie: (0%) ![]() ![]() |
Bo w WHERE masz "and", zamień go na "or".
Poza tym spróbuj wypisywać rekordy whilem:
No i masz literówkę w mysqli_fetch_assoc . Ten post edytował Vardamir 18.11.2009, 10:55:50 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 17.11.2009 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli usunę literkę "i" to wtedy wyświetlają się jakieś błędy, więc chyba musi już tak zostać jak jest.
Jeśli dodam "while" to wszystko wyświetla się bez zmian czyli tak samo jak bez tego słówka. Natomiast jeśli zmienię "and' na "or":
to nadal wyświetla tylko rekordy z tabeli lale, ale za to w jeszcze bardziej dziwny sposób - jeśli wpiszę w formularzu nazwę magazynu, która występuje tylko w tabeli misie - wtedy wyświetlają mi się wszystkie rekordy z tabeli lale. A jeśli wpiszę nazwę z tabeli lale to wtedy rekordy zawierające tę nazwę wyświetlają się 6-krotnie, a pozostałe 2-krotnie. Więc w wynikach wyszukiwania mogę mieć nawet 20 elementów, choć wszystkich rekordów w obu bazach jest tylko 12... |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 14 Pomógł: 2 Dołączył: 27.10.2009 Skąd: Kalwaria Zebrzydowska / Kraków Ostrzeżenie: (0%) ![]() ![]() |
A tak, nie zauważyłem że łączysz się przez mysqli, a nie myslq, a takie zapytanie? (średnik powinien być na końcu zapytania)
i spróbuj wyświetlić za pomocą:
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 17.11.2009 Ostrzeżenie: (0%) ![]() ![]() |
Vardamir, wstawienie zaproponowanego stringu "$query="SELECT misie.nazwa........" powoduje błąd w tej właśnie linii: Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /search.php on line 25.
Niestety mam za małą wiedzę, żeby zrozumieć co jest źle a także by pojąć przedstawiony jeszcze przez ciebie sposób wyświetlania i nie wiem, co miałbym tam zmienić czy dostawić, względnie w którym miejscu, żeby mi się wyświetlały dane... Do tej pory udało mi się rozwiązać dzięki waszej pomocy i materiałów na tym forum problemy z punktu 2 i 3 - oczywiście tylko w odniesieniu do jednej tabeli - wtedy wszystko działa bez zarzutu. Pozostał tylko ten problem z wyszukiwaniem i wyświetlaniem rezultatów z wielu tabel (wszystkich w bazie - w tym wypadku z dwóch). |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 14 Pomógł: 2 Dołączył: 27.10.2009 Skąd: Kalwaria Zebrzydowska / Kraków Ostrzeżenie: (0%) ![]() ![]() |
Przepraszam, bez apostrofów przy zmiennych POST.
Wklej tego while i zobaczy czy Ci coś wypluje. Działa on na zasadzie, że dopóki znajduje rekord, wykonuje instrukcje i przechodzi do następnego rekordu, sprawdza go, wykonuje instrukcje. I tak aż skończą się rekordy. Natomiast mysqli_fetch_array tworzy tablice gdzie w twoim przypadku pod indexem [0] znajduje się misie.nazwa, pod indeksem [1] -> misie.typ i tak dalej. Możliwe że błednie wyświetla Ci rekordy przy mysqli_fetch_assoc gdyż masz dwie kolumny 'nazwa'. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 17.11.2009 Ostrzeżenie: (0%) ![]() ![]() |
Usunąłem apostrofy i jest teraz tak:
A końcówka skryptu z częścią o wyświetlaniu - po zmianie na proponowaną - wygląda tak: ![]() Niestety znowu coś nie działa: Parse error: syntax error, unexpected T_VARIABLE, expecting ',' or ';' in /search.php on line 43 |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 14 Pomógł: 2 Dołączył: 27.10.2009 Skąd: Kalwaria Zebrzydowska / Kraków Ostrzeżenie: (0%) ![]() ![]() |
kropki przed $row[1] i $row[5]
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 17.11.2009 Ostrzeżenie: (0%) ![]() ![]() |
2 kropki dostawione, ale wtedy: Parse error: syntax error, unexpected $end in /search.php on line 54
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 102 Pomógł: 13 Dołączył: 16.10.2009 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Sugerując się powyższym kodem (tzn. zdjęciem kodu) - brak średnika, po "echo '</table>'".
Ten post edytował Meares 18.11.2009, 20:00:26 -------------------- |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 17.11.2009 Ostrzeżenie: (0%) ![]() ![]() |
Średnik dostawiłem, ale komunikat wyświetla się ten sam...
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 18.05.2025 - 08:21 |