Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [XML][HTML][PHP]Funkcja wyszukiwania(przeszukiwania XML).
matt77
post 4.06.2018, 11:59:44
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 4.05.2018

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


Cześć
Mam stworzona wyszukiwarkę w HTMLu i wyszukiwanie danych w bazie XML. Problemem jest sposób wyświetlenia. Gdy w oknie szukania wpisze hasło z bazy XML wyświetla wszystkie artykuły zamiast tego jednego konkretnego, a także podczas wpisania hasła z poza bazy nie wyświetla się komunikat "Nie znaleziono szukanego hasła". Ktoś jest w stanie pomóc w stworzeniu poprawnej funkcji?
link wyświetlenia: https://zapodaj.net/1e95528b9926a.png.html
plik szukaj.php
  1. <!doctype html>
  2. <meta charset="utf-8" />
  3. <html>
  4. <head>
  5. <title>Encyklopedia</title>
  6. </head>
  7. <body>
  8. <h2 style="text-align: center; ">Encyklopedia</h2>
  9. <form action="wyniki.php" method="post">
  10.  
  11. <fieldset>
  12. <legend>Wyszukaj hasło</legend>
  13. <input type="text" name="artykul" />
  14. </fieldset>
  15.  
  16. <fieldset>
  17. <legend>Opcje</legend>
  18. <input type="reset" value="Wyczyść" />
  19. <input type="submit" value="Szukaj" />
  20. </fieldset>
  21.  
  22. </form>
  23. </body>
  24. </html>

plik wyniki.php
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Encyklopedia</title>
  5. <meta charset="utf-8" />
  6. </head>
  7. <body>
  8. <h2 style="text-align: center; ">Encyklopedia</h2>
  9.  
  10. <?php
  11. header('Content-Type: text/html; charset = UTF-8');
  12.  
  13. $tytul = (isset($_POST['tytul']))?$_POST['tytul']:'';
  14. $tresc = (isset($_POST['tresc']))?$_POST['tresc']:'';
  15.  
  16. $wpisano=0;
  17. $pokazanowynikow=0;
  18.  
  19.  
  20. if($tytul!="") $wpisano++;
  21. if($tresc!="") $wpisano+=2;
  22.  
  23.  
  24. $tytul = mb_convert_case($tytul, MB_CASE_TITLE, "UTF-8");
  25. $tresc = mb_convert_case($tresc, MB_CASE_TITLE, "UTF-8");
  26.  
  27. $folder = glob('encyklopedia.xml');
  28. foreach($folder as $file){
  29. $plik = file_get_contents($file);
  30. $xml = simplexml_load_string($plik);
  31.  
  32.  
  33. $ilewierszy = count($xml);
  34. for($i=0;$i<$ilewierszy;$i++){
  35. $pokaz = 0;
  36. if((string)$xml->artykul[$i]->tytul == $tytul) $pokaz++;
  37. if((string)$xml->artykul[$i]->tresc == $tresc) $pokaz+=2;
  38. if($pokaz==$wpisano) {
  39. echo $xml->artykul[$i]->tytul.'<br>';
  40. echo $xml->artykul[$i]->tresc.'<br>';
  41.  
  42. $pokazanowynikow++;
  43. }
  44. }
  45. }
  46. if($pokazanowynikow==0) echo "Nie znaleziono szukanego hasła";
  47. ?>
  48. </body>
  49. </html>

plik encyklopedi.xml
  1. <?xml version="1.0" encoding="iso-8859-2"?>
  2. <!DOCTYPE encyklopedia SYSTEM "C:\Users\Matt\Desktop\encyklopedia.dtd">
  3. <?xml-stylesheet href="css01.css" type="text/css"?>
  4.  
  5. <encyklopedia>
  6.  
  7. <artykul>
  8. <tytul>astronomia</tytul>
  9. <tresc>nauka przyrodnicza, której przedmiotem badań są ciała niebieskie, ich rozkład i ruchy w przestrzeni, pochodzenie, budowa oraz ewolucja,a także Wszechświat jako calość</tresc>
  10. <odnośnik></odnośnik>
  11. </artykul>
  12.  
  13. <artykul>
  14. <tytul>grafika komputerowa</tytul>
  15. <tresc>dział informatyki zajmujacy się tworzeniem obrazów obiektów rzeczywistych i wyimagowanych</tresc>
  16. <odnośnik></odnośnik>
  17. </artykul>
  18.  
  19.  
  20. </encyklopedia>


