Willkommen in der Webstatt Zum Webstatt Blog und Stories
Remo1234 Remo1234 am 25.02.07 18:35

Hallo,
auf meiner Seite habe ich eine "active-funktion", welche durch verschiedene GETs jeweils eine Datei included, in welcher jeweils die verschiedenen Menüpunkte hervorgehoben sind. Ich hoffe man versteht das soweit :)

Nun will ich ein Script schreiben, welches je nach dem, was für eine Seite im content included wird, automatisch und ohne GET eine bestimmte datei im menü included.

das sind bis jett meine arrays für die Seiten:
<?php

$content = array(); //Includes für den Content
$content['news'] = "news.php";
$content['gbook'] = "gbook.php";
$content['gbook_insert'] = "gbook_insert.php";
$content['gbook_submit'] = "gbook_submit.php";

$header = array(); //Includes für den Header
$header['news_h'] = "news_h.php";
$header['gbook_h'] = "gbook_h.php";

$menu = array(); //Includes für das Menü
$menu['defau'] = "def.php";
$menu['profi'] = "profi.php";
$menu['about'] = "about.php";
$menu['gbook'] = "gbook.php";
$menu['galle'] = "galle.php";
$menu['links'] = "links.php";
$menu['impre'] = "impre.php";

?>


Wenn jetzt also "gbook", "gbook_insert" oder "gbook_submit"included wird soll automatisch auch die datei "gbook" ins menü included werden.


Wie mache ich das am besten? Ich denke mal sowas in der richtung, dass ich für jede Menüsektion ein array mache, in welche ich die dazugehörigen seiten schreibe.
Dann müsste irgendwie geprüft werden, wie das array heisst, in dem sich die aktive seite befindet.

Keine ahnung, ob das ein guter ansatz ist oder ob die gesamgte idee nicht leichter umzusetzen wäre. ich hoffe jedenfalls dass ihr das problem versteht :D :rolleyes:

Achja, included wird bis jetzt so:
if(isset($_GET['menu']) AND isset($menu[$_GET['menu']])) {
include "menu/".$menu[$_GET['menu']];
} else {
include "menu/".$menu['defau'];
}

netcup.de Warum gibt es hier Werbung?
nuit nuit am 25.02.07 19:09

du könntest es mit dem zugehörigem Key in eine Datenbank schreiben, dann lässt es sich leichter verwalten...aber ich versteh, aber sonst ist der Ansatz gut :Dich

mist...jetzt hab ich erst, den titel gelsen....arg ignorier den Post *g*
aber das mit DB und key ist nicht schlecht ;) da kannste, dann auch den Key für den Content speichern :D bzw. key für menu

Remo1234 Remo1234 am 25.02.07 22:10

Quote
Original von nuit
du könntest es mit dem zugehörigem Key in eine Datenbank schreiben, dann lässt es sich leichter verwalten...aber ich versteh, aber sonst ist der Ansatz gut :Dich

mist...jetzt hab ich erst, den titel gelsen....arg ignorier den Post *g*
aber das mit DB und key ist nicht schlecht ;) da kannste, dann auch den Key für den Content speichern :D bzw. key für menu

Ich versteh dich nicht :D Das "problem" ist wie ich es am besten umsetze, und wie meinst soll ich das in die db schreiben?

Kevz am 25.02.07 22:22

Mhh, die einzelnen Navigations Punkte in eine extra DB zu setzen - wäre wohl am Sinnvollsten und am einfachsten zu Verwalten bei Änderungen & co.

nuit nuit am 25.02.07 23:05

datenbank mit:

GETKEY | contentLink | menuLink |


das ist eigentlich alles, was ich gesagt hab :D

Remo1234 Remo1234 am 25.02.07 23:11

Mh, gute Idee

Wie mache ich nochmal am besten eine Abfrage, ob ein Eintrag in einer db vorhanden ist?!

nuit nuit am 25.02.07 23:19

http://de3.php.net/manual/de/function.mysql-num-rows.php

soas zum beispiel ;D

Remo1234 Remo1234 am 25.02.07 23:24

ist es allgemein besser, immer beim query durch eine variable wie in dem beispiel zu connecten oder kann ich den connect auch einfach am anfang des scripts ausführen?

nuit nuit am 25.02.07 23:28

also ich setz ein connect am anfang des scripts....kommt drauf an, ob man es öfters baucht :D aber dann muss man nicht immer connecten und closen ;)

Remo1234 Remo1234 am 26.02.07 14:15

Wie closed man denn?^^ Ist das notwendig?

der_nic der_nic am 26.02.07 16:05

mysql_close($id); <-- so vielleicht:D?

Remo1234 Remo1234 am 26.02.07 18:00

