Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Błędy w linkach.
Forum PHP.pl > Forum > Przedszkole
ebit
Witam serdecznie,
Dopiero zaczynam swoją przygodę z php. Wykonałem szablon strony w którym menu jest zrobione za pomocą php. Niby wszystko działa tylko, że mam problem z walidacją bo są błędy w linkach.

Przykładowy link wygląda tak:
<a href="index.php?podmenu=subusl&go=sieci">Sieci komputerowe</a>

a całe menu jest includowane do szablonu. W3C pokazuje mi błąd przy drugim znaku równości, nie wiem jak to poprawić.

Szablon strony wygląda następująco:


  1. <<?php ?>?xml version="1.0" encoding="iso-8859-2"?<?php ?>>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  3. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4.  
  5. <?php
  6. // zmienna do prawidlowego wczytania includowanych plikow
  7. $add_site = true;
  8.  
  9. setcookie("licznik", "1", 0);
  10. ?>
  11. <html xmlns="http://www.w3.org/1999/xhtml">
  12.  
  13. <head>
  14. <title> </title>
  15.  
  16. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />
  17. <meta name="Description" content="" />
  18. <meta name="Keywords" content="" />
  19. <meta name="Author" content="" />
  20. <meta http-equiv="Expires" content="0" />
  21. <meta http-equiv="Pragma" content="no-cache" />
  22. <meta http-equiv="Cache-Control" content="no-cache" />
  23.  
  24.  <script type="text/javascript" src="pliki/fo.js"></script>
  25. <link rel="stylesheet" href="pliki/style.css" type="text/css" />
  26. </head>
  27. <body>
  28.  
  29.  
  30. <div id="cala">
  31.  <div>
  32. <div id="logo"></div>
  33. <div id="wizytowka">
  34. <?php include ("pliki/wizytowka.inc"); ?>
  35. </div>
  36. <div id="menu">
  37.  <div class="menu1">
  38.  <?php include ("pliki/menu.inc"); ?>
  39.  </div>
  40. </div>
  41. <div id="foto"></div>
  42.  </div>
  43.  
  44.  <div id="tytul">
  45.  
  46. <?php include ("pliki/tytul.inc"); ?>
  47.  
  48.  </div>
  49.  
  50.  <div id="budujemy"></div>
  51.  
  52.  
  53.  <div id="podmenu">
  54.  
  55. <div class="podmenu">
  56.  
  57. <?php 
  58. // zmienna $go przekazana metoda GET
  59. $podmenu = $_GET['podmenu'];
  60. // sprawdzamy czy zmienna $go nie jest pusta
  61. if(!empty($podmenu)) {
  62. // sprawdzamy czy plik o danej nazwie istnieje
  63. if(is_file("pliki/$podmenu.inc")) include "pliki/$podmenu.inc";
  64. // jezeli plik nie istnieje wyswietla się komunikat
  65. else echo "<br />Błąd strony, przepraszamy.";
  66. }
  67. // jezeli zmienna $go jest pusta wyswietla się strona glowna
  68. else include "pliki/subusl.inc";
  69. echo "<br /><br /><hr /><br /><br />";
  70.  include "pliki/licznik.inc";
  71. echo "<br />";
  72. ?>
  73.  
  74.  </div>
  75. <br /> 
  76. </div>
  77.  
  78. <div id="tresc">
  79.  <div class="glowna">
  80. <?php 
  81. // zmienna $go przekazana metoda GET
  82. $go = $_GET['go'];
  83. // sprawdzamy czy zmienna $go nie jest pusta
  84. if(!empty($go)) {
  85. // sprawdzamy czy plik o danej nazwie istnieje
  86. if(is_file("pliki/$go.inc")) include "pliki/inc/$go.inc";
  87. // jezeli plik nie istnieje wyswietla się komunikat
  88. else echo "<br />Strona w trakcie przebudowy.<br />
  89.  Przepraszamy";
  90. }
  91. // jezeli zmienna $go jest pusta wyswietla się strona glowna
  92. else include "pliki/uslugi.inc";
  93. ?>
  94.  
  95. </div>
  96. </div>
  97.  
  98. <div id="pasek_stopka"></div>
  99.  
  100.  <div id="autor">
  101. <div class="autor_stopka">
  102.  <?php include ("pliki/inc/autor_stopka.inc"); ?>
  103. </div>
  104.  </div>
  105.  
  106.  <div id="stopka">
  107.  <?php include ("pliki/inc/stopka.inc"); ?>
  108.  </div>
  109.  <div id="data">
  110.  <?php include ("pliki/inc/data.inc") ?>
  111.  </div>
  112.  
  113. </div>
  114.  
  115. </body>
  116. </html>
perabo
co to jest?

Kod
<<?php ?>?xml version="1.0" encoding="iso-8859-2"?<?php ?>>
ebit
żebym nic nie namieszał to tu jest to opisane

http://xhtml.b7.pl/prolog.html
piotrooo89
w takim razie czy

  1. <?xml version="1.0" encoding="iso-8859-2"?>


jest taki sam jak

  1. <<?php ?>?xml version="1.0" encoding="iso-8859-2"?<?php ?>>
ebit
tak to jest to samo, tylko że serwer na którym mam zawieszoną stronę nie interpretuje tego w ten sposób i trzeba ten fragment umieścić w takiej formie jak napisałem. Dawno już z tym walczyłem ale jak dobrze pamiętam to chyba chodzi o to że jak nie dodam tego tych fragmentów:
Kod
<?php ?>

