Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Wyszukiwarka, explode i spacje
Forum PHP.pl > Forum > Przedszkole
andrzej_
Witam, szybkie i chyba proste pytanie. Mam napisaną prostą wyszukiwarke która string dzieli przez explode po spacji i każdy wynik sprawdza w bazie.

  1. $explode_key = explode(" ", $search) ;
  2.  
  3. foreach ($explode_key as $exploded_key) {
  4.  
  5.  
  6. $x++;
  7. if ($x == 1) {
  8. $construct .= "base LIKE '%$exploded_key%'";}
  9. else {
  10. $construct .= " OR base LIKE '%$exploded_key%'"; }
  11. }
  12.  
  13. $construct = "SELECT * FROM xxx WHERE $construct";


Wyszukuje ok, ale jeżeli po keywordzie jest jakaś spacja np "test search " zamiast "test search", w wynikach wyświetla mi zawartość całej bazy, rozumiem, że traktuje spację po spacji jako cel wyszukiwania. Jak można temu zaradzić? Próbowałem przez sprawdzenie ilosci znaków, ale wtedy dla każdego zapytania powyżej dwóch słów wyskakuje błąd:

  1. if (strlen ($exploaded_key)<=3) {
  2. die ("Minimalnie 3 znaki na keyword!"); }
mat-bi
Możesz użyć if -

  1. if(!empty($exploded_key))

sadistic_son
Użyj rtrim jeśli spacja jest na końcu. Dla spacji na początku analogicznie ltrim lub po prostu trim na stringu przed podzieleniem go explodem.
wNogachSpisz
jest jeszcze array_filter()
andrzej_
mat-bi: ta sama sytuacja co wcześniej.

sadistic_son: o dziwo nie działa, próbowałem też przez $exploded_key = str_replace (" ", "", $exploded_key); - nie trybi.

wNohachSpisz: próbowałem array_filter na $explode_key i też nic.
everth
  1. var_dump($exploded_array);

I jeśli pojawiają ci się jakieś puste wartości w tym arrayu to powinieneś już wiedzieć dlaczego wczytuje ci całą tabelę.
andrzej_
obszedłem to trochę po chamsku, ale dzięki wszystkim za pomoc smile.gif.

  1. if(strlen($exploded_key)<=3) { $exploded_key = "xxxxxx";}
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.