Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML][CSS]Funkcja include.
Forum PHP.pl > Forum > Przedszkole
ktesibios
Witam wszystkich!
Jestem nowym użytkownikiem forum i z php nie miałem wiele do czynienia, mam skrypt z zagranicznej strony i skrypt ma za zadanie generowanie praktycznie wszystkich podstron, cala stronę miałem oparta na ramkach teraz chce się wyzbyć ramek i mój problem zaczyna się przy includowaniu treści z php.

Cala stronę mam podzielona na kilka sekcji w divach menu jest oparte na css. I chodzi mi o to by przy kliknięciu z menu strona wyświetlała się w divie "main". Korzystam z następującego skryptu:
CODE

if (isset($_GET['page']))
{
$page = $_GET['page'];
if(!empty($page))
if (is_file("$page"))
include ("$page");
else
echo "Podana strona nie istnieje.";
}
else
include "home.php";
?>


I wszystko jest dobrze dopóki w linkach są konkretne pliki przykladowo:
CODE
<li><a href="index.php?prace.php" >Moje prace</a></li>

problem zaczyna sie gdy link ze skryptu przyjmuje postac taka:
CODE
<li><a href="index.php?page=prace.php?mod=kat&kid=3" >Moje fotografie</a></li>

i wtedy include jaki stosuje nie chodzi? Czy ktoś mógł by mi pomóc jak sobie z tym poradzić ew. coś doradzić? z góry bardzo dziękuje za pomoc.

Dołączam index.php w którym jest fragment tego mojego menu i ten skrypt:
CODE

<?
session_start();
if(!$_SESSION['lang']) $_SESSION['lang']='pl';
if($_GET['lang']) $_SESSION['lang']=$_GET['lang'];
header("Content-Type: text/html; charset=ISO-8859-2");
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml2/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">

<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2" />

<title> tytul</title>
<link href="style2.css" rel="stylesheet" type="text/css" />
</head>

<body>

<div id="container">
<div id="header">
<h1>Header</h1>
<ul id="menu">
<li><a href="index.php?page=his.php">O mnie » &nbsp; &nbsp;
<!--[if gte IE 7]><!--></a><!--<![endif]-->
<!--[if lte IE 6]><table><tr><td><![endif]-->
</a>
<ul>
<li><a href="index.php?page=home.php" >Tytul1</a></li>
<li><a href="index.php?page=rozne.php" >Rozne » </a></li>
<li><a href="index.php?page=content.php?content=Prace" >Prace »
<!--[if gte IE 7]><!--></a><!--<![endif]-->
<!--[if lte IE 6]><table><tr><td><![endif]-->

</a><ul>
<li><a href="index.php?page=prace.php?mod=kat&kid=3">Fotografie</a></li>
<li><a href="index.php?page=prace.php?mod=kat&kid=4">Rysunki</a></li
></ul>
<!--[if lte IE 6]></td></tr></table></a><![endif]-->
</li>

<li><a href="index.php?page=produkty.php?dzial=2" >Sztuka a sztuka</a></li>
<li><a href="index.php?page=produkty.php?dzial=4" >W obiektywie</a></li>
</ul>
<!--[if lte IE 6]></td></tr></table></a><![endif]-->
</li>

<li><a href="index?page=produkty.php?dzial=5">Multimedia »
<!--[if gte IE 7]><!--></a><!--<![endif]-->
<!--[if lte IE 6]><table><tr><td><![endif]-->
</a>
<ul>
<li> </a><a href="index.php?galeria.php">Galeria</a></li>
<li> </a><a href="index.php?page=nagrania.php">Nagrania </a></li>
</ul>
<!--[if lte IE 6]></td></tr></table></a><![endif]-->
</li>

</ul>
<!-- end #header --></div>
<div id="main">

<?php
if (isset($_GET['page']))
{
$page = $_GET['page'];
if(!empty($page))
if (is_file("$page"))
include ("$page");
else
echo "Podana strona nie istnieje.";
}
else
include "home.php";
?>

<!-- end #main --></div>
<div id="footer">

<!-- end #footer --></div>
<div id="copyright">

<p>Copyright &copy; 2003-2009 <a href="mailto:ktesibios@gmail.com"Ktesibios</a>. Wszelkie prawa Zastrzeżone. </p>

<!-- end #copyright --></div>
<!-- end #container --></div>
</body>
</html>
Lion_87
No to powiem Tobie że linki wyglądać muszą tak

  1. <a href="index.php?page=prace&mod=kat&kid=3" >Moje fotografie</a>


wtedy za include bierzesz

  1. <?php
  2. include ($page.'.php');
  3. ?>


