Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [HTML][XML][PHP]Wyszukiwarka xml z php
loleq1111
post 12.03.2016, 23:43:52
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 12.03.2016

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


Witam, posiadam problem z przeszukaniem dokumentu xml
ma ktoś pomysł by dopasować to w taki sposób by przeszukało cały dokument xml ?
bo aktualnie skupia się na pierwszym wpisie <ksiazka> </ksiazka> a dalej nie przeszukuje
tzn. jeśli pierwszy element w xml jest wyszukiwany to pokazuje wynik poprawnie
jeśli element jest drugi lub później w kolejności w pliku xml zwraca wynik nie znaleziono...
dodam że skrypt odwołuje się do plików xml w katalogu tzn przeszukuje pliki z katalogu

skrypt php:
  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.  
  11.  
  12. if ($tytul != "") wpisano ++;
  13. if ( $autor != "") wpisano =+ 2;
  14. if ( $gatunek != "") wpisano =+ 4;
  15.  
  16.  
  17. $tytul = mb_convert_case($tytul, MB_CASE_TITLE, "UTF-8");
  18. $autor = mb_convert_case($autor, MB_CASE_TITLE, "UTF-8");
  19.  
  20. $folder = glob('ksiazki/*.xml');
  21. foreach ($folder as $file) {
  22. $plik = file_get_contents($file);
  23. $xml = simplexml_load_string($plik);
  24.  
  25. $pokaz = 0;
  26. if ((string) $xml->ksiazka->tytul == $tytul) $pokaz ++;
  27. if ((string) $xml->ksiazka->autor == $autor) $pokaz =+ 2;
  28. if ((string) $xml->ksiazka->gatunek == $gatunek) $pokaz =+ 4;
  29. if($pokaz==$wpisano) {
  30. echo "TYTUŁ:", ' ', $xml->ksiazka->tytul, '<br>';
  31. echo "AUTOR:", ' ', $xml->ksiazka->autor, '<br>';
  32. echo "GATUNEK:", ' ', $xml->ksiazka->gatunek, '<br>';
  33. echo "OPIS:", ' ', $xml->ksiazka->opis, '<br>';
  34. echo "WYDAWNCTWO:", ' ', $xml->ksiazka->wydawnictwo, '<br>';
  35. echo "ROK WYDANIA:", ' ', $xml->ksiazka->wydana, '<br><br>';
  36. }
  37. else echo "Nie znaleziono żadnych książek";
  38. }
  39. ?>



przykład xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <literatura>
  3.  
  4.  
  5.  
  6. <ksiazka>
  7. <nr_id>1244</nr_id>
  8. <tytul>Lalka</tytul>
  9. <autor>Boleslaw Prus</autor>
  10. <gatunek>Powiesc</gatunek>
  11. <opis>Opis</opis>
  12. <wydawnictwo>WSIP</wydawnictwo>
  13. <wydana>1994</wydana>
  14. </ksiazka>
  15. </literatura>
  16.  


Ten post edytował loleq1111 12.03.2016, 23:56:58
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
Popek231
post 13.03.2016, 00:04:21
Post #2





Grupa: Zarejestrowani
Postów: 71
Pomógł: 2
Dołączył: 30.03.2012
Skąd: Bielsko-Biała

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


  1. # 10 linia z ew. błędem
  2. if ($tytul != "") wpisano ++;
  3. if ( $autor != "") wpisano =+ 2;
  4. if ( $gatunek != "") wpisano =+ 4;


a nie przypadkiem:
  1. # 10 linia z ew. błędem
  2. if ($tytul != "") wpisano ++;
  3. if ( $autor != "") wpisano += 2;
  4. if ( $gatunek != "") wpisano += 4;

?
+= zamiast =+


to samo od 26 się zaczyna
  1. if ((string) $xml->ksiazka->tytul == $tytul) $pokaz ++;
  2. if ((string) $xml->ksiazka->autor == $autor) $pokaz += 2;
  3. if ((string) $xml->ksiazka->gatunek == $gatunek) $pokaz += 4;



