Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML][XML] Wyświetlanie szukanych wyników
Forum PHP.pl > Forum > Przedszkole
bikebog
Witam.

Mam atlas grzybów w postaci pliku xml:
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <Grzyby>
  3.  <Grzyb>
  4.    <Nazwa>borowik szlachetny</Nazwa>
  5.    <NazwaLac>Boletus edulis</NazwaLac>
  6.    <Rodzaj>Jadalny</Rodzaj>
  7.    <wystepowanie>jakaś treść</wystepowanie>
  8.  </Grzyb>
  9.  <Grzyb>
  10.    <Nazwa>muchomor czerwony</Nazwa>
  11.    <NazwaLac>Amanita muscaria</NazwaLac>
  12.    <Rodzaj>Trujący</Rodzaj>
  13.    <wystepowanie>jakaś treść jakaś treść jakaś treść</wystepowanie>
  14.  </Grzyb>
  15. </Grzyby>


Chciałbym za pomocą prostrgo formularza mieć możliwość ich wyszukiwania:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>Atlas Grzybów</title>
  5. </head>
  6. <form method="post" action="szukajgrzybow.php">
  7.  
  8. <legend>Nazwa</legend>
  9. <input type="text" name="Nazwa" />
  10.  
  11. <legend>Nazwa Łacińska</legend>
  12. <input type="text" name="NazwaLac" />
  13.  
  14. <legend>Rodzaj</legend>
  15. <select name="Rodzaj">
  16. <option>Jadalny</option>
  17. <option>Trujący</option>
  18.  
  19. <legend>Szukaj</legend>
  20. <input type="submit" value="Szukaj" />
  21.  
  22. </form>
  23. </body></html>


Proszę o przykład jak powinien wyglądać plik szukajgrzybow.php.

Z góry dziękuję za pomoc i pozdrawiam.
Pawel_W
  1. <?php
  2. $nazwa = $_POST['Nazwa'];
  3. $nazwalac = $_POST['NazwaLac'];
  4. $f = file_get_contents("plik.xml");
  5. $xml = simplexml_load_string($f);
  6. foreach($xml->grzyb as $grzyb)
  7. {
  8. if($nazwa == (String)$grzyb['Nazwa'] || $nazwalac == (String)$grzyb['NazwaLac'])
  9. {
  10. // znaleziono grzyba
  11. }
  12. }
  13. ?>
bikebog
Chyba to nie działa:

Formularz szukania grzybów wygląda tak:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>Atlas Grzybów</title>
  5. </head>
  6. <form method="post" action="grzyby1.php">
  7.  
  8. <legend>Nazwa</legend>
  9. <input type="text" name="Nazwa" />
  10.  
  11. <legend>Nazwa Łacińska</legend>
  12. <input type="text" name="NazwaLac" />
  13.  
  14. <legend>Rodzaj</legend>
  15. <select name="Rodzaj">
  16. <option>Jadalny</option>
  17. <option>Trujący</option>
  18.  
  19. <legend>Szukaj</legend>
  20. <input type="submit" value="Szukaj" />
  21.  
  22. </form>
  23. </body></html>


Sktypt wyszukiwania tak:
  1. <?php
  2. $Nazwa = $_POST['Nazwa'];
  3. $NazwaLac = $_POST['NazwaLac'];
  4. $Rodzaj = $_POST['Rodzaj'];
  5. $f = file_get_contents("grzyby.xml");
  6. $xml = simplexml_load_string($f);
  7. foreach($xml->Grzyb as $Grzyb)
  8. {
  9. if($Nazwa == (String)$grzyb['Nazwa'] || $NazwaLac == (String)$grzyb['NazwaLac'] || $Rodzaj == (String)$grzyb['Rodzaj'])
  10. {
  11.    echo "Nazwa:", ' ', $xml->Grzyb->Nazwa, '<br>';
  12.    echo "NazwaLac:", ' ', $xml->Grzyb->NazwaLac, '<br>';
  13.    echo "wystepowanie:", ' ', $xml->Grzyb->wystepowanie, '<br><br>';
  14.    
  15. }
  16. }
  17. ?>


