index.php med included menu ang main

halvors

New Member
Hei!

Jeg bruker framset på min hjemmeside, men jeg tenkte det var griere å lage et phpscript med en table i stedet.

Men hvordan kan jeg lage det med en includert meny og at main "framen" endrer inhold etter hva du klikker på i menyen?

Har du noen eksempler?

Hilsen Halvor.
 

Helge

Profesjonell Googlesøker
plasser dette i index.php der du vil inkludere innholdet:

<?php
$IncDir = "inc_filer";
$Default = "hjem";
$Error = "404";
$page = $_GET['side'];
$page = strip_tags(stripslashes($page));

if($page == ""){
include("$IncDir/$Default.php");
}
elseif(file_exists("$IncDir/$page.php")){
include("$IncDir/$page.php");
}
else{
include("$IncDir/$Error.php");
}
?>

opprett en mappe som heter inc_filer

inne i den mappen kaller du filene for det linkene er.

F.eks hovedside = hjem.php

da blir linkene slik: ?side=hjem
 

halvors

New Member
tenkte balndt annet på det der takk, men lurer på hvordan jeg kan lage et liknende framset i php.

altså dette inn menu.php (menyen) i en table med eks. hjem.php (innhold), slik at når du klikker på noe i menyen kommer forskjellig innhold opp.

slik at menyen altid er der men innholde varierer etter hva du kilkker på.

omtrent som en 2 framer i et framset.

Hilsen Halvor.
 

Helge

Profesjonell Googlesøker
Når du setter det opp sånt så blir det jo rett

F.eks:

<html>
<head>
<title>include</<title>
</head>
<body>
<div id="wrap">
<div id="head">
</div>
<div id="meny">
<ul id="menu">
<li class="home"><a href="?side=hjem">Home</a></li>
<li class="kontakt"><a href="?side=kontaktoss">Kontakt oss</a></li>

</ul></div>
<div id="content">

<?php
$IncDir = "inc_filer";
$Default = "hjem";
$Error = "404";
$page = $_GET['side'];
$page = strip_tags(stripslashes($page));

if($page == ""){
include("$IncDir/$Default.php");
}
elseif(file_exists("$IncDir/$page.php")){
include("$IncDir/$page.php");
}
else{
include("$IncDir/$Error.php");
}
?>
</div>
</div>

Der har du et eksempel som viser design inkludert menyen. Når du trykker på en link i menyen, f.eks ?side=kontaktoss, så skifter den innholdet til kontaktoss siden etc.

Så det er jo forsåvidt det du spør etter? eller forstår jeg spørsmålet ditt helt feil ?
 

halvors

New Member
En liten ting, hvordan får jeg dette til å virke?

Altså ?page=home skal inn i den ene delen a tableen.

PS: fint om du forklarer litt hvorfor ?page=home havner akkurat der på siden å hvordan jeg endrer på det. :)

her er koden:

--START--

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Hvalstad Data</title>
<link rel="shortcut icon" href="images/favicon.ico" />
<meta name="keywords" content="Hvalstad Data, HD, hd, hvalstaddata.no, hvalstaddata.com, Hvalstad" />
<meta name="description" content="Hvalstad Data driver med Web Hosting, Web Design, Programmering og mye mer." />

<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-6305556-7");
pageTracker._trackPageview();
} catch(err) {}
</script>

</head>

<body>

<?php

echo "<table border='1'>";
echo "<tr>";
echo "<td>";
echo "<div id='menu'>";
include("menu.php");
echo "</div>";
echo "</td>";
echo "<td>";
echo "<div id='content'>";
echo "her skal '?page=home' vises";
echo "</div>";
echo "</td>";

$default="home";
$directory="./";
$extension="php";

$page=$_GET['page'];

if (preg_match('/(http:\/\/|^\/|\.+?\/)/', $page)) echo "I'll h4x yuo!!1";

elseif (!empty($page))
{
if (file_exists("$directory/$page.$extension"))
include("$directory/$page.$extension");
else
echo "<h1>Error 404</h1>\n<p>Finner ikke siden!</p>\n";
}
else
?>

</body>

</html>

--SLUTT--
 

Helge

Profesjonell Googlesøker
--START--

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Hvalstad Data</title>
<link rel="shortcut icon" href="images/favicon.ico" />
<meta name="keywords" content="Hvalstad Data, HD, hd, hvalstaddata.no, hvalstaddata.com, Hvalstad" />
<meta name="description" content="Hvalstad Data driver med Web Hosting, Web Design, Programmering og mye mer." />

<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-6305556-7");
pageTracker._trackPageview();
} catch(err) {}
</script>

</head>

<body>


<table border="1">
<tr>
<td>
<div id="menu">
<?php include("menu.php"); ?>
</div>
</td>
<td>
<div id="content">
<?php
$IncDir = "inc_filer";
$Default = "hjem";
$Error = "404";
$page = $_GET['side'];
$page = strip_tags(stripslashes($page));

if($page == ""){
include("$IncDir/$Default.php");
}
elseif(file_exists("$IncDir/$page.php")){
include("$IncDir/$page.php");
}
else{
include("$IncDir/$Error.php");
}
?>
</div>
</td>
</table>

</body>

</html>

--SLUTT--


Det er linkene i menyen din som skal vise ?side=hjem

i meny php skriver du f.eks: <a href="?side=hjem">Hovedsiden</a>
 

halvors

New Member
Takk for hjelpen, det funker nå. men hvordan gir jeg ryktepoeng?

Men det er en ting som ikke virker, det er at når du går inn på siden (index.php) uten å skrive ?page=noe etter kommer det en feilmelding:

Notice: Undefined index: page in C:\Documents and Settings\Halvor\Skrivebord\hvalstaddata.no\index.php on line 51

