Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z wyszukiwarką .
Forum PHP.pl > Forum > PHP
moto0095
Witam. Napotkałem problem z którym nie mogę sobie poradzić sad.gif
Mam sobie wyszukiwarkę która w danym pliku szuka ciągu znaków który wpisaliśmy w pole input
I ja mam taką strukturę dokumentu:
  1. <html>
  2. <head>
  3. <?
  4. if(isset($_GET['BLA'])){
  5. echo "<title>BLA_BLAA</title>";
  6. }else
  7. if(isset($_GET['DDD'])){
  8. echo "<title>DDDDDDDDDDDDDDDDDDDDDDDD</title>";
  9. }
  10. echo "<title>AAAAAAAAAAAAAAAAAAAAAAAAAAA</title>";
  11. ?>
  12. <head>
  13. <dody>
  14. <?
  15. if(isset($_GET['BLA'])){
  16. echo "BLA_BLAA";
  17. }else
  18. if(isset($_GET['DDD'])){
  19. echo "DDDDDDDDDDDDDDDDDDDDDDDD";
  20. }
  21. echo "AAAAAAAAAAAAAAAAAAAAAAAAAAA";
  22. ?>
  23. </body>
  24. </html>


Wyszukiwarka ta zwraca wyniki w postaci
TYTUŁ - opis...

Jak wpiszemy np: DD to powinno zwrócić:
DDDDDDDDDDDDDDDDDDDDDDDD - DDDDDDDDDDDDDDDDDDDDDDDD

A wyświetla się :
BLA_BLAA -

Tytuł strony otrzymuję po przez funkcję :
  1. preg_match_all('#<title>(.*?)</title>#', $string, $wynik);