Operatory tego typu wyglądają w ten sposób:
  1. <?php
  2. $o0=5;
  3. $o1=5;
  4. $o2=5;
  5. $o3=5;
  6. $o4=5;
  7. $o1+=$o0;
  8. $o2-=$o0;
  9. $o3/=$o0;
  10. $o4*=$o0;
  11. echo $o1.'<br>'.$o2.'<br>'.$o3.'<br>'.$o4;
  12. ?>


ps.
Dodatkowo uwaga do tego co poprawiałem:

linia 10:
  1. if ($tytul != "") $wpisano++;
  2. if ( $autor != "") $wpisano += 2;
  3. if ( $gatunek != "") $wpisano += 4;


$wpisano zamiast wpisano (brak dolca $) smile.gif


ps2.
z tego co pamiętam, użycie kropek zamiast przecinków jest szybsze:)
i po co wstawiać spacje w osobnym ciągu?
  1. echo "TYTUŁ:", ' ', $xml->ksiazka->tytul, '<br>';

daj spacje od razu za dwukropkiem i załatwione:)
  1. echo "TYTUŁ: ".$xml->ksiazka->tytul.'<br>';
  2. echo "AUTOR: ".$xml->ksiazka->autor.'<br>';
  3. echo "GATUNEK: ".$xml->ksiazka->gatunek.'<br>';
  4. echo "OPIS: ".$xml->ksiazka->opis.'<br>';
  5. echo "WYDAWNCTWO: ".$xml->ksiazka->wydawnictwo.'<br>';
  6. echo "ROK WYDANIA: ".$xml->ksiazka->wydana.'<br><br>';



i przy $_POST możesz dodać, żeby nie wywalało błędu jak ktoś dotrze do pliku bez formularza:
  1. $tytul = (isset($_POST['tytul']))?$_POST['tytul']:'';
  2. $autor = (isset($_POST['autor']))?$_POST['autor']:'';
  3. $gatunek = (isset($_POST['gatunek']))?$_POST['gatunek']:'';


ps3.
już więcej nie piszę, bo wyjdzie, że się czepiam biggrin.gif

jak przerobię, żeby wyświetlało więcej wyników, zamiast jednego, to dam znać wink.gif









No:)
jedna chwila, pętelka i gotowe:)

Proszę:
test.php (tak nazwałem)
  1. <?php
  2. header('Content-Type: text/html; charset = UTF-8');
  3.  
  4. $tytul = (isset($_POST['tytul']))?$_POST['tytul']:'';
  5. $autor = (isset($_POST['autor']))?$_POST['autor']:'';
  6. $gatunek = (isset($_POST['gatunek']))?$_POST['gatunek']:'';
  7.  
  8. //$tytul = 'Lalka'; //znajdzie 2 wyniki
  9. //$tytul = 'Lalkaa'; //znajdzie 1 wynik
  10. //$tytul = 'Lalkaaa'; //znajdzie 0 wyników
  11. // //jak zostawione puste wszystko, to pokaże wszystkie wyniki
  12.  
  13. //Oznaczenie które pola były wpisane
  14. $wpisano=0;
  15. $pokazanowynikow=0;
  16.  
  17.  
  18. if($tytul!="") $wpisano++;
  19. if($autor!="") $wpisano+=2;
  20. if($gatunek!="") $wpisano+=4;
  21.  
  22.  
  23. $tytul = mb_convert_case($tytul, MB_CASE_TITLE, "UTF-8");
  24. $autor = mb_convert_case($autor, MB_CASE_TITLE, "UTF-8");
  25.  
  26. $folder = glob('test.xml');
  27. foreach($folder as $file){
  28. $plik = file_get_contents($file);
  29. $xml = simplexml_load_string($plik);
  30.  
  31. for($id=0;$id<(count($xml));$id++){
  32. $pokaz = 0;
  33. if((string)$xml->ksiazka[$id]->tytul == $tytul) $pokaz++;
  34. if((string)$xml->ksiazka[$id]->autor == $autor) $pokaz+=2;
  35. if((string)$xml->ksiazka[$id]->gatunek == $gatunek) $pokaz+=4;
  36. if($pokaz==$wpisano) {
  37. echo "TYTUŁ: ".$xml->ksiazka[$id]->tytul.'<br>';
  38. echo "AUTOR: ".$xml->ksiazka[$id]->autor.'<br>';
  39. echo "GATUNEK: ".$xml->ksiazka[$id]->gatunek.'<br>';
  40. echo "OPIS: ".$xml->ksiazka[$id]->opis.'<br>';
  41. echo "WYDAWNCTWO: ".$xml->ksiazka[$id]->wydawnictwo.'<br>';
  42. echo "ROK WYDANIA: ".$xml->ksiazka[$id]->wydana.'<br><br>';
  43. $pokazanowynikow++;
  44. }
  45. }
  46. }
  47. if($pokazanowynikow==0) echo "Nie znaleziono żadnych książek";
  48. ?>