Hvordan kan jeg fikse det?

Her er index.php fila.

--START--

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Hvalstad Data</title>
<link rel="shortcut icon" href="images/favicon.ico" />
<link rel="stylesheet" type="text/css" href="css/style.css" />
<meta name="keywords" content="Hvalstad Data, HD, hd, hvalstaddata.no, hvalstaddata.com, Hvalstad" />
<meta name="description" content="Hvalstad Data driver med Web Hosting, Web Design, Programmering og mye mer." />

<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-6305556-7");
pageTracker._trackPageview();
} catch(err) {}
</script>

</head>

<body>

<table border="0" align="center" cellpadding="5" cellspacing="0">
<tr>
<td>
</td>
<td valign="top">
<?php include("logo.php"); ?>
</td>
<td>
</td>
</tr>
<tr>
<td width="130" valign="top">
<?php include("menu.php"); ?>
</td>
<td width="700" valign="top">

<?php
include("user.php");

$default="home";
$directory="./";
$extension="php";

$page=$_GET['page'];

if(preg_match('/(http:\/\/|^\/|\.+?\/)/', $page))
{
echo "I'll h4x yuo!!1";
}
elseif(!empty($page))
{
if(file_exists("$directory/$page.$extension"))
{
include("$directory/$page.$extension");
}
else
{
echo "<h1>Error 404</h1>\n<p>Finner ikke siden!</p>\n";
}
}
else
{
include("$directory/$default.$extension");
}

?>

</td>
<td width="130" valign="top">
<?php include("info.php"); ?>
</td>
</tr>
</table>

</body>

</html>

--SLUTT--

Hilsen Halvor.
 

Helge

Profesjonell Googlesøker
Notice: Undefined index: page in C:\Documents and Settings\Halvor\Skrivebord\hvalstaddata.no\index.p hp on line 51


Der står vell feilen? du har mellomrom mellom p og hp

evt så har du ikke lagt inn at .php kan være indexfil på apacheoppsettet ditt? (siden det er C: så satser jeg på at det er lokalt apacheoppsett).

Scriptet skal fungere uansett siden det alltid inkluderer hjem.php som hovedside, og om den ikke finner noe skal du få 404 siden.

Ryktepoeng gir du ved å trykke på vekten opp til høyre i innlegget mitt :p
 

halvors

New Member
OK, har skjekket bekke deler men alt er som det skal. Jeg tror det må være noe feil med $_GET variablen, problemet oppstå kun første gang jeg går inn på index.php (men når jeg kilkker på eks. home i menyen forsvinner den).

Hva kan det komme av?

Og en annen ting, når jeg skriver localhost så vises ikke index.php i nettleseren, hvordan får jeg det til å vises?

Halvor.
 

halvors

New Member
Og en ting til, jeg her et problem ved at flere av mine hjemmesidefiler innneholder session_start(); Å da nor jeg bruker to filer sammen i index.php tableen så får jeg melding om at a session has allredy been started. Men jeg må ha det i content filene dersom disse skjekker om du er logget inn.

Har du noen ide om hvordan jeg fikser dette?

Kansje legge inn et php script i starten av hver fil som sjekker om session er starta, hvis ikke så sterter en den.

Noen eksempler på script?

Halvor.
 
U

Uregistrert

Guest
session_start(); skal kun brukes 1 gang. Et fint sted er heeelt på toppen av index.php, før alt annet.
 
Men det er en ting som ikke virker, det er at når du går inn på siden (index.php) uten å skrive ?page=noe etter kommer det en feilmelding:

Notice: Undefined index: page in C:\Documents and Settings\Halvor\Skrivebord\hvalstaddata.no\index.php on line 51

Hvordan kan jeg fikse det?

Din linje 51 er denne:

Kode:
$page=$_GET['page'];

Problemet er altså at scriptet gir deg feilmelding fordi $_GET[]-indeksen ikke er definert. Det kan du løse ved å sjekke om indeksen er definert først. Erstatt linje 51 med følgende snutt:

Kode:
if (isset($_GET) && isset($_GET['page'])) {
	$page = $_GET['page'];
}
else {
	$page = '';
}

Da bør ting virke.

(Grunnen til at du får dette problemet i ferdig kode er at dette ikke er en direkte feil i koden, men en «notice»: Koden virker, men den *kunne* ha vært bedre, og din server er innstilt til å gi deg slike feilmeldinger. Det betyr at du får feilmeldinger her selv om andre som kjører nøyaktig samme kode ikke nødvendigvis vil få det. Dersom du ikke ønsker å motta slike notiser, går det an å skru det av med en ekstra scriptlinje.)
 
Sist redigert:

halvors

New Member
OK, takk et virket. Men da er det bare det session start(); problemet mitt igjen.

Jeg må ha denne koden:

<?php
session_start();
if(!session_is_registered('myusername')){
header("Location: index.php");
}
?>

i starten av hver medlemmsfil, for at folk ikke bare skal skrive inn minnettside.no/members.php og så komme inn uten å være pålogget.

Åssen kan jeg fikse det?

Noen eksempler?

Halvor.
 
Innbiller meg at det bør funke helt fint dersom du endrer den der til

Kode:
<?php
if(!isset($_SESSION['myusername'])) {
header("Location: index.php");
}
?>

(... men jeg er ikke 100 % sikker, så test koden, ikke gå ut fra at den virker bare fordi jeg har sagt det.)
 
NB: Når du laster opp dette scriptet på en server (får inntrykk av at du kjører det lokalt nå), vil header()-parantesen din sannsynligvis slutte å virke. Location-header skal ha absolutt URL for å fungere.

Så du bør erstatte

header("Location: index.php");

med

header("Location: http://www.mitt-domene.no/index.php");
 
Topp