Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Formularz - Szukaj na stronie www [PROBLEM]
Forum PHP.pl > Forum > Przedszkole
Szymek36
Witam,

Jestem początkującym laikiem w PHP i potrzebował bym pomocy.!

Mam taki problem ponieważ potrzebuje zmniejszyć ilość wyszukiwanych słów w okienku "Szukaj" jest ustawione na min. 4 znaki czyli zaczyna szukać daną rzecz w sklepie internetowym po wpisaniu 4 pierwszych liter.

Teraz moje pytanie gdzie? i jak? mogę zrobić, aby szukał po 2 pierwszych literach questionmark.gif? W bazię danych czy w kodzie *.tpl lub *.php questionmark.gif Podkreślę ze w bazie danych mam tabelę gdzie są wypisane wszystkie słowa przykładowe wiadomo o co chodzi no bo muszą być chyba wypisane.

O To kod wyszukiwarki mojej:

<table border="0" cellpadding="5" cellspacing="0">

<tr>
<td>
<form action="index.php">
<input maxlength="100" class="Search-header" name="Search"
Szukana fraza size="25" onfocus="clearDefault(this)">
<input type="submit" class="button_ok2 " value="Szukaj"/>
</form>
</td>
</tr>
</table>


Mam nadzieję że ktoś mi postara się pomóc.

Pozdrawiam
strife
Nie pisz w nazwie tematu "Pomocy" ponieważ to mocno irytuje - tutaj każdy ma problem.

Kod wrzucaj w odpowiednie do tego stworzone tagi. A po drugie to podaj nam fragment kodu PHP, odpowiedzialnego za to szukanie bo z kodu, który podałeś nie jesteśmy w stanie nic zrobić.

Pzdr.

PS. Sam pisałeś ten sklep, może to jest gotowe oprogramowanie?
Szymek36
Kod
{* search_box.tpl *}                                              
{load_search_box assign="search_box"}                            
   <br/>                                                        
<table border="0" cellpadding="0" cellspacing="0" width="150">    
<tr>                                                            
  <td class="SearchBoxHead"> Wyszukiwanie produktów </td>            
</tr>                                                            
<tr>                                                            
  <td class="SearchBoxContent">                                  
   <form action="index.php">                                      
    <input class="SearchBox" maxlength="100" id="Search" name="Search"
            value="{$search_box->mSearchString}" size="18"/>      
    <input class="SearchBox" type="submit" value="Szukaj!"/><br />    
    <input type="checkbox" id="AllWords"  name="AllWords"        
    {if $search_box->mAllWords == "on" } checked="checked" {/if}/>
      Uwzględnij wszystkie słowa
   </form>                                                        
  </td>                                                          
</tr>                                                            
</table>                                                          
{* end search_box.tpl *}



to jest wszystko co znalazłem , jeśli chodzi o sklep to nie ja go stworzyłem tylko ktoś inny lecz ja dostałem zadanie abym poprawił wyszukiwarkę i zmniejszył ilość wyszukiwanych liter[code][/code]
ciekawskiii
Podaj kod php a nie html
strife
Pisałeś Ci wcześniej, abyś kod źródłowy wkładał w odpowiednie tagi. Proszę abyś stosował się do tego i poprawił posty, które już napisałeś.

Wracając do tematu, cały czas wklejasz nam HTML, a pisałem Ci wyraźnie, że aby Ci pomóc potrzebujemy kodów źródłowych, czyli plików PHP. Formularz kieruje do pliku index.php, może gdzieś tam masz konstrukcje, dzięki którym sklep wyszukuje?

A najlepiej jakbyś się zgłosił do autora tego sklepu, ponieważ mam pewne wrażenie, że Ty tego nie pisałeś ;-)
askone
Autor wątku sam stwierdził, że nie jest skrypt sklepu nie jest jego autorstwa. Jednak zasadnicze pytanie brzmi, jak ktoś kto nie potrafi odróżnić kodu html od php dostał zadanie poprawy czyjegoś sklepu smile.gif Już chyba współczuję zleceniodawcy...
Szymek36
więc tak w kodzie "index.php"

