Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Skrypt wyszukiwarki, co nie gra?
Martin24
post
Post #1





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 2.08.2005
Skąd: pomorskie

Ostrzeżenie: (30%)
XX---


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. ?>


Ten post edytował Martin24 7.08.2005, 22:17:23
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
ikioloak
post
Post #2





Grupa: Zarejestrowani
Postów: 416
Pomógł: 0
Dołączył: 8.01.2004

Ostrzeżenie: (0%)
-----


Nieraz to juz pisalem - rowniez Tobie: mysql_error() !
Go to the top of the page
+Quote Post
Martin24
post
Post #3





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 2.08.2005
Skąd: pomorskie

Ostrzeżenie: (30%)
XX---


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

Ten post edytował Martin24 7.08.2005, 22:15:11
Go to the top of the page
+Quote Post
strife
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

Ostrzeżenie: (0%)
-----


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. ?>


--------------------
Go to the top of the page
+Quote Post
ikioloak
post
Post #5





Grupa: Zarejestrowani
Postów: 416
Pomógł: 0
Dołączył: 8.01.2004

Ostrzeżenie: (0%)
-----


  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.

Ten post edytował ikioloak 7.08.2005, 22:24:37
Go to the top of the page
+Quote Post
Martin24
post
Post #6





Grupa: Zarejestrowani
Postów: 48
Pomógł: 0
Dołączył: 2.08.2005
Skąd: pomorskie

Ostrzeżenie: (30%)
XX---


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





Grupa: Zarejestrowani
Postów: 416
Pomógł: 0
Dołączył: 8.01.2004

Ostrzeżenie: (0%)
-----


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

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

 



RSS Aktualny czas: 20.08.2025 - 16:47