PHP include

Programovacie jazyky, rady, poradňa...
Fata! ChaoS
Star
Star
Používateľov profilový obrázok
Príspevky: 650
Registrovaný: 12 apr 2006, 20:23
Bydlisko: Tvrdošovce
Kontaktovať používateľa:

PHP include

Príspevok od používateľa Fata! ChaoS »

Ahojte mám jednu otázku

Ak mám index.php takto

Kód: Vybrať všetko

Header

left navigation

$filename = $id . ".php";
if (File_Exists ($filename));
include $filename;
else:
include "uvod.php"
endif;

footer
Tak ako mánm spraviť tlačítko aby mi to fungovalo, myslím html kód.

Kód: Vybrať všetko

<a href="kontakt.php"><img src="kontakt.gif" border="0"></a>
Viem, e niekam by som mal napísať id="kontakt" alebo niečo podobné, ale neviem jak. Tak pls poradte :)
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Ten link by mal byť

Kód: Vybrať všetko

<a href="index.php?id=kontakt"><img src="kontakt.gif" border="0"></a>
A ten php kód treba mierne upraviť (vlastne tam treba pridať načítavanie premennej $id z _GET [ak tam už nie je]):

Kód: Vybrať všetko

$id = $_GET['id'];
hojko
Site Admin
Site Admin
Používateľov profilový obrázok
Príspevky: 38515
Registrovaný: 24 apr 2004, 18:29
Bydlisko: Európa
Kontaktovať používateľa:

Príspevok od používateľa hojko »

Absolutne nechapem co chces a mam taky pocit, ze ani ty sam. Ak tam chces mat id=kontakt a podobne, tak tam pouzi case. Ak potrebujes len zapisat ten riadok do PHPcka, tak takto (pred </a> mozes dat este text):

Kód: Vybrať všetko

echo "<a href=\"kontakt.php\"><img src=\"kontakt.gif\" border=\"0\"></a>";
Fata! ChaoS
Star
Star
Používateľov profilový obrázok
Príspevky: 650
Registrovaný: 12 apr 2006, 20:23
Bydlisko: Tvrdošovce
Kontaktovať používateľa:

Príspevok od používateľa Fata! ChaoS »

Hojko ja som to myslel tak, že celá stránka sa bude skladať len z index.php a bude vtom header, footer a na lavej strane navigácia a na pravej strane bude okienko kde sa budú prepínať rôzne stránky, ale chrono už pochopil, čo som chcel. Tak je všetko fajne :wink: Ja som s PHP len na začiatku takže je to somnou ešte ťažké :lol:
ThunderBoy
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 74
Registrovaný: 09 nov 2005, 18:40

Re: PHP include

Príspevok od používateľa ThunderBoy »

Fata! ChaoS napísal:Ahojte mám jednu otázku

Ak mám index.php takto

Kód: Vybrať všetko

Header

left navigation

$filename = $id . ".php";
if (File_Exists ($filename));
include $filename;
else:
include "uvod.php"
endif;

footer
Tak ako mám spraviť tlačítko aby mi to fungovalo, myslím html kód.

Kód: Vybrať všetko

<a href="kontakt.php"><img src="kontakt.gif" border="0"></a>
Ja to mam spravene na jednej stranke celkom takto isto:

Mam stranku komplet celu a kde chcem menitelny obsah, tak mam vlozeny tento kod, ktory mi nahra dalsiu samostatnu stranku:

Kód: Vybrať všetko

<?php
  	 $filename = $id . ".php";
	 $id = $_GET['id'];
	 if (File_Exists ($filename));
	 include $filename;
	 else:
	 include "prva.php"
	 endif; 
				 ?>
odkaz je tiez tak isto:

Kód: Vybrať všetko

a href="index.php?id=druha">druha</a>
Druha stranka ma pomenovanie druha.php

Problem je ale v tom, ze uz ked otvorim subor index.php tak mi vyhodi chybu

Kód: Vybrať všetko

Parse error: syntax error, unexpected T_ELSE in C:\wamp\www\index.php on line 103
Na riadku 103 sa nachadza premenna

Kód: Vybrať všetko

	else:
Ako je vidiet, je to spustane na virtualnom servere Wamp

Ked zmenim kod takto, tam sa stranka zobrazi bez chyby:

Kód: Vybrať všetko

