Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypt wyszukiwarki
Forum PHP.pl > Forum > Przedszkole
Martin24
Powiedzcie, co tu nie gra, bo już się gubię... W założeniu powinno działać, ale daje zawsze tylko jeden wynik, i to tylko jeśli słowo poszukiwane występuje w tytule, bo już jeśli występuje w autorza albo opisie, ale nie w tytule, daje: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/jansway/ftp/sklep/c/index.php on line 74.

  1. <?php
  2.  
  3. require_once ('../../mysql_connect.php');
  4.  
  5. // Tworzę tabelę na czas wyszukiwania...
  6. $tabela = &#092;"CREATE TABLE tmp (book_id VARCHAR(6))\";
  7. $utworz = @mysql_query ($tabela) or die (mysql_error());
  8.  
  9. // Pierwsze zapytanie daje wynik w postaci id książek, w których tytuł
  10. // LIKE słowo kluczowe i wstawia wynik w posaci id do czasowej tabeli...
  11. /// To samo robi zapytanie drugie i trzecie. 
  12. $query1 = &#092;"SELECT id FROM books WHERE autor LIKE '$search%' \"; 
  13. $result1= @mysql_query ($query1) or die (mysql_error()); 
  14. $row1= mysql_fetch_array($result1);
  15. $wstaw1 = &#092;"INSERT INTO tmp (book_id) VALUES ('{$row1[0]}')\";    
  16. $akcja1 =  @mysql_query ($wstaw1) or die (mysql_error());
  17.  
  18. $query2= &#092;"SELECT id FROM books WHERE tytul LIKE '$search%' \"; 
  19. $result2 = @mysql_query ($query2) or die (mysql_error()); 
  20. $row2 = mysql_fetch_array($result2);
  21. $wstaw2 = &#092;"INSERT INTO tmp (book_id) VALUES ('{$row2[0]}')\";    
  22. $akcja2 =  @mysql_query ($wstaw2) or die (mysql_error());
  23.  
  24. $query3 = &#092;"SELECT id FROM books WHERE opis LIKE '%$search%' \"; 
  25. $result3 = @mysql_query ($query3) or die (mysql_error()); 
  26. $row3 = mysql_fetch_array($result3);
  27. $wstaw3 = &#092;"INSERT INTO tmp (book_id) VALUES ('{$row3[0]}')\";    
  28. $akcja3 =  @mysql_query ($wstaw3) or die (mysql_error());
  29.  
  30. // Tutaj wybiera listę poukładanych w odpowiedniej kolejności wyników zapytania
  31. $query4 = &#092;"SELECT * FROM tmp\"; 
  32. $result4 = @mysql_query ($query4) or die (mysql_error());
  33. $row4 = mysql_fetch_array($result4);
  34.  
  35. // Wybiera wszystkiepozycje z tabeli books (w odpowiedniej kolejności),
  36. // którym odpowiada book_id z czasowej tabeli tmp z limitem do 5 pozycji...
  37. $odczyt = &#092;"SELECT autor , tytul  FROM books WHERE id = {$row4[0]} LIMIT 0,5\";
  38. $result_odczyt = @mysql_query($odczyt) or die (mysql_error());
  39. $row_count = mysql_num_rows($result_odczyt);
  40.  
  41. ?>
ikioloak
Nieraz to juz pisalem - rowniez Tobie: mysql_error() !
Martin24
Problem w tym, że jeśli szukana pozycja znajduje się w tabeli wyświetla błędu. Wyszukuje tylko zapytanie obecne w tytule i wyświetla tylko jeden wynik
strife
Wyświetla jeden wynik ponieważ nie przeglądasz całej tablicy, powinno to wyglądać mniej więcej tak:
  1. <?php
  2.  
  3. while( $row = mysql_fetch_array )
  4. {
  5. //... tutaj wszystkie wyniki w postaci np. $row['id'] etc.
  6. }
  7.  
  8. ?>
ikioloak
  1. <?php
  2.  
  3. $odczyt = &#092;"SELECT books.autor , books.tytul FROM books, tmp WHERE books.id=tmp.id LIMIT 0,5\";
  4.  
  5. ?>

nie jestem pewien ale to powinno dzialac.
Martin24
  1. <?php
  2.  
  3. if($row_count == 0) {
  4. $message ='<p>Brak wyszukiwanej pozycji!</p>';
  5. } else {
  6. while ($row = mysql_fetch_array($result_odczyt)) {
  7. //print ...... itd
  8.  
  9. ?>

to jest dalszy ciąg
ikioloak
Zamiast tych wszystkich zapytan, dodatkowej tabeli, uzyj takiego zapytania SQL:
  1. SELECT *
  2. FROM books WHERE autor LIKE '%$search%' OR tytul LIKE '%$search%' OR opis LIKE '%$search%'
  3. GROUP BY autor, tytul, opis

Pozniej przez mysql_fetch_array() wydobywasz juz dobrze ulozone dokladnie te rekordy ktore chciales
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.