Quote
Original von der_nic
mysql_close($id); <-- so vielleicht:D?

Ja keine Ahnung^^, das php-tutorial hat mir das nicht beigebracht^^

Kevz am 26.02.07 20:01

Wäre es nicht vllt. noch von Vorteil, wenn er Sub Links einordnen kann? ;) Ich mein ja nur =)

Remo1234 Remo1234 am 26.02.07 23:33

Quote
Original von Kevz
Wäre es nicht vllt. noch von Vorteil, wenn er Sub Links einordnen kann? ;) Ich mein ja nur =)

Kapier ichmal wieder nicht^^


Neues problem:

Das ist meine index.php, in welche die drei verschiedenen Seiten (content, menü und header(kommt auch noch in die mysql-tabelle)) included werden sollen:
<?php
error_reporting(E_ALL);

include "inc/config.php";

if(get_magic_quotes_gpc()) {
array_stripslashes($_GET);
array_stripslashes($_POST);
array_stripslashes($_COOKIE);
}

include "inc/pages.php";
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>

<head>
<title>Helms heisse Homepage</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

<link rel="stylesheet" type="text/css" href="styles/style.css" />
<link rel="stylesheet" type="text/css" href="styles/gbook.css" />

<script type="text/javascript" src="scripts/scripts.js"></script>

</head>

<body>
<?php
include "header/".$row['headerlink'];
;?>

<p id="anmelden">
<a href="">Registrieren!</a>
</p>

<p id="suchen">SUCHEN</p>
<form action="" method="post">
<p id="gosearch">
<input type="text" name="search" id="searchtext" />
<a href="#" id="searchsubmit" onclick='senden()'>Go Search!</a>
</p>
</form>

<div id="content">
<form action="" method="post">
<p id="loginbg">
Benutzername:<input type="text" name="user" class="login" />
Passwort:<input type="password" name="pass" class="login" />
<input type="image" src="img/content/form/empty_submit.gif" id="loginsubmit" />
</p>
</form>
<div id="contentbg">
<div id="contentbox">
<?php
include "content/".$row['contentlink'];
;?>

</div>
</div>
</div>

<?php
include "menu/".$row['menulink'];
;?>

<p style="clear: left;"></p>

</body>

</html>

Durch die "pages.php" wird das (nichtfertige) Script für die Seiten in die "index.php" included. Dieses sieht bis jetzt so aus:
<?php
if(isset($_GET['section'])) {
@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Es konnte keine Verbindung aufgebaut werden./n Fehler:".mysql_error());
mysql_select_db(MYSQL_BASE) OR die("Datenbank nicht gefunden. Fehler: ".mysql_error());

sql = "SELECT
contentlink,
menulink,
headerlink
FROM
pages
WHERE
getvariable = '".$_GET['section']."'";
$result = mysql_query($sql) OR die(mysql_error());
$num_rows = mysql_num_rows($result);
$row = mysql_fetch_assoc($result);

} else {
include "menu/".$menu['defau'];
}
?>
(das else noch nicht beachten, dies habe ich noch nicht angeglichen, denn es ist bestandteil meiner jetzigen Frage:)


Das Script muss also irgendwie so umgeformt/konzipiert werden, dass es möglich ist, an den 3 Stellen wo die includes in der index.php stehen eine alternative Datei zu includen, falls das GET_[section] nicht übergeben wurde. Ausserdem muss mithilfe des "$num_rows = mysql_num_rows($result);" eine weitere Bedingung geschaffen werde, welche alternative dateien included, falss der Datensatz nicht in der db vorhanden ist.


Ich hoffe das ist zu verstehen :O :D

Kevz am 27.02.07 20:56

schonmal mit switch versucht?, dort kannst es leichter handhaben mit default ;)

Remo1234 Remo1234 am 02.03.07 16:01

Quote
Original von Kevz
schonmal mit switch versucht?, dort kannst es leichter handhaben mit default ;)


Wo genau meinst du was mit switch zu versuchen ist?

Edit: Ahh, bei den includes?

Mhh aber wie genau?!

Edit: Mit switch hab ich den Sinn nicht ganz verstaden wiso ich es einsetzen könnte, villeicht erläutersts mir nochmal jemand.

Hab nun das hier:

<?php
error_reporting(E_ALL);

include "inc/config.php";

if(get_magic_quotes_gpc()) {
array_stripslashes($_GET);
array_stripslashes($_POST);
array_stripslashes($_COOKIE);
}

@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Es konnte keine Verbindung aufgebaut werden./n Fehler:".mysql_error());
mysql_select_db(MYSQL_BASE) OR die("Datenbank nicht gefunden. Fehler: ".mysql_error());