<?php
  	$filename = $id . ".php";
	 $id = $_GET['id'];
	 if (File_Exists ($filename)); 
	 include "last.php"
	 ?>
Ale pri kliknuti na odkaz

Kód: Vybrať všetko

<a href="index.php?id=druha">druha</a>
zobrazi vzdy zakladny obsah iba zo suboru prva.php

Viete mi poradit a vysvetlit, kde a preco vznikol tento problem a ako ho vyriesit aby to spravne fungovalo?
zaggi
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 314
Registrovaný: 04 feb 2007, 19:32

Príspevok od používateľa zaggi »

Kód: Vybrať všetko

$id = $_GET["id"]; 
$filename = $id . ".php"; 
if (file_exists($filename))
  include($filename); 
else 
  include("prva.php");
v tom druhom si mal prehodene poradie riadkov, najprv si zober premennu z GET a potom ju pouzivaj :wink:
ThunderBoy
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 74
Registrovaný: 09 nov 2005, 18:40

Príspevok od používateľa ThunderBoy »

zaggi napísal:
v tom druhom si mal prehodene poradie riadkov, najprv si zober premennu z GET a potom ju pouzivaj :wink:
Dik, uz to funguje OK
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Ten spôsob ale nie je zrovna najlepší. Mal by si tam aj kontrolovať, či sa ten php môže include-ovať (prípadne si všetky potrebné súbory daj do podadresára).
zaggi
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 314
Registrovaný: 04 feb 2007, 19:32

Príspevok od používateľa zaggi »

aby si pochopil co tym audiotrack mysli ... co ak ti dam link do browsra na sposob /index.php?id=connectdb alebo proste za id napisem nazov suboru ktory by sa includovat nemal ... mal by si kontrolovat predtym ci id patri do nejakej mnoziny napr.

Kód: Vybrať všetko

$povoleneStranky = array("main", "about", "contacts");
if (!in_array($filename, $povoleneStranky)) 
{
    $filename = "invalidaccess";
}
a vytvor si includovaciu stranku "invalidaccess.php" kde vypises spravu ze nepovoleny pristup alebo take nieco :)
turtlak69
Guru
Guru
Príspevky: 2896
Registrovaný: 10 máj 2007, 15:58
Bydlisko: /dev/null

Príspevok od používateľa turtlak69 »

ja som to vyriesil takto:

Kód: Vybrať všetko

$id=htmlspecialchars(addslashes($_GET[id_podstranky]));
if (is_file("./$id.php")
{
include ("./$id.php");
}
else
{
include ("start.php");
}
skripty na pripojenie k databaze su samozrejme inde ako podstranky
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Riešiš tam aj to, keď cez to id príde napr. ../include/nieco.php ?
ThunderBoy
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 74
Registrovaný: 09 nov 2005, 18:40

Príspevok od používateľa ThunderBoy »

zaggi napísal:aby si pochopil co tym audiotrack mysli ... co ak ti dam link do browsra na sposob /index.php?id=connectdb alebo proste za id napisem nazov suboru ktory by sa includovat nemal ... mal by si kontrolovat predtym ci id patri do nejakej mnoziny napr.

Kód: Vybrať všetko

$povoleneStranky = array("main", "about", "contacts");
if (!in_array($filename, $povoleneStranky)) 
{
    $filename = "invalidaccess";
}
a vytvor si includovaciu stranku "invalidaccess.php" kde vypises spravu ze nepovoleny pristup alebo take nieco :)
Ano, pri testovani som prisiel na to, ze ked napisem aj hocijaku blbost, tak ma vzdy hodi na hlavnu stranku.

No natrafil som na iny problem, ktory som dnes riesil cely den a nevyriesil.
Pokukal som rozne fora, kde sa o chybe daco nachadzalo, ale nic z toho mi aj tam nefunguje. Ide o to, ze som pripojil k stranke "Kontaktny formular" v php, ale pri odoslani mi vyhadzuje chybu.
Aby som to upresnil. V subore kontakt.php na nachadza kontaktny formular, ktory pri spravnom zadani vsetkych udajov otvori dalsi stranku kontakt_ok.php, kde je len popis, ze bolo vsetko OK zaslane. No tuto stranku mi neotvori a vypisuje toto:

Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\index.php:53) in C:\wamp\www\kontakt_ok.php on line 19