był wpis taki

Kod
if (isset($_GET['Search']))
  $pageContentsCell="search_results.tpl";


który odwołuje się do "search_results.tpl"

Kod
{* search_results.tpl *}
<p align="right">
  <span class="DepartmentTitle">Wyniki wyszukiwania</span>
</p>    
<p align="left">
  {include file="products_list.tpl"}
</p>


a ten odwołuje sie do "products_list.tpl"

Kod
{if $products_list->department_stan  == 4}

<p align="right">                          
    <H1><B>{$products_list->mProducentNAME}</B></H1>
       </p>
      
<form action="index.php">
    <select name="CategoryProducent" class="pldwn">                            
        {html_options options= $products_list->mCategoryProducentsSelec}  
    </select>
    <input class="SearchBox" type="hidden" name="ProducentNAMECategory" value="{$products_list->mProducentNAME}"/>
    <input  type="submit" class="button_ok " value="OK"/>
</form>      


{/if}


{if $products_list->department_stan3}
<DIV class='info_menu'> Chwilowo nie posiadamy w asortymencie  {$products_list->mDepartmentName} {$products_list->mCategoryName}  szukanej firmy {$products_list->department_stan3}. <B>
Proponujemy Ci {$products_list->mDepartmentName}  {$products_list->mCategoryName}  innych marek.<b><br></DIV>
{else}

<DIV class="ListDescription">{$products_list->mSearchResultsTitle}</DIV>
{if $products_list->mDepartmentId}

<DIV class='info_menu'> Możesz uszczegółowić wyszukiwanie podając precyzyjnie:</DIV>

<form action="index.php">

    <select name="CategoryID" class="pldwn">                            
        {html_options options= $products_list->mCategoriesSelec}  
    </select>

    <select name="TargetByProducent" class="pldwn2">                            
        {html_options options= $products_list->mProducentSelec}  
    </select>
<input class="SearchBox" type="hidden" name="DepartmentID" value="{$products_list->mDepId}"/>
<input  type="submit" class="button_ok " value="OK"/>


Jesli chodzi o mnie muszę powiedzieć że odróżniam html od php lecz autor tej strony tego sklepu podpisywał bardzo skomplikowanie nazwy plików lecz ciężko mi się połapać.Proszę o wyrozumiałość ;/
strife
Moim zdaniem cały czas źle szukasz, w google znalazłem parę postów ludzi, którzy opisują problemy związane z tym oprogramowaniem podając identyczne fragmenty kodu co Ty teraz, więc śmiem twierdzić, że to jest coś gotowego, pytanie co hm ...

http://www.google.com/search?client=ubuntu...-8&oe=utf-8
http://www.google.com/search?hl=en&q={...mp;aql=&oq=

http://www.google.pl/search?hl=pl&sour...mp;aql=&oq=

No to jak przyznajesz się co to jest? tongue.gif

No i oczywiście fragment kodu, który podałeś nic nam nie da. Musisz szukać w kodzie jakiegoś zapytania, odnośnie tego szukania w jego pobliżu może występować ograniczenie co do ilości znaków. Albo przeszukaj cały projekt pod kątem słów kluczowych np. komunikatu błędu o zbyt małej ilości znaków.

No ale tak jak już wyżej napisałem, przyznaj się co to jest za soft albo spytaj kogoś po kim to robisz co to jest tongue.gif
askone
Według mnie w dalszej części poniższego kodu
  1. if (isset($_GET['Search']))
  2. $pageContentsCell="search_results.tpl";

wywoływana jest funkcja/metoda, która sprawdza długość $_GET['Search']. Pewnie gdzieś masz warunek w stylu
  1. strlen($_GET['Search']) >= 4


