Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] wyszukiwarka, wyswietlanie wynikow kilka razy
senor_d
post
Post #1





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 17.02.2005
Skąd: skad

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


witam

mam skrypt malej wyszukiwarki oparty na mysql'u. dopoki podaje sie do wyszukiwania jeden wyraz wszystko jest (powiedzmy) tak jak chce. ale juz przy kilku wyrazach wyniki kaszanią sie, sa powtorzone kilkukrotnie. nie wiem jak to dokladnie wytlumaczyc wiec tutaj jest link. a to jest kod:

  1. <?php
  2.  
  3. $fraza = $_GET[p];
  4.  
  5.  
  6. $przycieta = trim($fraza);
  7. $tablica = explode(' ',$przycieta);
  8.  
  9.  
  10.  
  11.  
  12. if (isset($p) && $fraza == '') {
  13. $message = "Musisz podać wyszukiwany wyraz!";
  14. }
  15.  
  16. if (!isset($p)) {
  17. $message = "Brak prametru do wyszukania!";
  18. }
  19.  
  20.  
  21. foreach ($tablica as $ciete){
  22.  
  23. $ilosc_wynikow = mysql_num_rows(sql("select * from ksiega where wpis like \"%$ciete%\" order by id desc"));
  24.  
  25. if (empty($limit)) {
  26. $limit = 0;
  27. }
  28.  
  29.  
  30. $wynik = sql("select * from ksiega where wpis like \"%$ciete%\" order by id desc");
  31.  
  32. do{
  33. $id_array[] = $dane[id];
  34. } while ($dane = mysql_fetch_array($wynik));
  35.  
  36.  
  37. }
  38.  
  39.  
  40. if($ilosc_wynikow == 0 && !isset($message)){
  41. $message = "Nie znaleziono wyniku pasującego do szukanej frazy " . $przyciete;
  42. }
  43.  
  44. $czasowa_tab = array_unique($id_array);
  45. $i=0;
  46. foreach ($czasowa_tab as $n) {
  47. $nowa_tab[$i] = $n; 
  48. $i++;
  49. }
  50.  
  51. if(isset($message)){
  52. print $message;
  53. exit();
  54. } else {
  55. print "&nbsp;&nbsp;Wyniki wyszukiwania dla: <span style=\"font-weight:bold\">&sbquo;&sbquo;" . $fraza . "&rsquo;&rsquo;</span><br /><br />";
  56. }
  57.  
  58.  
  59.  
  60. $nr == 1;
  61. foreach($nowa_tab as $id){
  62.  
  63. $dane_found = mysql_fetch_array(sql("select * from ksiega where id = '$id'"));
  64. $head = $dane_found[wpis];
  65. $head_rev = strrev($dane_found[wpis]);
  66.  
  67.  
  68. foreach($tablica as $ciete){
  69.  
  70. $ciete_rev = strrev($ciete);
  71.  
  72.  
  73. if (substr_count($head,$ciete) >= 2) {
  74.  
  75. $sub_rev = strrev(substr($head,strpos($head,$ciete),strlen($head)));
  76. $poczatek = substr($head,0,strpos($head,$ciete));
  77. $srodek = strrev(substr($sub_rev,strpos($sub_rev,$ciete_rev),strlen($sub_rev)));
  78. $koniec = strrev(substr($sub_rev,0,strpos($sub_rev,$ciete_rev)));
  79.  
  80. if (strlen($poczatek) >= 50) {
  81. $poczatek = substr($poczatek,strlen($poczatek) - 50,strlen($poczatek));
  82. $poczatek = substr($poczatek,strpos($poczatek,' '),strlen($poczatek));
  83. }
  84.  
  85. if (strlen($koniec) >= 50) {
  86. $koniec = substr($koniec,0,50);
  87. $koniec = substr($koniec,0,strrpos($koniec,' '));
  88. }
  89.  
  90.  
  91. $text = $poczatek . $srodek . $koniec;
  92.  
  93.  
  94.  
  95. } else if (substr_count($head,$ciete) == 1) {
  96.  
  97. $przed = substr($head,0,strpos($head,$ciete));
  98. $po = strrev(substr($head_rev,0,strpos($head_rev,$ciete_rev)));
  99.  
  100. if (strlen($przed) >= 100) {
  101. $przed = substr($head,strpos($head,$ciete) - 100,100);
  102. $przed = substr($przed,strpos($przed,' '),strlen($przed));
  103. }
  104.  
  105. if (strlen($po) >= 100) {
  106. $po = substr($head_rev,strpos($head_rev,$ciete_rev) - 100,100);
  107. $po = strrev(substr($po,strpos($po,' '),strlen($po)));
  108. }
  109.  
  110. $text = $przed . $ciete . $po;
  111.  
  112. }
  113.  
  114. $text= preg_replace("'($ciete)'si", "<span style=\"font-weight:bold; color:#0000FF\">\\1</span>",$text);
  115.  
  116.  
  117.  
  118. ?>
  119. <table cellspacing="0" cellpadding="0">
  120. <tr>
  121. <td style="width:15px; text-align:left; vertical-align:top">
  122. <?php print $dane_found[id]; ?>.
  123. </td>
  124. <td style="width:375px; text-align:left; vertical-align:top">
  125. <div style="width:375px">
  126. <a class="search" href="<?php $nr; ?>">...<?php print $text; ?>...</a>
  127. </div>
  128. </td>
  129. </tr>
  130. <tr>
  131. <td style="height:10px"></td>
  132. </tr>
  133. </table>
  134. <?php
  135.  
  136. }
  137. $nr++;
  138. }
  139.  
  140.  
  141.  
  142.  
  143.  
  144.  
  145.  
  146. ?>


wie moze ktos jak temu zaradzic? bardzo bylbym wdzieczny. dzieki
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
barney
post
Post #2





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 12.03.2006

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


Witam,
Cytat
barney jesli istnieje sposob ominiecia tego i znasz go to bylbym wdzieczny za info bo nawet z twoimi poprawkami nie dziala to tak jakbym chcial.
A co jest nie tak (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) W sumie to może być kwestia łączenia szukanych wyrazów czy robić to AND-em (wtedy wszystkie muszą wystąpić) czy OR-em (tak jak ja zrobiłem, czyli wystarczy że wystąpi jeden)

Pozdrawiam

Ten post edytował barney 21.03.2006, 09:35:03
Go to the top of the page
+Quote Post

Posty w temacie


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: 6.10.2025 - 04:50