webForumDet fria alternativet

include-script behöver ändras

18 svar · 575 visningar · startad av silfver

silfverMedlem sedan apr. 200312 679 inlägg
#1

Hejsan!

Visste inte hur jag skulle söka, så jag postar direkt. Är det så att liknande trådar vart uppe tidigare så får ni som kan gärna göra en sökning åt mig. :)

Ett vanligt "include-script", man skriver sida?=startsida för att komma dit. Men om någon leker med url:en, och skriver sida?=nerd i stället, men den sidan inte finns, kan man på något sätt ändra i min kod här nedan, så att det kommer upp en text där sidorna visas? T ex. "Sidan du söker finns inte." eller liknande.

<?php $path = './'; $extension = '.se'; if ( preg_match("#^[a-z0-9_]+$#i",$sida) )
{ $filename = $path.$sida.$extension; include($filename); } ?>

mvh silfver

r/ Jag använder mig inte av databaser och så vidare. Så det vore bra om ni tänker på det när ni klurar med kod. :p

MatteMedlem sedan aug. 20002 975 inlägg
#2

Kanske något på det här hållet:

$path = './';
$allowed = array('startsida', 'nerd', 'annan_sida');

$sida = ( isset($_GET['sida']) && in_array($_GET['sida'], $allowed) ) ? $_GET['sida'].'.se' : 'error.se';

include $path.$sida;

Ditt felmeddelande lägger du i error.se.

silfverMedlem sedan apr. 200312 679 inlägg
#3

Prima. Funkade perfekt, tack ska du ha! :)

silfverMedlem sedan apr. 200312 679 inlägg
#4

http://silfver.se/temp/test.php?sida=hej
testa att ändra något :)

r/

<?php $path = './'; $extension = '.se'; if ( preg_match("#^[a-z0-9_]+$#i",$sida) )
{ $filename = $path.$sida.$extension; include($filename); } ?>

jag vill ju att "säkerhetskoden" skall finnas i din kod också. Är det krångligt att ordna? Då jag inte kan någon php själv kan jag inte göra det. :)

MatteMedlem sedan aug. 20002 975 inlägg
#5

Det är i och för sig inga problem att lägga in den, men det är onödigt eftsom jag ersatt den med annan säkerhetskod där tillåtna värden skrivs in i arrayen.

silfverMedlem sedan apr. 200312 679 inlägg
#6

Matte skrev:

Det är i och för sig inga problem att lägga in den, men det är onödigt eftsom jag ersatt den med annan säkerhetskod där tillåtna värden skrivs in i arrayen.

Aha, okay om du säger det så. Jag kan som sagt ingenting om hur php fungerar, men det verkar du göra. Det är bara så att killen som äger servern grejerna ligger på har hårda säkerhetskrav. :)

silfverMedlem sedan apr. 200312 679 inlägg
#7

Man kommer på mycket i efterhand. Om man ska skriva 'sida','sida' osv. när man har en hemsida med massor av sidor kan det bli ganska jobbigt. :L

MatteMedlem sedan aug. 20002 975 inlägg
#8
$path = './';

$sida = ( isset($_GET['sida']) && preg_match("#^[a-z0-9_]+$#i",$_get['sida']) ) ? $_GET['sida'].'.se' : 'error.se';

include $path.$sida;

Förstod jag dig rätt så hade du tänkt köra webbplatsen genom att inkludera allt i indexfilen ?

Detta kan ge dig en del bekymmer senare som jag hoppas du är medveten om.
Du kan gärna läsa den här tråden innan du går vidare.

silfverMedlem sedan apr. 200312 679 inlägg
#9

Matte skrev:

$path = './';

$sida = ( isset($_GET['sida']) && preg_match("#^[a-z0-9_]+$#i",$_get['sida']) ) ? $_GET['sida'].'.se' : 'error.se';

include $path.$sida;

Förstod jag dig rätt så hade du tänkt köra webbplatsen genom att inkludera allt i indexfilen ?

Detta kan ge dig en del bekymmer senare som jag hoppas du är medveten om.
Du kan gärna läsa den här tråden innan du går vidare.

Förstår hur du menar med tråden. Kan inte svara på hur jag gör. Men jag har en fil separat för meny och inkluderar den. Sedan från länkarna i menyn länkar jag in i "main" om man kan säga så.

r/ då jag inte kan php så vet jag inget annat sätt än att använda mig av index.php?sida=guestbook. Går det på nåt annat smidigt sätt utan MySQL osv? :)