test.xml (tak nazwałem) //byłem zbyt leniwy, żeby dodać prawdziwe dane tongue.gif
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <literatura>
  3. <ksiazka>
  4. <nr_id>1244</nr_id>
  5. <tytul>Lalka</tytul>
  6. <autor>Boleslaw Prus</autor>
  7. <gatunek>Powiesc</gatunek>
  8. <opis>Opis</opis>
  9. <wydawnictwo>WSIP</wydawnictwo>
  10. <wydana>1994</wydana>
  11. </ksiazka>
  12. <ksiazka>
  13. <nr_id>1234</nr_id>
  14. <tytul>Lalka</tytul>
  15. <autor>Boleslaw Pruss</autor>
  16. <gatunek>Powiessc</gatunek>
  17. <opis>Opiss</opis>
  18. <wydawnictwo>WsSIP</wydawnictwo>
  19. <wydana>12994</wydana>
  20. </ksiazka>
  21. <ksiazka>
  22. <nr_id>1234</nr_id>
  23. <tytul>Lalkaa</tytul>
  24. <autor>Boleslaw Pruss</autor>
  25. <gatunek>Powiessc</gatunek>
  26. <opis>Opiss</opis>
  27. <wydawnictwo>WsSIP</wydawnictwo>
  28. <wydana>12994</wydana>
  29. </ksiazka>
  30. </literatura>


Ten post edytował Popek231 13.03.2016, 00:38:27


--------------------
Pomogłem? Wiesz co kliknąć w odpowiednim miejscu :)
Go to the top of the page
+Quote Post
loleq1111
post 13.03.2016, 00:55:20
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 12.03.2016

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


Wielkie dzieki za wszystkie uwagi
i oczywiście poprawne rozw smile.gif
Go to the top of the page
+Quote Post
Popek231
post 13.03.2016, 00:59:43
Post #4





Grupa: Zarejestrowani
Postów: 71
Pomógł: 2
Dołączył: 30.03.2012
Skąd: Bielsko-Biała

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


////////////////////
  1. for($id=0;$id<(count($xml));$id++){

zamień na:
  1. $ilewierszy = count($xml);
  2. for($id=0;$id<$ilewierszy;$id++){

ponieważ przy każdym przelocie, pętla sprawdza warunek od nowa i za każdym razem zlicza ile jest $xml - jeśli jest dużo, będzie muliło...


ew. możesz dodać jeszcze taki bajer na końcu:
  1. if($pokazanowynikow==0) echo "Nie znaleziono żadnych książek.";
  2. else echo "Spośród $ilewierszy książek w bazie danych znaleziono $pokazanowynikow pasujących wyników.";


--------------------
Pomogłem? Wiesz co kliknąć w odpowiednim miejscu :)
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: 14.08.2025 - 03:28