Jak już go znajdziesz to zmień 4 na 2. Powinno działać smile.gif

ps. Wiele tych "powinno", ale brak kodu tak na mnie działa...

Szymek36
Dziękuje wszystkim za pomoc smile.gif

Witam ,

Mam prośbę czy ktoś mi może pomóc znalazłem kod php , i potrzebuje zmienić aby wyszukwiarka na stronie mojej wyszukiwała po 2 znakach .... zauważyłem że w bazie danych mam tabele "$search_results" i tam mam wypisane słowa, lecz wyszukiwarka szuka mi na stronie od 4 znaków a potrzebuje od 2.Pokaże teraz kod PHP i prosiłbym o pomoc co w nim zmienić żeby tak mi szukało.

  1. // pobranie szczegółowych informacji na temat danego produktu
  2. public function GetProductDetails($productId)
  3. {
  4. $result = $this->mDoCatalog->GetProductDetails($productId);
  5. return $result;
  6. }
  7.  
  8. // Wyszukiwanie produktów w katalogu
  9. public function Search($searchString, $allWords, $pageNo, &$rTotalPages)
  10. {
  11. // utworzenie obiektu klasy SearchResults
  12. $search_results = new SearchResults();
  13. // znaki ograniczające ciągu tekstowego
  14. $delimiters = ",.; ";
  15. /* parametrami pierwszego wywołaniea funkcji strtok są:
  16.   pełny ciąg tekstowy wyszukiwania oraz lista znaków ograniczających;
  17.   funkcja zwraca pierwsze słowo ciągu */
  18. $word = strtok($searchString, $delimiters);
  19. $accepted_words = array();
  20. $ignored_words = array();
  21. // analiza poszczególnych słów występujących w ciągu wyszukiwania
  22. while ($word)
  23. {
  24. // krótkie słowa są dodawane do listy słów ignorowanych
  25. if (strlen($word) < FT_MIN_WORD_LEN)
  26. $ignored_words[] = $word;
  27. else
  28. $accepted_words[] = $word;
  29. // pobranie kolejnego słowa z ciągu tekstowego wyszukiwania
  30. $word = strtok($delimiters);
  31. }
  32. // jeśli są jakiekolwiek zaakceptowane słowa...
  33. if (count($accepted_words))
  34. {
  35. // pobranie wyników wyszukiwania - wywołanie metody Search warstwy danych
  36. $search_results->mProducts = $this->mDoCatalog->Search
  37. ($accepted_words, $allWords, $pageNo, $rTotalPages);
  38. }
  39. // zapamiętanie listy zaakceptowanych słów i zignorowanych
  40. if ($accepted_words != null)
  41. $search_results->mSearchedWords = implode(", ", $accepted_words);
  42. if ($ignored_words != null)
  43. $search_results->mIgnoredWords = implode(", ", $ignored_words);
  44. // zwrócenie wyników
  45. return $search_results;



proszę bardzo o pomoc exclamation.gif! sad.gif
Daiquiri
A jaką masz wartość FT_MIN_WORD_LEN? Masz tam komentarz "krótkie słowa są dodawane do listy słów ignorowanych".
Szymek36
No własnie nei było tego wcześniej już

Lecz na innym poscie znalałem kolesia który podobny miał problem czy u mnie moze byc to samo

"Juz mnie szlag trafia. Zaczalem przygode z full-text searching. Jednak zauwazylem, ze pomijane sa slowa, ktore maja 5 i mniej znakow. Zapytanie SHOW VARIABLES; pokazalo mi ft_min_word_len rowne 4. Dodalem do pliku /etc/my.cnf (w sekcji [mysqld] linie ft_min_word_len=1 (dla testow), po czym uruchomilem server mysql ponownie. SHOW VARIABLES pokazalo ft_min_word_len=1. OK. Wedle zalecen z manuala MySQL wykonalem takze polecenie REPAIR TABLE aktualnosci QUICK, ktore zakonczylo sie pomyslnie. No ale nadal wyszukiwanie pomija slowa krotsze niz 6 znakow. Co zrobic zeby szukalo od conajmniej 3 znakow?
"

I tam nie ma żadnej podanej wartości w kodzie questionmark.gif? ;/


Pewnie trzeba dopisać questionmark.gif?

Kurcze czy ktos zna jakieś rozwiązanie na to

ORYGINALNY KOD
  1. // Wyszukiwanie produktów w katalogu
  2. public function Search($searchString, $allWords, $pageNo, &$rTotalPages)
  3. {
  4. // utworzenie obiektu klasy SearchResults
  5. $search_results = new SearchResults();
  6. // znaki ograniczające ciągu tekstowego
  7. $delimiters = ",.; ";
  8. /* parametrami pierwszego wywołaniea funkcji strtok są:
  9.   pełny ciąg tekstowy wyszukiwania oraz lista znaków ograniczających;
  10.   funkcja zwraca pierwsze słowo ciągu */
  11. $word = strtok($searchString, $delimiters);
  12. $accepted_words = array();
  13. $ignored_words = array();
  14. // analiza poszczególnych słów występujących w ciągu wyszukiwania
  15. while ($word)
  16. {
  17. // krótkie słowa są dodawane do listy słów ignorowanych
  18. if (strlen($word) < FT_MIN_WORD_LEN )
  19. $ignored_words[] = $word;
  20. else
  21. $accepted_words[] = $word;
  22. // pobranie kolejnego słowa z ciągu tekstowego wyszukiwania
  23. $word = strtok($delimiters);
  24. }
  25. // jeśli są jakiekolwiek zaakceptowane słowa...
  26. if (count($accepted_words))
  27. {
  28. // pobranie wyników wyszukiwania - wywołanie metody Search warstwy danych
  29. $search_results->mProducts = $this->mDoCatalog->Search
  30. ($accepted_words, $allWords, $pageNo, $rTotalPages);
  31. }
  32. // zapamiętanie listy zaakceptowanych słów i zignorowanych
  33. if ($accepted_words != null)
  34. $search_results->mSearchedWords = implode(", ", $accepted_words);
  35. if ($ignored_words != null)
  36. $search_results->mIgnoredWords = implode(", ", $ignored_words);
  37. // zwrócenie wyników
  38. return $search_results;


PRZEROBIONY KOD i NIE DZIAŁA

  1. // Wyszukiwanie produktów w katalogu
  2. public function Search($searchString, $allWords, $pageNo, &$rTotalPages)
  3. {
  4. // utworzenie obiektu klasy SearchResults
  5. $search_results = new SearchResults();
  6. // znaki ograniczające ciągu tekstowego
  7. $delimiters = ",.; ";
  8. /* parametrami pierwszego wywołaniea funkcji strtok są:
  9.   pełny ciąg tekstowy wyszukiwania oraz lista znaków ograniczających;
  10.   funkcja zwraca pierwsze słowo ciągu */
  11. $word = strtok($searchString, $delimiters);
  12. $accepted_words = array();
  13. $ignored_words = array();
  14. // analiza poszczególnych słów występujących w ciągu wyszukiwania
  15. while ($word)
  16. {
  17. // krótkie słowa są dodawane do listy słów ignorowanych
  18. if (strlen($word) == 2 < FT_MIN_WORD_LEN )
  19. $ignored_words[] = $word;
  20. else
  21. $accepted_words[] = $word;
  22. // pobranie kolejnego słowa z ciągu tekstowego wyszukiwania
  23. $word = strtok($delimiters);
  24. }
  25. // jeśli są jakiekolwiek zaakceptowane słowa...
  26. if (count($accepted_words))
  27. {
  28. // pobranie wyników wyszukiwania - wywołanie metody Search warstwy danych
  29. $search_results->mProducts = $this->mDoCatalog->Search
  30. ($accepted_words, $allWords, $pageNo, $rTotalPages);
  31. }
  32. // zapamiętanie listy zaakceptowanych słów i zignorowanych
  33. if ($accepted_words != null)
  34. $search_results->mSearchedWords = implode(", ", $accepted_words);
  35. if ($ignored_words != null)
  36. $search_results->mIgnoredWords = implode(", ", $ignored_words);
  37. // zwrócenie wyników
  38. return $search_results;


ZAPOMNIAŁEM DOPISAĆ KTÓRĄ linijkę zmieniłem smile.gif

  1. #if (strlen($word) == 2 < FT_MIN_WORD_LEN )


I nie działa jak wrzucam na serwer plik *.php przerobiony mam błąd na stronie ;(
askone
Chłopie, czy Ty w ogóle umiesz myślećquestionmark.gif Bo, że nie znasz PHP to już wiem wink.gif

  1. if (strlen($word) == 2 < FT_MIN_WORD_LEN )


Jak coś może być jednocześnie równe i mniejsze... Szkoda słów... Jednak ze względu, iż to przedszkole podam Ci 2 rozwiązania:
  1. wyszukaj plik w którym jest zdefiniowana stała FT_MIN_WORD_LEN i zmień 4 na 2
  2. zmień powyższą linię kodu na poniższą:
    1. if (strlen($word) < 2)


Pierwsze rozwiązanie jest zgodne ze standardami, drugie po prostu działa - Wybór należy do Ciebie
Szymek36
Dziękuje ślicznie za pomoc ,a le to nie działa dalej sad.gif


  1. $delimiters = ",.; ";
  2. /* parametrami pierwszego wywołaniea funkcji strtok są:
  3.   pełny ciąg tekstowy wyszukiwania oraz lista znaków ograniczających;
  4.   funkcja zwraca pierwsze słowo ciągu */
  5. $word = strtok($searchString, $delimiters);
  6. $accepted_words = array();
  7. $ignored_words = array();
  8. // analiza poszczególnych słów występujących w ciągu wyszukiwania
  9. while ($word)
  10. {
  11. // krótkie słowa są dodawane do listy słów ignorowanych
  12. [b]if (strlen($word) < 2)[/b]
  13. $ignored_words[] = $word;
  14. else
  15. $accepted_words[] = $word;
  16. // pobranie kolejnego słowa z ciągu tekstowego wyszukiwania
  17. $word = strtok($delimiters);
  18. }
  19. // jeśli są jakiekolwiek zaakceptowane słowa...
  20. if (count($accepted_words))


i zmieniłem jeszcze tutaj

  1. define("FT_MIN_WORD_LEN",2);


i dalej dupa jest ;(
askone
K.....

  1. [b]if (strlen($word) < 2)[/b]


A czym są te literki "b" w nawiasach kwadratowych.... Jak już ktoś czyt. ja daje Ci gotowca to kopiując włącz myślenie lub tryb PLAIN_TEXT....



Pozdrawiam
Szymek36
te literki b to przez przypadek mi sie wcisnely bo chcialem pogrubic o co mi dokladnie chodzilo.. a to ze mam wlaczyc myslenie to wlaczyłem , lecz po tych zmianach dalej nie szuka mi na stronie po 2 literach questionmark.gif?

DOBRA NAPISZE JASNO TO CO MI SIĘ UDAŁO ZROBIC

PLIK bo_catatog.php

  1. $word = strtok($searchString, $delimiters);
  2. $accepted_words = array();
  3. $ignored_words = array();
  4. // analiza poszczególnych słów występujących w ciągu wyszukiwania
  5. while ($word)
  6. {
  7. // krótkie słowa są dodawane do listy słów ignorowanych
  8. #
  9. if (strlen($word) < FT_MIN_WORD_LEN )
  10. $ignored_words[] = $word;
  11. else
  12. $accepted_words[] = $word;
  13. // pobranie kolejnego słowa z ciągu tekstowego wyszukiwania
  14. $word = strtok($delimiters);
  15. }
  16. // jeśli są jakiekolwiek zaakceptowane słowa...
  17. if (count($accepted_words))
  18. {
  19. // pobranie wyników wyszukiwania - wywołanie metody Search warstwy danych
  20. $search_results->mProducts = $this->mDoCatalog->Search
  21. ($accepted_words, $allWords, $pageNo, $rTotalPages);
  22. }
  23. // zapamiętanie listy zaakceptowanych słów i zignorowanych
  24. if ($accepted_words != null)
  25. $search_results->mSearchedWords = implode(", ", $accepted_words);
  26. if ($ignored_words != null)
  27. $search_results->mIgnoredWords = implode(", ", $ignored_words);
  28. // zwrócenie wyników
  29. return $search_results;


PLIK config.inc.php

  1. // konfiguracja sposobu wyświetlania informacji o produktach
  2. define("SHORT_PRODUCT_DESCRIPTION_LENGTH",130);
  3. define("PRODUCTS_PER_PAGE",24);
  4. // minimalna długość słowa uwzględnianego podczas wyszukiwania; wartość ta
  5. // musi być taka sama, jak wartość zmiennej MySQL ft_min_word_len
  6. define("FT_MIN_WORD_LEN",4);


ZMIENIŁEM

  1. define("FT_MIN_WORD_LEN",2);


i dalej nie szuka na stronie po 2 znakach exclamation.gif!! czy ktos wie dlaczego

A i zapomniałem , podkreśle że z tą zmianą też nie działa

  1. #
  2. if (strlen($word) < 2)
askone
Edit:

To co wkleiłeś przed chwilą wyjaśnia sprawę:
Cytat
  1. // konfiguracja sposobu wyświetlania informacji o produktach
  2. define("SHORT_PRODUCT_DESCRIPTION_LENGTH",130);
  3. define("PRODUCTS_PER_PAGE",24);
  4. // minimalna długość słowa uwzględnianego podczas wyszukiwania; wartość ta
  5. // musi być taka sama, jak wartość zmiennej MySQL ft_min_word_len
  6. define("FT_MIN_WORD_LEN",4);


Wyszukaj jeszcze "MySQL ft_min_word_len" i też zmień na 2...

Pozdrawiam
Szymek36
A jesli mogę się podpytać gdzie to mniej więcej może być bo przeszukałem te pliki gdzie robiłem zmiany i tam nic takiego nie ma.. questionmark.gif
askone
Szczerze mówiąc to nie mam pojęcia. Sugerując się informacją z komentarza mogę podejrzewać, iż zmienna ta zapewne jest zdefiniowana gdzieś w bazie MYSQL (w procedurze, funkcji, tabeli).

Kto szuka ten znajduje wink.gif
Szymek36

mysql> SHOW VARIABLES LIKE 'ft_min_word_len';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| ft_min_word_len | 4 |
+-----------------+-------+



wpisałem i faktycznie w phpmyadmin w bazie danych jest 4 jeszcze ale teraz pytanie jak zmienic to na 2?questionmark.gif?
askone
W PHPMyAdmin odpal zapytanie:
  1. SET ft_min_word_len = 2;


To zmieni wartość tej zmiennej w bazie.
Szymek36
nie działa.. jest jakis inny sposob?questionmark.gif
askone
Cytat(Szymek36 @ 21.02.2011, 13:33:23 ) *
nie działa.. jest jakis inny sposob?questionmark.gif


Nie działa ustawienie zmiennej? Czy też nadal nie działa wyszukiwanie?
Szymek36
Nie działa wyszukiwanie .;/
askone
No to ja mogę powiedzieć, że wyczerpały mi się pomysły. Może ktoś kto wie o jaki sklep chodzi i choć trochę zna kod aplikacji będzie potrafił Ci pomóc.

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