Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Wyszukiwarka co to umie wyświetlać dane z bazy SQL. Proszę o pomoc
APW
post
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.
(IMG:http://apwarsz.home.pl/pub/tabele.jpg)

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
  1. <?php
  2. // program wyszukiwarki - search.php
  3. // wyświetlenie nagłówka
  4. echo'<h2>Wyniki wyszukiwania</h2>';
  5. // usunięcie niepotrzebnych białych znaków
  6. $_POST['phrase']=trim($_POST['phrase']);
  7. // sprawdzenie, czy użytkownik wpisał dane
  8. if(empty($_POST['phrase']))
  9. // jeśli nie, to wyświetl komunikat i zakończ działanie skryptu
  10. die('Formularz wypełniony niepoprawnie! Nie można wyświetlić wyników wyszukiwania!');
  11. // jeśli jednak dane są wpisane poprawnie
  12. else
  13. {
  14. // połączenie z bazą danych, NIE ZAPOMINJ USTAWIĆ WŁASNYCH DANYCH!
  15. $base=mysqli_connect('xxx','xxx','xxx','xxx');
  16. // skonstruowanie zapytania
  17. // zwróć uwagę na operator Like - to on jest sercem całej aplikacji. Pozwala wyszukać dany ciąg w bazie danych
  18. // jak zapewne zauważyłeś, przed frazą i po niej umieszczam znaki procenta %
  19. // ten znak symbolizuje dowolny inny ciąg znaków, więc jest niezbędny do skutecznego wyszukiwania
  20. // połaczenie operatorem Or pozwala na wyszukiwanie danego ciągu zarówno w nazwie, jak i opisie produktu
  21. // UWAGA! Tutaj też nie zapomnij ustawić swoich danych!
  22. $query="Select nazwa, typ, cena, magazyn From misie Where nazwa Like '%{$_POST['phrase']}%'";
  23. // wysłanie zapytania do bazy danych
  24. $result=mysqli_query($base,$query);
  25. // ustalenie ilości wyszukanych obiektów
  26. $obAmount=mysqli_num_rows($result);
  27. // wyswietlenie ilości wyszukanych obiektów
  28. echo'Znaleziono: '.$obAmount.'<br /><br />';
  29. echo '<table border="0" align="center" cellpadding="2" cellspacing="0">
  30. <tr><td align="center" width="100"><font color="#FFCC00">NAZWA</font></td>
  31. <td align="center" width="100"><font color="#FFCC00">TYP</font></td>
  32. <td align="center" width="50"><font color="#FFCC00">CENA</font></td>
  33. <td align="center" width="70"><font color="#FFCC00">MAGAZYN</font></td></tr>';
  34. // wyświetlenie wyników w pętli
  35. for($x=0;$x<$obAmount;$x++)
  36. {
  37. // przekształcenie danych na tablicę
  38. $row=mysqli_fetch_assoc($result);
  39.  
  40. // wyświetlenie nazwy produktu
  41. echo '<tr><td>'.$row['nazwa'].'</td>
  42. <td>'.$row['typ'].'</td>
  43. <td align="center">'.$row['cena'].'</td>
  44. <td align="center">'.$row['magazyn'].'</td>
  45. </tr>';
  46. }
  47. }
  48. // zamknięcie połączenia
  49. mysqli_close($base);
  50. echo '</table>';
  51. // koniec aplikacji
  52. ?>

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...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
APW
post
Post #2





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":
  1. $query="select misie.nazwa, misie.typ, misie.cena, misie.magazyn, lale.nazwa, lale.typ, lale.cena, lale.magazyn from misie, lale where misie.magazyn like '%{$_POST['phrase']}%' or lale.magazyn like '%{$_POST['phrase']}%'";

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...
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.04.2026 - 14:17