Prisiel som na to, ze moze byt problem s bielymi medzerami medzi tagmi <? ?>, ale nepomaha to. Kod som skontroloval. No ma to isto suvis s tymto kodom v index.php

Kód: Vybrať všetko

<?php
$id = $_GET["id"];
$filename = $id . ".php";
if (file_exists($filename))
include($filename);
else
include("domov.php");
?>
V subore kontakt_ok sa nachadza tento kod:

Kód: Vybrať všetko

<?php
// load the variables form address bar
$subject = $_REQUEST["subject"];
$message = $_REQUEST["message"];
$from = $_REQUEST["from"];
$verif_box = $_REQUEST["verif_box"];
// remove the backslashes that normally appears when entering " or '
$message = stripslashes($message); 
$subject = stripslashes($subject); 
$from = stripslashes($from); 
// check to see if verificaton code was correct
if(md5($verif_box).'a4xn' == $_COOKIE['tntcon']){
	// if verification code was correct send the message and show this page
	mail("[email protected]", 'Online Form: '.$subject, $_SERVER['REMOTE_ADDR']."\n\n".$message, "From: $from");
	// delete the cookie so it cannot sent again by refreshing this page
	setcookie('tntcon','');
} else {
	// if verification code was incorrect then return to contact page and show error
	header("Location:".$_SERVER['HTTP_REFERER']."?subject=$subject&from=$from&message=$message&wrong_code=true");
	exit;
}
?>
Ten 19 riadok je ten, kde je header

V subore index.php sa zavadza novy nazov hlaviciek v priehliadaci a subor kontakt_ok.php sa otvara tiez cez index.php, ako je to popisane na zaciatku tejto temy, ale uz nemoze zmenit hlavicku. Pochopil som to dobre?
No ked spustim kontaktny formular samostatne, tak bezi uplne v pohode.

Dufam, ze ste to aspon trocha pochopili, bo ja uz nechapem nicomu :?


Viete mi opat poradit ako to opravit? Thx

Taktiez by ma zaujimalo aj toto
chrono napísal:Riešiš tam aj to, keď cez to id príde napr. ../include/nieco.php ?
. Ako to je teda s tymi adresarmi?
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Najskôr k tej chybe "Warning: Cannot modify header information...". Skontroluj, či pred <?php naozaj nemáš vôbec nič. Ak to máš v utf-8, môžeš tam mať BOM. V tom editore to vidieť nemusíš, ale v editore, ktorý nepodporuje utf-8 na začiatku uvidíš tri zvláštne znaky.

K tým adresárom. Môžeš tam testovať, či je v $id znak "/", alebo "." a ak tam je, vyhodíš stránku s chybou (alebo štandardnú stránku). Alebo môžeš urobiť to, čo ti písal hojko, a teda použiješ switch. Mohlo by to vyzerať nejako takto:

Kód: Vybrať všetko

switch ($id) {
case "novinky": $file = "news.php"; break;
case "galeria": $file = "fotky.php"; break;
default: $file="main.php";
}
include($file);
(názvy v $id a samotných súborov sú rôzne iba preto, aby bolo jasné, že rôzne byť môžu) :) Inak to s tým in_array funguje na podobnom princípe.
ThunderBoy
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 74
Registrovaný: 09 nov 2005, 18:40

Príspevok od používateľa ThunderBoy »

chrono napísal:Najskôr k tej chybe "Warning: Cannot modify header information...". Skontroluj, či pred <?php naozaj nemáš vôbec nič. Ak to máš v utf-8, môžeš tam mať BOM. V tom editore to vidieť nemusíš, ale v editore, ktorý nepodporuje utf-8 na začiatku uvidíš tri zvláštne znaky.
Prehladal som uplne vsetko, znova vsetko poprepisoval a stale ten isty problem. Skusam som rozne moznosti. Napr. odstranit vsetko z hlaviciek <head>, potom chybu nevyhzadzovalo, ale pri nespravnom zadani kodu ma vratilo na hlavnu stranku. Potom som este skusil odstranit Hotspot (obrazovu mapu). To sa uz rozbehlo, ale zas to vyhadzovalo pri spravnom zadani kodu.
Ja uz mam toho plne zuby.
Kua, stale riesim daky novy problem. Stranku chcem mat uz konecne hotovu a "seriem" sa tu s takymito k.....mi.