$sql = "SELECT
contentlink,
menuelink,
headerlink
FROM
pages
WHERE
getvariable = '".$_GET['section']."'";
$result = mysql_query($sql) OR die(mysql_error());
$num_rows = mysql_num_rows($result);
$row = mysql_fetch_assoc($result);
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>

<head>
<title>Helms heisse Homepage</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

<link rel="stylesheet" type="text/css" href="styles/style.css" />
<link rel="stylesheet" type="text/css" href="styles/gbook.css" />

<script type="text/javascript" src="scripts/scripts.js"></script>

</head>

<body>
<?php
if($num_rows == true) {
include "header/".$row['headerlink'];
} else {
include "header/news_h.php";
}
;?>

<p id="anmelden">
<a href="">Registrieren!</a>
</p>

<p id="suchen">SUCHEN</p>
<form action="" method="post">
<p id="gosearch">
<input type="text" name="search" id="searchtext" />
<a href="#" id="searchsubmit" onclick='senden()'>Go Search!</a>
</p>
</form>

<div id="content">
<form action="" method="post">
<p id="loginbg">
Benutzername:<input type="text" name="user" class="login" />
Passwort:<input type="password" name="pass" class="login" />
<input type="image" src="img/content/form/empty_submit.gif" id="loginsubmit" />
</p>
</form>
<div id="contentbg">
<div id="contentbox">
<?php
if($num_rows == true) {
include "content/".$row['contentlink'];
} else {
include "errors/content404.php";
}
;?>

</div>
</div>
</div>

<?php
if($num_rows == true) {
include "menu/".$row['menuelink'];
} else {
include "menu/def.php";
}
;?>

<p style="clear: left;"></p>

</body>

</html>


Fehlt immernoch die Abfrage ob $_GET['section'] gesetzt ist. wie mache ich das nun am besten?!

Remo1234 Remo1234 am 04.03.07 18:17

*push*

mab mab am 04.03.07 23:27

Hallo,

auch wenn ich das nicht in die datenbank schreiben würde, hier mal ein kleiner ansatz.

erst einmal würde ich versuchen ein bisschen ordnung reinzubrinden, d.h. den ganzen code so gut wie möglich schon vor dem html code anbringen.


ich geh mal davon aus, es sollte so funktionieren. bei einem klick auf einen link im menü wird der entsprechende content und header geladen. hinterlegen möchtest du nur den pfad zu den dateien.

die tabelle sieht so aus:

id | name | header | content | menu | error

id = fortlaufend
name = link name (brauchst du ja um inhalt zu laden)
header = pfad zum header file (warum auch immer)
content = pfaf zum content file

macht es sinn den pfad der dateien so zu hinterlegen und den include der error files trotzdem direkt in die index.php zu schreiben?? naja egal..

so, an irgendeiner stelle hast du ja die hauptnavigation, mit der du den content laden möchtest.

hier in etwa die ausgabe der haupt navigation

for($i....){

hier navi aus geben

zum verlinken nimmst du die id aus der tabelle, z.B.

<a href='index.php?link= $result['id']'> Link Name 1 </>

}

Klick jetzt jemand auf den Link, d.h.

if(isset($link)){

jetzt neuer query, der nur den inhalt holt

SELECT .... FROM table WHERE id = $_GET['link'];

}

in dem array hast du dann einen eintrag mit dem pfad zum content etc.

$content_path = $result['content'];
$header_path = $result['header'];

das war jetzt fast alles oben definiert..in dem template selbst musst du nur noch include. is schon ne halbe anleitung, damit kommst bestimmt klar ;)

Remo1234 Remo1234 am 04.03.07 23:57

Mh ich versteh das nicht ganz, aber du verstehst mein prob glaub ich auch nicht ganz. Also nochmal von anfang an.


Meine Page ist diese: http://t-sdesign.de/preview/helmpage/

Es gibt drei Sachen, die zu includen sind.

1. Den Header, da sich darin eine Subnavi befindet.
2. Das Menü, da sich je nach "aufenthaltsort" ein anderer Menüpunkt hervorheben soll.
3. Den Content.


Die 6 Menüpunkte sind festgelegt. Bei einem klick darauf kommt man jeweils auf die Startseiten der 6 Punkte. Also hat jeder Menüpunkt einen solchen Link: index.php?section=gbook

Gleichzeitig wird im Menü eine andere Datei geladen, welche einen anderen Menüpunkt hervorhebt.

Ausserdem wird der Header mit der Subnavi geladen. Die Links darin sehen dann genauso aus wie im normalen Menü, nur dass sie andere Seiten aufrufen: zB. index.php?section=gbook_insert


Also baut sich die Mysqul tabelle wie folgt auf:

| Section fürs $_GET | Menulink | Contentlink | Headerlink |