to cały prolog jest interpretowany jako kod php (mam nadzieję, że nic nie namieszałem).

trochę opiszę samo działanie menu.
Menu jest dwuczęściowe, tj. jest menu główne (niezmienne) i menu boczne (podmenu), które jest różne w zależności od wybranej zakładki w głównym menu. Czyli żeby było prościej opiszę problem na przykładzie, np. mamy główne menu, które w zakładkach ma:
komputery
sieci
programy
kontakt

i te cztery linki są statyczne, a teraz w zależności od tego co zostanie kliknięte w podmenu pojawi się odpowiednia lista linków np. po kliknięciu linku komputery w menu głównym w menu bocznym pojawi się:
stacje robocze
notebooki
serwery

i dopóki będziemy się poruszać w obrębie menu bocznego to ono również będzie statyczne, ale po kliknięciu np. w "programy" menu boczne zmieni się i zobaczymy w nim np.
programy księgowe
programy magazynowe
systemy operacyjne....

taki efekt udało mi się osiągnąć, jednak nie jest to zgodne z w3c i nie mogę się z tym uporać,
może ma ktoś jakieś inne rozwiązanie, które nie będzie miało błędów przy walidacji?

linki wyglądają tak:
  1. <?php
  2. <a href="index.php?podmenu=komputery&go=notebook">Notebooki</a>
  3. <a href="index.php?podmenu=komputery&go=serwer">Serwery</a>
  4. ?>

i to z nimi jest problem, poza nimi cała strona przechodzi walidację.
Sprawdzałem też jak będzie się zachowywał walidator kiedy przekażę tylko jendą zmienną i okazało się że wtedy link jest zgodny z w3c.
Mam nadzieję, że ktoś jest w stanie mi pomóc.


jeśli chodzi o walidację to taki jest jej efekt (oczywiście to tylko fragment) ale tylko takie są błędy chociaż jest ich dużo ze względu na rozbudowane menu:
Line 46, Column 41: general entity "go" not defined and no default entity.
… <a href="index.php?podmenu=subind&go=ofirmie">o firmie</a>&nbsp;&nbsp;&nb…



This is usually a cascading error caused by a an undefined entity reference or use of an unencoded ampersand (&) in an URL or body text. See the previous message for further details.
Line 46, Column 43: reference not terminated by REFC delimiter.
… <a href="index.php?podmenu=subind&go=ofirmie">o firmie</a>&nbsp;&nbsp;&nbsp;



If you meant to include an entity that starts with "&", then you should terminate it with ";". Another reason for this error message is that you inadvertently created an entity by failing to escape an "&" character just before this text.
Line 46, Column 43: reference to external entity in attribute value.
… <a href="index.php?podmenu=subind&go=ofirmie">o firmie</a>&nbsp;&nbsp;&nbsp;



This is generally the sign of an ampersand that was not properly escaped for inclusion in an attribute, in a href for example. You will need to escape all instances of '&' into '&amp;'.
Line 46, Column 43: reference to entity "go" for which no system identifier could be generated.
… <a href="index.php?podmenu=subind&go=ofirmie">o firmie</a>&nbsp;&nbsp;&nbsp;



This is usually a cascading error caused by a an undefined entity reference or use of an unencoded ampersand (&) in an URL or body text. See the previous message for further details.
Line 46, Column 40: entity was defined here.
<a href="index.php?podmenu=subind&go=ofirmie">o firmie</a>&nbsp;&nbsp;&nb
marcio
  1. <?php
  2. if(!empty($go)) {
  3. // sprawdzamy czy plik o danej nazwie istnieje
  4. if(is_file("pliki/$go.inc")) include "pliki/inc/$go.inc";
  5. // jezeli plik nie istnieje wyswietla się komunikat
  6. else echo "<br />Strona w trakcie przebudowy.<br />
  7. ?>

Chya jestes w bledzie is_file() sprawdza czy dany argument jest plikiem tak jak is_dir() sprawdza czy dany argument jest katalogiem a file_exists() sprawdza czy plik istnieje moze ifa popraw na to:
  1. <?php
  2. if(file_exists('pliki/'.$go.'inc') && is_file("pliki/$go.inc"))
  3. ?>

Lub nawet is_file() mozesz nawet wyrzucic

P.S tutaj masz blad LFI i nawet poinson null byte ale zapewne nie zadziala bo sa slashe na sevie daj dozwolone pliki do array() i sprawdzaj czy podany argument zmiennej $go jest dozwolonym plikiem jak nie to error i wtedy zadne is_file()/file_exists() nie sa ci potrzbne
ebit
zamieniłem ten fragment kodu na taki jak napisałeś, dzięki za tą uwagę, a nie wiesz co jest tam źle zrobione z tymi linkami, że nie akceptuje ich walidator?
...bo nie ukrywam, że to mi najbardziej dokucza.
Shili
Próbowałeś zamiast znaku & użyć encji? Tzn &amp;

Validator sam sugeruje Ci takie rozwiązanie - wystarczyło po prostu uważnie przeczytać wypluwane przez niego błędy winksmiley.jpg
ebit
Dzięki, muszę się jeszcze wiele nauczyć, a tymczasem mam:

Passed validation

party.gif
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.