Cely funkcny kod aj s potrebnymi okresanymi subormi na stranke som zbalil do raru a profici v php ho mozete stiahnut a zistit, co je tam zle.
Budem Vam len vdacny. Staci len dole na stranke kliknut na odkaz Kontakt a testovat. Zatial vdaka.
Prílohy
thunderboy.rar
subory potrebne na testovanie
(37.2 KiB) 60 stiahnutí
"J"
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1019
Registrovaný: 13 mar 2007, 17:10

Príspevok od používateľa "J" »

Otvor dany subor v PSPade alebo inom lepsom textovom editore, najdi tlacitko ¶ a pomocou neho zobrazis skryte znaky. Urcite bude nejaky pred <?php, tak ho zmaz. Uloz ako UTF-8 bez BOM.
ThunderBoy
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 74
Registrovaný: 09 nov 2005, 18:40

Príspevok od používateľa ThunderBoy »

Este raz som to prezrel aj v Pspade, skusal rozne formatovanie, ulozit do UTF8 bez bom, taktiez som vyskusal znova vytvorit nove subory a vlozit do nich povodny obsah. Rovnako som skusil odstranit vsetky medzery v celom kode, toto uz slo, ale preto, ze kod bol necitatelny a preslo to aj cez nespravny ciselny kod. :x
Fakt uz neviem, co s tym je. Mate k dispozicii zdrojaky, tak to skuste prosim skontrolovat.
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Problém je, že v tom súbore index.php zobrazíš rôzny html kód a až potom tam máš to presmerovanie. Skús to urobiť tak, že v tom formulári zavoláš php skript a ten potom niekam presmeruje.
Tiež som si všimol, že tam používaš referer. To ale nemusí byť najlepší nápad (posielanie referer sa dá zakázať).
ThunderBoy
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 74
Registrovaný: 09 nov 2005, 18:40

Príspevok od používateľa ThunderBoy »

chrono napísal:Problém je, že v tom súbore index.php zobrazíš rôzny html kód a až potom tam máš to presmerovanie. Skús to urobiť tak, že v tom formulári zavoláš php skript a ten potom niekam presmeruje.
Tiež som si všimol, že tam používaš referer. To ale nemusí byť najlepší nápad (posielanie referer sa dá zakázať).
Vies mi prosim ta dat aj nejaky priklad, ako to spravit alebo ako to cele zmenit? Som len zaciatocnik v php. Thx
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Celú kontrolu a testovanie údajov daj do php súboru, v ktorom nebudeš robiť nič iné (hlavne tam nebudeš nič zobrazovať). V tom súbore potom môžeš presmerovať na vhodný súbor (alebo ho priamo načítať).
ThunderBoy
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 74
Registrovaný: 09 nov 2005, 18:40

Príspevok od používateľa ThunderBoy »

chrono napísal:Celú kontrolu a testovanie údajov daj do php súboru, v ktorom nebudeš robiť nič iné (hlavne tam nebudeš nič zobrazovať). V tom súbore potom môžeš presmerovať na vhodný súbor (alebo ho priamo načítať).
OK, skusim sa s tym este neskor pohrat. Dik

//autoeditácia príspevku ( 05 Jul 2008, 21:57 )
Chcem sa vratit este k tomuto:

Kód: Vybrať všetko

<?php
$id = $_GET["id"];
$filename = $id . ".php";
if (file_exists($filename))
include($filename);
else
include("domov.php");
?>
Mozno to bude pre niekoho banalna vec, ale pre mna tazky oriesok.
Bol by som rad, keby ste mi to trosku objasnili a hodili sem priamo daky priklad. Takze, s cim si to neviem rady?

Ten vrchny kod mam nahodeny priamo v hlavnom subore index.php, ktorý sa nachadza v roote. Vsetky ostatne podstranky sa nachadzaju tiez v roote, ale mam tam niekolko hotovych modulov, ktore su vo vlastnych adresaroch s kopcom svojich dalsich suborov. Neviem, ako mam vyriesit tvorbu odkazov v tomto style

Kód: Vybrať všetko

<a href="index.php?id=druha">druha</a>
, ked odkazuju napr. na index.php v inych adresaroch.

Ako sa to da riesit?
Napísať odpoveď