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
Spirit86
post
Post #2





Grupa: Zarejestrowani
Postów: 607
Pomógł: 23
Dołączył: 8.09.2004
Skąd: Wrocław

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


Ech, mój bład, nie właczyłem MyISAM . Myślałem, że jest to domyślne (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .

Nie rozumiem czegoś:

  1. TEXT, CHAR i VARCHAR a one maja ograniczenie do 255 znakow.


przecież text nie ma ograniczenia do 255 znaków. Czego tyczy się to 255 znaków, łańcucha, jakiego możemy szukać?

Ten post edytował Spirit86 20.03.2006, 19:04:07
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: 11.10.2025 - 22:55