Ten post edytował matt77 4.06.2018, 12:11:08
Go to the top of the page
+Quote Post
Neutral
post 4.06.2018, 14:34:35
Post #2





Grupa: Zarejestrowani
Postów: 286
Pomógł: 46
Dołączył: 10.01.2016

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


  1. <?php
  2.  
  3. header('Content-Type: text/html; charset = UTF-8');
  4.  
  5. $artykul = $_POST['artykul'];
  6.  
  7. $var = 0;
  8.  
  9. $x0 = simplexml_load_file('mati_xml.xml');
  10.  
  11. foreach($x0 as $x1) {
  12. if($x1->tytul==$artykul) {
  13. echo ($x1->tytul);
  14. echo '<br />';
  15. echo $x1->tresc;
  16. $var = 0;
  17. } else {
  18. $var++;
  19. }
  20. }
  21.  
  22. if($var>=count($x0)) {
  23. echo 'Not Found';
  24. echo $var;
  25. echo count($x0);
  26. }
  27.  
  28. ?>


Ten post edytował Neutral 4.06.2018, 14:34:49
Go to the top of the page
+Quote Post
matt77
post 4.06.2018, 15:28:15
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 4.05.2018

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


super, zdecydowanie lepiej działa. ta zmienna "var" czemu odpowiada, co realizuje? sprawdza czy coś zostało wpisane ?

Ten post edytował matt77 4.06.2018, 15:29:07
Go to the top of the page
+Quote Post
Neutral
post 4.06.2018, 17:03:09
Post #4





Grupa: Zarejestrowani
Postów: 286
Pomógł: 46
Dołączył: 10.01.2016

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


"If" sprawdza, czy zmienna "var" jest równa lub większa od ilości tagów (znaczników) "artykul" w XML.
Teraz, gdy wpiszesz coś w pole o nazwie "artykul" i nie będzie zgodne z "tytul", to
zmienna "var" zostanie zinkrementowana tyle razy ile razy wykona się pętla foreach, a pętla
ta wykona się w Twoim przypadku dwa razy, ponieważ masz tylko jeden tag artykul i drugi tag
artykul, czyli jak już napisałem pętla wykona się dwukrotnie.

Czyli u Ciebie "if" sprawdza to:

  1. if($var>=2) {
  2. // ...
  3. }


  1. if(2>=2) {
  2. // ...
  3. }


Gdy dodasz nowe tagi "<artykul>" w XML, to wtedy zależnie od ich liczby, tyle razy wykona
obrót pętla. Gdy np. tych tagów będziesz mieć np. 5, to wtedy "if" sprawdzi taki warunek:

  1. if(5>=5) {
  2. // ...
  3. }

Bo, gdy wpiszesz niepasujące do niczego hasło, to wtedy zmienna "var" zostanie zinkrementowana
w tym przykładzie pięciokrotnie (tagów jest pięć), więc warunek się sprawdzi. Można by tu
oczywiście zastosować zmienną typu "string", żeby nie obciążać obliczeniami CPU, ale napisałem
jak napisałem. Gdyby jednak zastosować tutaj zamiast $var=0, np. $var='yes', to
wtedy można by napisać tak:
  1. foreach(/* ... */) {
  2. // ...
  3.  
  4. $var = 'no';
  5. }else {
  6. $var = 'yes';
  7. }
  8.  
  9. if($var == 'yes') {
  10. // ...
  11. }

Lub:
  1. foreach(/* ... */) {
  2. // ...
  3.  
  4. $var = 0;
  5. }else {
  6. $var = 1;
  7. }
  8.  
  9. if($var == 1) {
  10. // ...
  11. }


Ten post edytował Neutral 4.06.2018, 17:07:29
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: 25.04.2024 - 04:55