próbowałem zrobić coś takiego:
  1. preg_match_all('#if(isset($_GET['(.*?)'])){
  2. echo "<title>(.*?)</title>";#', $string, $wynik);


ale to nie działa.
I ja nie wiem jak zrobić tak aby wyświetlało się tak jak podałem wyżej questionmark.gif
tehaha
ale w takim czymś
  1. $_GET['BLA']
to BLA to jest jako nazwa pola input, a nie wartość wpisana do niego, jeżeli chcesz rozpatrywać przypadki względem wartości przekazanej to robisz
  1. if($_GET['nazwa_pola_input'] == 'BLA')
  2. {
  3. //
  4. } else if($_GET['nazwa_pola_input'] == 'DDD')
  5. {
  6. }


jeżeli masz więcej przypadków użyj switch
moto0095
(isset($_GET['BLA'])) - używam tego aby osiągnąć adres index.php?BLA i nie jest to żadna nazwa pola input winksmiley.jpg
tehaha
masz rację ale głupotę walnąłem, zasugerowałem się tym, że w wyszukiwarkach często przesyła się dane metodą GET
moto0095
Jak już napisałem wyszukiwarka wyświetla mi wyniki w postaci <title></title> tylko że zawsze title są równe BLA_BLAA.
A ja chciałbym zrobić tak:
jeżeli szukane słowo znajduje się w
if (isset($_GET["DDD"])){
echo "szukane słowo";
}

to żeby podało title przypisane do tej zmiennej.

Albo inaczej, czy da się wyświetlić pełny adres części strony w którym się szukane słowo znajduje
np: katalog/index.php?BLA questionmark.gif
Kshyhoo
Czyli, jeżeli dobrze rozumiem, chcesz przypisać <title> zmienną wyszukaną w treści strony?
moto0095
Tak winksmiley.jpg
Kshyhoo
Hmm, nie rozumiem, co tu kombinować, skoro pobrałeś już z formularza zmienną, to:
  1. <?php
  2. if(isset($_GET['pobrana_wartosc'])){
  3. $title = $_GET['pobrana_wartosc'];
  4. }
  5. echo '<title>" . $title . "</title>';
  6. ?>

To samo z linkiem:
  1. <?php
  2. echo '<form action="index.php?tytul='.$title .'" method="get">
  3. ?>
moto0095
Nie o to tu chodzi.
Może inaczej.
Mam plik index.php i plik szukarka.php
Zawartość index.php to
  1. <html>
  2. <head>
  3. <?
  4. if(isset($_GET['BLA'])){
  5. echo "<title>KOT ma mleko </title>";
  6. }else
  7. if(isset($_GET['DDD'])){
  8. echo "<title>ALA ma kota</title>";
  9. }
  10. echo "<title>INNE coś</title>";
  11. ?>
  12. <head>
  13. <dody>
  14. <?
  15. if(isset($_GET['BLA'])){
  16. echo "KOT";
  17. }else
  18. if(isset($_GET['DDD'])){
  19. echo "ALA";
  20. }
  21. echo "Inne";
  22. ?>
  23. </body>
  24. </html>


W pliku szukarka.php jest formularz z inpute o nazwie szukane.
I jeżeli wpiszemy do tego inputa słowo ALA
to chciałbym aby wyniki szukania wyglądały tak:
Ala ma kota - ALA.
Kshyhoo
No to:
  1. <?php
  2. if(isset($_GET['DDD'])){
  3. echo '<title>ALA ma kota - '.$_GET['DDD'].'</title>';
  4. }
  5. ?>
moto0095
Ale ta wyszukiwarka nie przeszukuje jednego pliku.
A jak wpiszę na KOT questionmark.gif
Po prostu nie wiem jak zrobić (bo coś funkcją preg_match_all mi nie działa , albo coś źle robię) aby wyświetliły się title i echo przypisane np do ?KOT_ma_mleko
Kshyhoo
To nie istotne, gdzie wyszukuje, bo możesz w linku przenieść albo w sesji do pliku, gdzie ma być wykorzystany.
moto0095
To ja może dam kod wyszukiwarki:
  1. <?
  2. $szukane = $_POST['szukane'];
  3.  
  4. function drzewko($folder) {
  5. global $pliki;
  6. if($folder != "/") {
  7. $folder .= "/";
  8. }
  9. $id_f = opendir($folder);
  10. if($id_f) {
  11. while($plik = readdir($id_f)) {
  12. if($plik == '.' || $plik == '..') {
  13. continue;
  14. }
  15. if(is_dir($folder . $plik)) {
  16. drzewko($folder . $plik);
  17. } else {
  18. $pliki[] = $folder . $plik;
  19. }
  20. }
  21. closedir($id_f);
  22. }
  23. return $pliki;
  24. }
  25.  
  26. function czytelne($spis) {
  27. $rozszerzenie[] = "txt";
  28. $rozszerzenie[] = "dat";
  29. $rozszerzenie[] = "php";
  30. $rozszerzenie[] = "php3";
  31. $rozszerzenie[] = "phtml";
  32. $rozszerzenie[] = "htm";
  33. $rozszerzenie[] = "html";
  34. foreach($rozszerzenie as $roz) {
  35. $dl_roz = strlen($roz);
  36. foreach($spis as $plik) {
  37. if(substr($plik, -$dl_roz) == $roz) {
  38. $wynik[] = $plik;
  39. }
  40. }
  41. }
  42. return $wynik;
  43. }
  44.  
  45. //======================================================================
  46.  
  47. if(isset($szukane) && $szukane != '') {
  48. $szukane = ereg_replace("[\*\.\$/]", "", $szukane);
  49. $szukane_slowa = split("\ ", $szukane);
  50. array_unshift($szukane_slowa, $szukane);
  51. $ile_slow = count($szukane_slowa);
  52. unset($szukane);
  53.  
  54. $pliki = drzewko(".");
  55. $czytelne = czytelne($pliki);
  56. unset($pliki);
  57. sort($czytelne);
  58.  
  59.  
  60. //======================================================================
  61. function ciach($tresc,$ile)
  62. {
  63. $licz = strlen($tresc);
  64. if ($licz>=$ile)
  65. {
  66. $tnij = substr($tresc,0,$ile);
  67. $txt = $tnij."...";
  68. }
  69. else
  70. {
  71. $txt = $tresc;
  72. }
  73. return $txt;
  74. }
  75. //======================================================================
  76.  
  77.  
  78.  
  79.  
  80. foreach($czytelne as $plik) {
  81. $id_pliku = fopen($plik, "r");
  82. $zawartosc = fread($id_pliku, filesize($plik));
  83. for($i=0; $i < $ile_slow; $i++) {
  84. if(ereg($szukane_slowa[$i], $zawartosc)) {
  85.  
  86. $string = file_get_contents($katalog.$plik);
  87. preg_match_all('#<title>(.*?)</title>#', $string, $wynik);
  88.  
  89. $tresc = strip_tags($zawartosc);
  90. $ile = 100;
  91. $trafienia[] = "<a href='".$katalog.$plik."'>".$wynik[1][0]."</a> - ".ciach($tresc,$ile)."<br />";
  92. }
  93. }
  94. fclose($id_pliku);
  95. }
  96.  
  97. if(!isset($trafienia)) {
  98. echo "Niestety nie znaleziono nic co by pasowało do twojego zapytania. Powrót";
  99. } else {
  100. $trafienia = array_unique($trafienia);
  101. sort($trafienia);
  102. foreach($trafienia as $pojedyncze) {
  103. echo $pojedyncze .'';
  104. }
  105. }
  106. } else {
  107. echo "Przecież chciałeś czegoś szukać! Powrót";
  108. }
  109. ?>
Kshyhoo
To ma być wyszukiwanie w treści artów, czy w plikach?
moto0095
W treści artykułu.

Jak widać tutaj
  1. $trafienia[] = "<a href='".$katalog.$plik."'>".$wynik[1][0]."</a> - ".ciach($tresc,$ile)."<br />";


Wyniki wyświetlane są Jako nazwa strony.
Tylko funkcja ta wyświetla pierwszy napotkany w pliku <title></title>.
A ja chciałbym aby wyświetlał tytle postawione pod zmienną.
Kshyhoo
Nie kumam, co chcesz osiągnąć. Może ta funkcja Ci pomoże (podświetla słowa wpisane w wyszukiwarkę):
  1. function highlight_words($word, $subject) {
  2. if (is_array($word)) {
  3. $regex_chars = "*|#.+?(){}[]^$/";
  4. for ($j = 0; $j < count($word); $j++) {
  5. for ($i = 0; $i < strlen($regex_chars); $i++) {
  6. $char = substr($regex_chars, $i, 1);
  7. $word[$j] = str_replace($char, '\\'.$char, $word[$j]);
  8. }
  9. $subject = preg_replace("/(".$word[$j].")/is", "<span style='background-color: yellow; font-weight: bold; padding-left: 2px; padding-right: 2px'>\\1</span>", $subject);
  10. }
  11. }
  12. return $subject;
  13. }
moto0095
Zauważyłem, i postaram ci się może jakoś jaśnie wytłumaczyć:
Widzisz do zmiennej $_GET['coś_tam'] są przypisane wartości:
echo "tekst"; i echo "<title></title>";
Funkcja preg_match_all wyświetla tylko pierwszy napotkany title.
Chodzi o to, że jak szukane słowo jest w $_GET['coś tam'] to wyświetliło by się title przypisane do zmiennej w której znajduje się szukane słowo.

I nie mam pojęcia jk się do tego zabrać sad.gif
Kshyhoo
Stary, wybacz, ale nie masz umiejętności przekazania swoich myśli. Może to Cię zadowoli:
  1. <?php
  2. if(isset($_GET['DDD']) && $_GET['DDD' == 'DDD'){
  3. echo '<title>ALA ma kota - '.$_GET['DDD'].'</title>';
  4. } else {
  5. echo 'echo "<title>INNE coś</title>";
  6. }
  7. ?>

A tak na marginesie, jeżeli tych warunków ma być więcej, to lepszy był by switch.
moto0095
Ja po prostu nie wiem za bardzo jak to wytłumaczyć, jeszcze pomyślę i napiszę później winksmiley.jpg

Okey, postara się wytłumaczyć to tak.
Mam plik wyszukiwarki, który wyniki wyświetla w następujący sposób.
Nazwa Strony która jest jednocześnie odnośnikiem do pliku (<title></title>) - treść.

Mam oto plik nowe.php z treścią:
  1. <?
  2. if(isset($_GET['jeden'])){
  3. echo "<title>JEDEN</title>";
  4. echo "jeden";
  5. }else
  6.  
  7. if(isset($_GET['dwa'])){
  8. echo "<title>DWA</title>";
  9. echo "dwa";
  10.  
  11. }else
  12. echo "<title>TRZY</title>";
  13. echo " trzy ";
  14. ?>


czyli jak wpiszemy w przeglądarkę nowe.php?dwa to wyświetli się "dwa".

W inpucie wpisujemy np: dwa i powinno wyświetlić:
<a href="nowe.php?dwa">DWA</a> - dwa. <=== ja chcę aby się tak wyświetlało winksmiley.jpg

Niestety wywieli się:
<a href="nowe.php">JEDEN</a> - (tutaj pusto) .



Teraz jaśniej questionmark.gif
Kshyhoo
Skoro umiesz przekazać zmienną tak:
  1. echo "<title>JEDEN</title>";

W czym problem przekazać ją tak:
  1. echo '<title>JEDEN</title> - '.$_GET['jeden'];

questionmark.gif
moto0095
Ale mi nie chodzi o TITLE. Widzę ,że nadal się nie rozumiemy sad.gif
Kshyhoo
A o co chodzi? O link?
moto0095
Cytat
W inpucie wpisujemy np: dwa i powinno wyświetlić:
<a href="nowe.php?dwa">DWA</a> - dwa. <=== ja chcę aby się tak wyświetlało

Niestety wywieli się:
<a href="nowe.php">JEDEN</a> - (tutaj pusto) .
Kshyhoo
Takie coś?
  1. echo '<a href="nowe.php?go"'.$_GET['jeden']'>'.$_GET['jeden'].'</a>';
moto0095
Nie za bardzo, ale już lepiej

Zobacz jak szukam jakiegoś słowa i jeżeli to słowo znajduje się w
  1. if(isset($_GET['dwa'])){
  2. echo "<title>DWA<title>";
  3. echo "dwa";
  4. }


to ma wyświetlić:
<a href="nowe.php?dwa">DWA</a> - dwa

jeżeli jednak słowo to znajduje w
  1. if(isset($_GET['trzy'])){
  2. echo "<title>TRZY<title>";
  3. echo "trzy";
  4. }


to ma wyświetlić:
<a href="nowe.php?trzy">TRZY</a> - trzy

chodzi mi o sam <title></title>


Wie ktoś jak to zrobić questionmark.gif
Kshyhoo
Cytat(moto0095 @ 22.04.2010, 20:36:36 ) *
Ale mi nie chodzi o TITLE. (



Cytat(moto0095 @ 22.04.2010, 21:20:51 ) *
chodzi mi o sam <title></title>


Wybacz, ale już przestałem wogóle łapać...
moto0095
W wyświetlaniu wyników używam funkcji
  1. preg_match_all('#<title>(.*?)</title>#', $plik, $wynik);


pobiera ona tekst pomiędzy <title> a </title>

i jeżeli wpiszesz "dwa" to ja chciałbym aby funkcja ta pobrała tekst z pomiędzy <title> a <title> z tego co podałem powyżej.
mortus
Zaraz po tym
  1. preg_match_all('#<title>(.*?)</title>#', $plik, $wynik);
wydrukuj sobie zawartość zmiennej $wynik za pomocą kodu
  1. echo '<pre>'; print_r($wynik); echo '</pre>';
Zobaczymy, co się pod tą zmienną kryje, choć podejrzewam że tablica, po której należałoby się w pętli poruszać.
moto0095
Jeszce raz.
Przeszukamy np plik szukane.php

szukane php
  1. if(isset($_GET['costam1'])){
  2. echo "<title>JUUUUPI</title>";
  3. echo "jupi";
  4. }else
  5.  
  6. if(isset($_GET['costam2'])){
  7. echo "<title>GOOOOD</title>";
  8. echo "good";
  9. }


szukamy słowa "good".

Tak jak już mówiłem wyszukiwarka wyniki szukania wyświetla w postaci:
<a href="costam">Tytuł strony (<title></title>)</a> - opis (ale opis sam potrafię zrobić)

więc chcę aby wyniki szukania wyświetliły się w postaci:
<a href="szukane.php?costam2">GOOOOD</a> - good

a wyświetla mi
<a href="szukane.php">GOOOOD</a> - good
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.