MatteMedlem sedan aug. 20002 975 inlägg
#10

Vad jag närmast tänkte på med den länken var att istället för att genom index.php?sida=guestbook utgå från det som är gemensamt och sedan inkludera det som är unikt, göra tvärtom utgå från det som är unikt och inkludera det som är gemensamt; alltså använda dig av guestbook.php istället och inkludera de delar som är unika för varje sida.

Indexinkludering (index.php?sida=guestbook) har en viss förmåga att ställa till problem med sessioner, headers mm om man inte håller tungan rätt i mun, och det kan vara besvärligt att integrera skript man hittar på nätet på sin sida.

Den enklaste lösningen är då att överst i index.php lägga:

<?php

ob_start();

Ett bättre sätt är att posta alla formulär, länkar m.m. som vill ändra på något i databas eller liknande, till separata skript som sedan skickar vidare till indexfilen med rätt variabel.

Men som jag ser det så vinner man mycket mindre än man riskerar att få besvär genom att överhuvudtaget använda indexinkludering.

Vad jag ville var bara att du skulle vara medveten om vad indexinkluderingen kunde innebära, innan du fick eventuella problem.

silfverMedlem sedan apr. 200312 679 inlägg
#11

Matte skrev:

Vad jag närmast tänkte på med den länken var att istället för att genom index.php?sida=guestbook utgå från det som är gemensamt och sedan inkludera det som är unikt, göra tvärtom utgå från det som är unikt och inkludera det som är gemensamt; alltså använda dig av guestbook.php istället och inkludera de delar som är unika för varje sida.

Indexinkludering (index.php?sida=guestbook) har en viss förmåga att ställa till problem med sessioner, headers mm om man inte håller tungan rätt i mun, och det kan vara besvärligt att integrera skript man hittar på nätet på sin sida.

Den enklaste lösningen är då att överst i index.php lägga:

<?php

ob_start();

Ett bättre sätt är att posta alla formulär, länkar m.m. som vill ändra på något i databas eller liknande, till separata skript som sedan skickar vidare till indexfilen med rätt variabel.

Men som jag ser det så vinner man mycket mindre än man riskerar att få besvär genom att överhuvudtaget använda indexinkludering.

Vad jag ville var bara att du skulle vara medveten om vad indexinkluderingen kunde innebära, innan du fick eventuella problem.

Aha, okay. Eftersom detta var det enda sättet jag visste, så var det enklaste sättet för mig. Skönt att slippa allt vad frames heter.
Men om man vill använda sig av tex. index.php, bilder.php osv. måste man då använda databaser? eller kan du någon sida med en enkel lathund/tutorial? vore skoj att avancera lite. :)

MatteMedlem sedan aug. 20002 975 inlägg
#12

Att inkludera allt i indexfilen är, som jag ser det, ett frames-tänkande.

En lika enkel variant, men utan indexinkluderingens problem är att göra så här.

Det hela har inget som helst med databas att göra.
Du kan använda databas, eller du kan låta bli.

silfverMedlem sedan apr. 200312 679 inlägg
#13

Matte skrev:

Att inkludera allt i indexfilen är, som jag ser det, ett frames-tänkande.

En lika enkel variant, men utan indexinkluderingens problem är att göra så här.

Det hela har inget som helst med databas att göra.
Du kan använda databas, eller du kan låta bli.

Förstår inte vad det är på skillnad på det där, och på mitt sätt.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML lang="sv">
	<head>
	<title>silfver.se </title>
	<link rel="stylesheet" href="stil.css" type="text/css">
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15">	
	</head>
<body>
<div id="topic"><?php echo $topic; php?></div>

<div id="menu">länkarna i menyn</div>
	<div id="main">
<?php
$path = './';
$allowed = array('startsida', 'bilder', 'artiklar', 'lankar', 'gastbok', 'om');
$sida = ( isset($_GET['sida']) && in_array($_GET['sida'], $allowed) ) ? $_GET['sida'].'.se' : 'error.se';
include $path.$sida;
?>
	</div>
</body>
</HTML>

Man använder ju inkluderingen på samma sätt? Eller?

MatteMedlem sedan aug. 20002 975 inlägg
#14

Den stora skillnaden är att du har en output till webbläsaren innan du inkluderar själva skriptet.

Det innebär att du kan få problem med eventuella headers i de filer du inkluderar.
Det gäller att du verkligen vet vad du gör när du inkluderar skript du hittat på webben någonstans, hur du ska hantera de eventuella headers typ session_start(), header() eller setcookie() som kan tänkas ingå i dessa skript.

