Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][XML] Szczegółowe wyszukiwanie
Qbek84
post 14.03.2008, 13:07:52
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 3.01.2008
Skąd: Sosnowiec

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


Napisałem srypt, który przeszukuje zbiór książek (każda opisana w osobnym pliku xml) według 3 kryteriów. Tylko, że w obecnym stadium jeśli wpiszę imię i wybiorę gatunek to wyświetla ksiązki spełniające pierwsze lub drugie kryterium. Chodzi mi by po wybraniu dwóch lub trzech kryteriów wyświetlało książki spełniające 1 i 2 (1 i 3... 1 i 2 i 3... itp.) kryterium.

  1. <?php
  2. header('Content-Type: text/html; charset = UTF-8');
  3.  
  4. $tytul = $_POST['tytul'];
  5. $autor = $_POST['autor'];
  6. $gatunek= $_POST['gatunek'];
  7.  
  8. $tytul = mb_convert_case($tytul, MB_CASE_TITLE, "UTF-8");
  9. $autor = mb_convert_case($autor, MB_CASE_TITLE, "UTF-8");
  10.  
  11. $folder = glob('ksiazki/*.xml');
  12. foreach ($folder as $file) {
  13. $plik = file_get_contents($file);
  14. $xml = simplexml_load_string($plik);
  15.  
  16. $pokaz = false;
  17. if ((string) $xml->ksiazka->tytul == $tytul) $pokaz = true;
  18. if ((string) $xml->ksiazka->autor == $autor) $pokaz = true;
  19. if ((string) $xml->ksiazka->gatunek == $gatunek) $pokaz = true;
  20. if($pokaz) {
  21. echo "TYTUŁ:", '&nbsp;', $xml->ksiazka->tytul, '<br>';
  22. echo "AUTOR:", '&nbsp;', $xml->ksiazka->autor, '<br>';
  23. echo "GATUNEK:", '&nbsp;', $xml->ksiazka->gatunek, '<br>';
  24. echo "OPIS:", '&nbsp;', $xml->ksiazka->opis, '<br>';
  25. echo "WYDAWNCTWO:", '&nbsp;', $xml->ksiazka->wydawnictwo, '<br>';
  26. echo "ROK WYDANIA:", '&nbsp;', $xml->ksiazka->wydana, '<br><br>';
  27. }
  28. else echo "Nie znaleziono żadnych książek";
  29. }
  30. ?>


Czyżby nikt nie wiedział... chociaż jakaś mała wskazóweczka.

Chyba, że niedokładnie napisałem o co mi chodzi... to może na przykładzie. Jest strona z ogłoszeniami o samochodach i do tego wyszukiwarka. Ktoś wybiera markę (np. Opel) i wyszukuje mu wszystkie ople. Ale by zawęzić kryteria zaznacza jeszcze jedną opcję - kolor (np. czerwony) i wyszukuje czerwone ople. I tak by chciał zrobić w swojej wyszukiwarce.
Go to the top of the page
+Quote Post
Mak
post 14.03.2008, 13:34:21
Post #2





Grupa: Zarejestrowani
Postów: 6
Pomógł: 2
Dołączył: 14.03.2008

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


Problem tkwi w tym że ify sprawdzające dane ustawiają wartość zmiennej $pokaz niezależnie od siebie tzn jeżeli tylko któryś z ifów jest prawdziwy to zmienna jest ustawiona.

Problem można rozwiązać na wiele sposobów. Mój to tylko przykład.

  1. <?php
  2. header('Content-Type: text/html; charset = UTF-8');
  3.  
  4. $tytul = $_POST['tytul'];
  5. $autor = $_POST['autor'];
  6. $gatunek= $_POST['gatunek'];
  7.  
  8. //Oznaczenie które pola były wpisane
  9. $wpisano=0;
  10. if ($tytul != "") wpisano ++;
  11. if ($autor != "") wpisano =+ 2;
  12. if ($gatunek != "") wpisano =+ 4;
  13.  
  14.  
  15. $tytul = mb_convert_case($tytul, MB_CASE_TITLE, "UTF-8");
  16. $autor = mb_convert_case($autor, MB_CASE_TITLE, "UTF-8");
  17.  
  18. $folder = glob('ksiazki/*.xml');
  19. foreach ($folder as $file) {
  20. $plik = file_get_contents($file);
  21. $xml = simplexml_load_string($plik);
  22.  
  23. $pokaz = 0;
  24. if ((string) $xml->ksiazka->tytul == $tytul) $pokaz ++;
  25. if ((string) $xml->ksiazka->autor == $autor) $pokaz =+ 2;
  26. if ((string) $xml->ksiazka->gatunek == $gatunek) $pokaz =+ 4;
  27. if($pokaz==$wpisano) {
  28. echo "TYTUŁ:", ' ', $xml->ksiazka->tytul, '<br>';
  29. echo "AUTOR:", ' ', $xml->ksiazka->autor, '<br>';
  30. echo "GATUNEK:", ' ', $xml->ksiazka->gatunek, '<br>';
  31. echo "OPIS:", ' ', $xml->ksiazka->opis, '<br>';
  32. echo "WYDAWNCTWO:", ' ', $xml->ksiazka->wydawnictwo, '<br>';
  33. echo "ROK WYDANIA:", ' ', $xml->ksiazka->wydana, '<br><br>';
  34. }
  35. else echo "Nie znaleziono żadnych książek";
  36. ?>


Taki skrypt ma dodatkową funkcjonalność: jeżeli nic nie wpiszesz wypisuje wszystkie książki.
Jeżeli nie chcesz tego wystarczy ostatniego ifa zamienić na
Kod
if(($pokaz==$wpisano)&&($wpisano!=0)) {


Ten post edytował Mak 14.03.2008, 13:44:43
Go to the top of the page
+Quote Post

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 Wersja Lo-Fi Aktualny czas: 18.07.2025 - 02:36