a tak plik xml:
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <Grzyby>
  3. <Grzyb>
  4.   <Nazwa>borowik szlachetny</Nazwa>
  5.   <NazwaLac>Boletus edulis</NazwaLac>
  6.   <Rodzaj>Jadalny</Rodzaj>
  7.   <wystepowanie>jakaś treść</wystepowanie>
  8. </Grzyb>
  9. <Grzyb>
  10.   <Nazwa>muchomor czerwony</Nazwa>
  11.   <NazwaLac>Amanita muscaria</NazwaLac>
  12.   <Rodzaj>Trujący</Rodzaj>
  13.   <wystepowanie>jakaś treść jakaś treść jakaś treść</wystepowanie>
  14. </Grzyb>
  15. <Grzyb>
  16.   <Nazwa>muchomor różowy</Nazwa>
  17.   <NazwaLac>Amanita</NazwaLac>
  18.   <Rodzaj>Trujący</Rodzaj>
  19.   <wystepowanie>jakaś treść jakaś treść jakaś treść..........</wystepowanie>
  20. </Grzyb>
  21. </Grzyby>


Wynik jaki otrzymuję po skorzystaniu z formularza za każdym razem wygląda tak:

  1. Nazwa: borowik szlachetny
  2. NazwaLac: Boletus edulis
  3. wystepowanie: jakaś treść
  4.  
  5. Nazwa: borowik szlachetny
  6. NazwaLac: Boletus edulis
  7. wystepowanie: jakaś treść
  8.  
  9. Nazwa: borowik szlachetny
  10. NazwaLac: Boletus edulis
  11. wystepowanie: jakaś treść



Co jest nie tak w tym?
Pawel_W
nie
  1. <?php
  2. echo "Nazwa:", ' ', $xml->Grzyb->Nazwa, '<br>';
  3.   echo "NazwaLac:", ' ', $xml->Grzyb->NazwaLac, '<br>';
  4.   echo "wystepowanie:", ' ', $xml->Grzyb->wystepowanie, '<br><br>';
  5. ?>

tylko
  1. <?php
  2. echo "Nazwa:", ' ', $grzyb['Nazwa'], '<br>';
  3.   echo "NazwaLac:", ' ', $gryb['NazwaLac'], '<br>';
  4.   echo "wystepowanie:", ' ', $grzyb['wystepowanie'], '<br><br>';
  5. ?>
bikebog
Dalej nie działa tak jak powinno sad.gif

Sprawdzałeś u siebie może ten skrypt?
Pawel_W
  1. <?php
  2. foreach($xml->Grzyb as $Grzyb)
  3. ?>

$Grzyb powinno być z małej
  1. <?php
  2. foreach($xml->Grzyb as $grzyb)
  3. ?>

i jeszcze tu
  1. <?php
  2. echo "NazwaLac:", ' ', $gryb['NazwaLac'], '<br>';
  3. ?>

na
  1. <?php
  2. echo "NazwaLac:", ' ', $grzyb['NazwaLac'], '<br>';
  3. ?>



grzyby musisz miec w takiej postaci:
  1. <Grzyb Nazwa="borowik szlachetny" NazwaLac="Boletus edulis" rodzaj="Jadalny" wystepowanie=""/>

nie wiem dlaczego, ale inaczej nie dziala
bikebog
To już poprawiłem wcześniej, ale nadal nie chodzi.

Tutaj zamieściłem to u znajomego na serwerze: http://poli-art.pl/grzyby/
Pawel_W
zobacz poprzedniego posta, edytowałem go

Cytat
grzyby musisz miec w takiej postaci:
XML<Grzyb Nazwa="borowik szlachetny" NazwaLac="Boletus edulis" rodzaj="Jadalny" wystepowanie=""/>


a jednak tu był błąd:
  1. <?php
  2. foreach($xml->Grzyb as $grzyb)
  3. {
  4. if($Nazwa == (String)$grzyb->Nazwa || $NazwaLac == (String)$grzyb->NazwaLac || $Rodzaj == (String)$grzyb->Rodzaj)
  5. {
  6. echo "Nazwa:".$grzyb->Nazwa.'<br>';
  7.  echo "NazwaLac:".$grzyb->NazwaLac.'<br>';
  8.  echo "wystepowanie:".$grzyb->wystepowanie.'<br><br>';
  9.  
  10. }
  11. }
  12. ?>
bikebog
OK. częściowo już działa, ale tylko wtedy gdy poda się szukane słowo dokładnie tak jak jest wpisane w pliku XML.

Poza tym wyszukiwanie nie jest dokładne, np. mamy dwa borowiki i gdy wpiszemy borowik to nie wyświetli ani jednego wyniku.

Czarna magia:)
Pawel_W
poczytaj o str_pos()" title="Zobacz w manualu PHP" target="_manual
bikebog
Funkcję znam dobrze, ale bardziej mnie martwi to, że skrypt wyszukiwania nadal nie działa prawidłowo.

Można to jakoś zmienić, tak by działało prawidłowo?

Jestem już tak zdesperowany winksmiley.jpg
, że chyba wprowadzę XMLa do bazy danych, ale nie o to mi chodziło.
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.