Du får alltså inte ha någon output före dessa headers, och det gäller för dig att skriva om dessa skript så du får det hela rätt.
Det kan innebära att du får bryta ut en del kod till egna filer för att få det att fungera.
Eller så använder du ob_start.

Motsvarande gäller naturligtvis de skript du skriver själv.

Jag säger alltså inte att det inte går, men att du kan få problem om du inte är helt säker på hur du hanterar sådana saker.

Sen finns det en estetisk sida av det också.
Själv tycker jag att index.php?sida=guestbook är evinnerligt fult jämfört med guestbook.php :)
Och ännu fulare är vad man kan se ibland: www.domän.com/?sida=guestbook.

Sen kan det påverka din indexering hos sökmotorerna negativt också om du använder querystringen för att styra visningen av endast en sida.

silfverMedlem sedan apr. 200312 679 inlägg
#15

Matte skrev:

Sen finns det en estetisk sida av det också.
Själv tycker jag att index.php?sida=guestbook är evinnerligt fult jämfört med guestbook.php :)
Och ännu fulare är vad man kan se ibland: www.domän.com/?sida=guestbook.

Det där har jag också tänkt på däremot. Jag tycker också det ser bättre ut. Absolut. Men vad jag inte förstår är hur man ska göra för att få det att se ut så. Vill inte verka dum, men jag förstår inte hur du gör i ditt exempel du hade på länken. :)

MatteMedlem sedan aug. 20002 975 inlägg
#16

Jag förstår inte vad det är som du inte förstår, och hur jag ska förklara det tydligare.

Det som är gemensamt för utseendet på samtliga sidor lägger du i egna filer, som du sedan inkluderar. Du kan här också ha variabler för saker som kan vara unika för sidan, t.ex <title>.

Strukturen för t.ex guestbook.php skulle då kunna bli:

<?php

// Om du hanterar sessioner på sidan.
session_start();

// Eventuell inloggningskontroll lägger du här

// Här lägger du kod som tar hand om postade inlägg

// Här sätter du de variabler som eventuellt ingår i sidhuvudet

// Utskrift av "sidhuvud", alltså HTML-kod som är gemensam för alla sidor
include "top.php";

// Här lägger du koden för visning av gästboken, samt eventuellt formulär

// Utskrift av "sidfot". Den HTML-kod i botten som är gemensam för alla sidor.
include "bottom.php";

?>
silfverMedlem sedan apr. 200312 679 inlägg
#17

Matte skrev:

Jag förstår inte vad det är som du inte förstår, och hur jag ska förklara det tydligare.

Det börjar väl klarna lite.
så om man gör en startsida så kan det se ut såhär:

<?php
include top.php
$rubrik=hej osv
?>

text...

<?php
include bottom.php
?>

startsida.php är alltså bara innehållet MED inkludering av toppen och eventuell sidfot osv? Är jag inne på rätt spår nu? :OO

Det som egentligen strular till det för mitt huvud är hur man länkar sidorna. Skapar man en fil, där man bara inkluderar menyn osv. för att sedan skapa innehåll? Det enklaste vore om någon kunde visa mig ett klart exempel (att ladda ner typ). :e
Tack för din hjälp!

MatteMedlem sedan aug. 20002 975 inlägg
#18

Ett exempel till.

top.php. Innehåller det som är gemensamt för alla sidor från toppen av sidan.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" 
  content="text/html; charset=iso-8859-1">
<title><?=$title ?></title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<div id="menu">
<a href="index.php">Startsidan</a>
<a href="guestbook.php">Gäsrbok</a>
<a href="ego.php">Om mig</a>
</div>

bottom.php. Innehåller det som är gemensamt för alla sidor i botten av sidan.

<div id="bottom">
Kontakta mig på <a href="mailto:hej@hopp.com">hej@hopp.com</a>
</div>
</body>
</html>

index.php. Startsidan

<?php

$title = "Startsidan";
include "top.php";

?>

<h1>Startsida</h1>

<p>Hej hopp, och välkommen till min sida.</p>

<?php

include "bottom.php";

?>
silfverMedlem sedan apr. 200312 679 inlägg
#19

Tack så mycket för ditt tålamod! Jag har sovit på saken och visste precis vad jag skulle göra när jag vaknade. :L Förstår inte varför jag aldrig tänkt på det här tidigare för!

135 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)