Mein Script soll also:

1. Prüfen, ob eine Section übergeben wurde. Falls nicht -> Starseite, Startmenü, Startheader öffnen.

2. Prüfen, ob eine übergebene Section in der DB vorhanden ist. Falss nicht -> Errorseite, Startmenü, Startheader öffnen.

3. Wenn eine Section übergeben wurde und die Section in der DB vorhanden ist, so soll an den 3 verschiedenen Stellen (siehe letzter Post) jeweils der zugehörige Contentlink, Headerlink und Menulink included werden. Ist einer dieser Links ungültig, so soll an der betroffenen Stelle eine Errorseite included werden.


Versteht man das?! :D Wenn nicht nochmal nachfragen, brauche nun dringend eine Lösung :rolleyes:

mab mab am 05.03.07 17:37

damit gibtst du dir ja im grunde selbst die antwort. ich versteht immer noch nicht für was denn die datenbank, das ist doch der bloße overkill. oder hast du vor damit ne user statisitik aufzustellen.. .?naja egal.

1.)
if(!isset($_GET['section'])) {
$section = $_GET['section'];
include startseite, header, content
}
else {

siehe 2.)
}


wenn du schon prüfen möchtest ob die "section" in der datenbank ist, dann würd ich auch die seiten aus der datenbank ausgeben, ansonsten in etwa so..


2.)
$query = "SELECT section FROM table WHERE section ='". $section."' ";
$result = mysql_query($query);

if(mysql_num_rows($result)==1){

$include = $result['section'];
} else {

Errorseite, Startmenü, Startheader öffnen.

}


die lösung hast du doch schon oder? pass den code an und gut is ;)

gruß, mab

Remo1234 Remo1234 am 06.03.07 14:47

Ja, das ist mir klar, das hab ich auch schon, Problem ist, wie ich das am elegantesten hier

<?php
error_reporting(E_ALL);

include "inc/config.php";

if(get_magic_quotes_gpc()) {
array_stripslashes($_GET);
array_stripslashes($_POST);
array_stripslashes($_COOKIE);
}

@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Es konnte keine Verbindung aufgebaut werden./n Fehler:".mysql_error());
mysql_select_db(MYSQL_BASE) OR die("Datenbank nicht gefunden. Fehler: ".mysql_error());

$sql = "SELECT
contentlink,
menuelink,
headerlink
FROM
pages
WHERE
getvariable = '".$_GET['section']."'";
$result = mysql_query($sql) OR die(mysql_error());
$num_rows = mysql_num_rows($result);
$row = mysql_fetch_assoc($result);
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>

<head>
<title>Helms heisse Homepage</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

<link rel="stylesheet" type="text/css" href="styles/style.css" />
<link rel="stylesheet" type="text/css" href="styles/gbook.css" />

<script type="text/javascript" src="scripts/scripts.js"></script>

</head>

<body>
<?php
if($num_rows == true) {
include "header/".$row['headerlink'];
} else {
include "header/news_h.php";
}
;?>

<p id="anmelden">
<a href="">Registrieren!</a>
</p>

<p id="suchen">SUCHEN</p>
<form action="" method="post">
<p id="gosearch">
<input type="text" name="search" id="searchtext" />
<a href="#" id="searchsubmit" onclick='senden()'>Go Search!</a>
</p>
</form>

<div id="content">
<form action="" method="post">
<p id="loginbg">
Benutzername:<input type="text" name="user" class="login" />
Passwort:<input type="password" name="pass" class="login" />
<input type="image" src="img/content/form/empty_submit.gif" id="loginsubmit" />
</p>
</form>
<div id="contentbg">
<div id="contentbox">
<?php
if($num_rows == true) {
include "content/".$row['contentlink'];
} else {
include "errors/content404.php";
}
;?>

</div>
</div>
</div>

<?php
if($num_rows == true) {
include "menu/".$row['menuelink'];
} else {
include "menu/def.php";
}
;?>

<p style="clear: left;"></p>

</body>

</html>

einbaue. die verschiedenen Dateien müssen ja an 3 stellen included werden, und da ist mein problem, wie ich das hinbekomme, wenn ich vorher noch eine isset($_GET...) abfrage mache, die dann an den 3 stellen eine default datei included... mit ellenlangen echos, wo der ganze html code drin steht wärs kein porblem, aber gibts nicht noch ne bessere kurze variante?!

Edit: achja, nochwas ist komisch: in dem code oben wird das $row['menuelink'] ganz unten nicht von der tabelle ausgegeben (ohne fehlermeldung). mache ich es weiter nach oben im code klappt es... woran liegt dsa?

Remo1234 Remo1234 am 07.03.07 20:13

push

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt