Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Uniwersalne zapytanie do bazy danych
Forum PHP.pl > Forum > Przedszkole
casteam123
Witam potrzebuje stworzyć uniwersalne zapytanie do wyszukiwarki, której formularz jest na screenie

wyraz wpisany w formularz to zmienna $slowo (np. samochód), a gdzie ma szukać to $cel (tagi)

Jestem początkujący jak coś, próbowałem coś zrobić i zatrzymałem się na tym:

Formularz
  1. <h4><strong>Szukaj artykułu według:</strong></h4>
  2. <form action="szukaj.php" method="POST">
  3. <input type="text" name="slowo" />
  4. <select name="cel">
  5. <option value="tytul">Tytuł</option>
  6. <option value="opis">Opis</option>
  7. <option value="zrodlo">Źródło</option>
  8. <option value="tagi">Tagi</option>
  9. </select>
  10. <button type="submit">szukaj</button>
  11. </form>


PHP
  1. if ($_POST['slowo'])
  2. {
  3. $cel=$_POST['cel'];
  4. $slowo=htmlspecialchars($_POST['slowo']);
  5. $start = mysql_query("Select * FROM tb_artykuly where $cel like '%$slowo%'") or die(mysql_error());
  6. $krok = mysql_fetch_array($start);
  7. echo $krok['id'];
  8. include ('footer.php');
  9. exit();
  10. }
darko
i...
ps dane pobierane za pomocą funkcji mysql_fetch_array należy wyciągać w pętli while, chyba, że z góry wiesz, że zawsze pobierzesz jeden rekord.
// edit
zobacz po wysłaniu i przypisaniu do zmiennych, co się w nich kryje:
  1. print_r($cel);
  2. print_r($slowo);
  3. // powinno zwrócić wpisane słowo i wybrany cel
  4. // i dalej:
  5. $start = mysql_query("Select * FROM tb_artykuly where $cel like '%$slowo%'");
  6. if(!$start) die(mysql_error());
  7. while($temp = mysql_fetch_array($start)) {
  8. $idki[] = $temp['id'];
  9. }
  10. print_r($idki);
casteam123
problem z 1 posta rozwiazany teraz mam kolejny smile.gif

Chodzi o wyszukiwanie po tagach. Powiedzmy ze tagi sa oddzielane spacja " " i mamy artykul o pieczeniu ktory posiada takie tagi: pieczenie piekarz pieczywo piekarnia
i dla przykladu ktos wpisze: pieczywo piekarz i tu chcialbym aby przeszukiwalo artykul po obojetnej(losowej) kolejnosci ulozenia tych tagow. W tej chwili jest tak, ze jak wpisze w kolejnosci od lewej 2 lub wiecej tagow to znajdzie dany artykul ale jesli zamienie kolejnosc badz omine ktorys tag pomiedzy wpisanymi to mam brak rezultatow. Aktualny kod wyglada nastepująco"

  1. if ($_POST['slowo'])
  2. {
  3. $cel=$_POST['cel'];
  4. $slowo=mysql_real_escape_string($_POST['slowo']);
  5. $start = mysql_query("Select * FROM tb_artykuly where $cel like '%$slowo%'") or die(mysql_error());
  6. $i=0;
  7. while($temp = mysql_fetch_array($start)) {
  8. echo '<font size="3"><a href="artykuly.php?id=' . $temp['id'] . '">' . stripslashes($temp["tytul"]) . '</a></font><br>';
  9. echo '<font size="2">' . stripslashes($temp["opis"]) . '</font><br><br>';
  10. $i=$i+1;
  11. }
  12. if ($i==0)
  13. {
  14. echo "Brak rezultatów wyszukiwania!";
  15. }
thek
Bo problem w tym, że nie rozbijasz słów kluczowych. znajdzie Ci ciąg "piekarz chleb" tylko jeśli tak masz gdzieś podane. Powinieneś zrobić explode tego słowa i podać je jako osobne w klauzuli WHERE oddzielone OR tak, by utworzyło
WHERE pole LIKE '%piekarz%' OR pole LIKE '%chleb%'
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.