Strona 1 z 1

Problem z funkcja include

PostNapisane: 23 października 2005, o 14:26
przez spider20004
Witam

Ucze sie programowania w php. I napotkalem problem:)
Mianowice stworzylem plik index.php, dzial.php, lewa.htm, prawa.htm, srodek.htm

W pliku dzial.php stworzylem tapele z 3 kolumn. W pierwszej kolumnie za pomoca skryptu <?php include("lewa.htm"); ?> wstawilem plik lewa.htm
podobnie zrobilem z ostatnią kolumną <?php include("prawa.htm"); ?>

W srodkowej kolumnie chcialem użyć funkcji:

<?
$urls=$id.".html"; /*zamiast html musimy podać jakie
rozszerzenia mają pliki, które chcemy wkleić */
if(file_exists("$urls"))
{
$file=fopen($urls,"r"); /* otwiera plik o ścieżce
dostępu równej wartości
zmiennej $id plus rozszerzenie */

while($linia=fgets($file, 99))
{
echo($linia); // wyświetla zawartość pliku $file
}
fclose($file); // zamyka plik
}
else{
echo("<p align=\"center\"><b>BŁĄD 404</b><br><br>
Wystąpił błąd. Plik do którego prowadzi ten link NIE
ISTNIEJE !!!<br><br><a href=\"javascript:history.back()\">Powrót</a>");
} /* Tu pojawia się informacja, gdy wystąpi błąd */
?>

Tak aby po wpisaniu adresu np. dzial.php?id=srodek w srodkowej kolumnie pojawil się plik srodek.htm
A np. gdy wpisze dzial.php?id=lewa w srodkowej kolumnie otworzy się plik lewa.htm
Jak mam zmienic powyższy skrypt. Są tam opisy, ale nic mi nie pomogly.

Proszę o pomoc. Z gory dziekuje
[/code]

Problem z funkcja include

PostNapisane: 24 października 2005, o 01:14
przez mumio
Witam

Przyznam, że wybrałeś dosyć karkołomny sposób.
1. Po co otwierać plik i przepisywać go linia po liniii?
Ja ten fragment zastąpił bym tym:

<?
$urls=$id.".html"; /*zamiast html musimy podać jakie
rozszerzenia mają pliki, które chcemy wkleić */
if(file_exists("$urls"))
{
include ("$urls");
}
else{
echo("<p align=\"center\"><b>BŁĄD 404</b><br><br>
Wystąpił błąd. Plik $urls do którego prowadzi ten link NIE
ISTNIEJE !!!<br><br><a href=\"javascript:history.back()\">Powrót</a>");
} /* Tu pojawia się informacja, gdy wystąpi błąd */
?>

jedna uwaga:
Taka konstrukcja powoduje, że parametr id przekazuje pełną nazwę pliku który ma być wklejany co może być w pewnych okolicznościach niebezpieczne.


ja preferuje taką konstrukcję:
<?
switch ($_GET['id'])
{
case l:
include("lewa.html"); // tu wpadnę dla adresu np. dzial.php?id=l
break;

case s:
include("srodek.html"); // tu wpadnę dla adresu np. dzial.php?id=s
break;
.................. itd

default:
// tutaj obsługa przypadku gdy parametr id miał nieprzewidzianą wartość
include("info_404.html");
// lub
// echo (" komunikat a o błędzie");
}
?>

Czy każdy z plików który przygotowałeś: index.php, dzial.php, lewa.htm, prawa.htm, srodek.htm ma wszystkie znaczniki szkieletu html-a?
UWAGA bo include "wkleja" do otwartego dokumentu to co mu każesz.
czyli w sumie możesz otrzymać podwojony znacznik
<html>
......

a teraz efekt wklejenia przez include pliku srodek.htm:
<html>
...
</html>

......
</html>


co jest niedopouszczalne.


pozdrowienia
mumio