Poza tym musisz zabezpieczyć includowanie.
Mephistofeles
Pamiętaj o zabezpieczeniach. Taki skrypt to otwarte drzwi, wystarczy, że ktoś wpisze np. ?page=config.php i już ma twoje hasła do bazy, czy obojętne co tam trzymasz w takim pliku, a co jak wpisze ../../../etc/passwd?
ktesibios
Probowalem zrobic tak jak mówiliście i po wgraniu na serwer wystepuje coś następującego:

Warning: include() [function.include]: Failed opening '.php' for inclusion (include_path='.:/:/usr/php/pear') in /index.php on line 91

a jak najlepiej to zabezpieczyc??
Spawnm
albo dajesz tablice z nazwami plików które mogą być includowane i potem sprawdzasz czy przysłana wartość się tam znajduje, jeśli tak to include.
albo dajesz nazwy plików np: cos.inc.php , cos.class.php
i includujesz w formie 'includes/'.$inc.'.class.php';
Foxx
Cytat
Warning: include() [function.include]: Failed opening '.php' for inclusion (include_path='.:/:/usr/php/pear') in /index.php on line 91

Ten błąd mówi, że próbujesz zaincludować plik .php czyli że zmienna, w której miała być nazwa pliku (przed rozszerzeniem) jest pusta. To dlatego, że zamiast
  1. <?php
  2. include ($page.'.php');
  3. // musisz zrobić
  4. include ($_GET['page'].'.php');
  5. ?>
ktesibios
Swietnie, includowanie wszystkiego chodzi smile.gif jeszcze mam 2 pytania odnosnie tego jak to najlepiej zabezpieczyc i jak ustawic strone startowa "defualt" bo rowniez mam ja z php.
erix
Cytat
i jak ustawic strone startowa "defualt" bo rowniez mam ja z php.

Sprawdzaj, czy zmienna w $_GET jest pusta.

Cytat
jeszcze mam 2 pytania odnosnie tego jak to najlepiej zabezpieczyc

Jest przyklejony wątek, poszukaj.
Spawnm
Cytat(ktesibios @ 14.03.2009, 14:45:07 ) *
Swietnie, includowanie wszystkiego chodzi smile.gif jeszcze mam 2 pytania odnosnie tego jak to najlepiej zabezpieczyc i jak ustawic strone startowa "defualt" bo rowniez mam ja z php.

Napisałem ci na temat zabezpieczenia , przeczytałeś ?
a co do default to np rozwiń to: $def=()?:;
ktesibios
Nie rozumiem jak to sprawdzac? a nie mozna tego po prostu ustawic? w kwesti zabezpieczenia juz sie doczytalem dzieki:)
Foxx
  1. <?php
  2. if(empty($_GET['page'])){
  3.  include('default.php');
  4. }
  5. ?>

W czym masz tu problem?
Spawnm
Cytat(ktesibios @ 14.03.2009, 15:54:01 ) *
Nie rozumiem jak to sprawdzac? a nie mozna tego po prostu ustawic? w kwesti zabezpieczenia juz sie doczytalem dzieki:)

  1. <?php
  2. $def=( empty($_GET['strona']) ) ? 'tak.php' : $_GET['strona'];
  3. ?>
Mephistofeles
Przy zabezpieczeniach warto wspomnieć jeszcze o funkcji basename(). Zainteresuj się nią, bo nawet jak zrobisz takie coś 'includes/'.$zmienna.'.costam.php' to nie jest to bezpieczne - null byte (% 00) i twoje skomplikowane rozszerzenie nagle znika.
ktesibios
Moze to sie dla was wyda smieszne ale ja naprawde mam male pojecie o php i robie w nim cos moze 4 raz w zyciu... i stad te problemy, robie stronke dla siebie i za bardzo niechce wydawac kasy niewiadomo ile zeby ktos mi zrobil i juz praktycznie mam wszystko zrobione tylko zostalo podpiac. i Z gory dzieki wszystkim za pomoc.
wkleilem cos nastepujacego:
CODE

<?php

//93// include ($_GET['page'].'.php');
if(empty($_GET['page']))
{
include('home.php');
}
?>

i po wejsciu na strone wyskakuje mi
Warning: include() [function.include]: Failed opening '.php' for inclusion (include_path='.:/:/usr/php/pear') in /index3.php on line 93


aha i dodam ze ten blad pojawia sie na stronie home a pozniej jest juz okej... i wszystko ladnie chodzi



Foxx
Raczej powinno być:
  1. <?php
  2. if(empty($_GET['page'])) {
  3.  include('home.php');
  4. } else {
  5.  include ($_GET['page'].'.php');
  6. }
  7. ?>

Ale pamiętaj o kwestiach bezpieczeństwa, o których już tu wspominano.
I koniecznie przeczytaj: Temat: Bezpieczenstwo_skryptow_PHP
ktesibios
ekstra wszystko chodzi, teraz zaglebie sie dokladniej w te kwestie bezpieczenstwa. smile.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.