Websitenaufbau mit PHP

Hallo,
ich wollte meine Website neu aufbauen und hatte mir da volgendes überlegt, dass wenn jemand auf meine Seite geht er auf die Index.php wie es jeder Standart Webserver tut kommt!
Die Startseite soll nun auf 3 Einzelteile aufbauen! Der erste Teil enthält das Menü und den Wilkommenstext!Der zweite Teil enthält Texte und Erneuerungen!
Im dritten stehn dann Angaben zum Seiteninhaber…!Teil eins stellt den header dar un Teil drei die Fußzeile! Nun will ich wenn man im Menü jetzt z.b. Videos anklickt man trotzdem in dem Script bleibt und sich nur der Bereich des zweite Teils ändert! Statisch habe ich dies im Moment mit include gelöst sobald ich aber in die dynamische Phase will komme ich nicht mehr weiter! Habe gegoogelt aber nichts gefunden was mir weiter helfen würde. Ich habe mal auf einer Website das gleiche gesehen, die haben es mit „domain.de/index.php?video“ gelöst.
Genauso hatte ich mir das auch vorgestellt!
Bitte hellft mir weiter…
Gruß Bastian D.

Mit einem Aufruf domain.de/index.php?video
wird die index.php mit dem Parameter video aufgerufen.
In der index.php kannst Du dann mit dem Parameter eine andere Entscheidung (durchlafen eines andern Codes) eine andere ausgabe erzeugen.
Grund Kurs PHP.
MfG
uwe

Hallo Bastian,

das was du suchst wird von den meisten „Webframeworks“ dir abgenommen. Da deine Seite jetzt aber nicht so groß scheint würde ich eher auf ein Microframework zurück greifen.

Schau dir mal die Dokumentation auf der Seite an:
http://www.slimframework.com/

Um einen schnellen Einstieg in Slim zu bekommen, kannst du dieses Tutorial mal durch arbeiten.

http://net.tutsplus.com/tutorials/php/rapid-applicat…

Viele Grüße
Frank

Hallo ukk,
danke für deine Antowrt!Mein Problem liegt eher beim schreiben des Codes vom Verstehen her für was ich dies gut ist war ich schon! Könntest du mir da ein Beispiel zeigen?

MFG
Bastian D.

Hallo,

ganz simples Beispiel:

readfile("header.html");

if( isset($\_GET['site']) ) $site = intval($\_GET['site']) );
else $site = 0;

switch($site)
{
 case 2: readfile("seite2.html"); break;
 case 1: readfile("seite1.html"); break;
 default: readfile("start.html");
}

readfile("footer.html");

Dieses Beispiel ist nicht für den Produktiveinsatz gedacht, aber es zeigt dir hoffentlich auf, wie so etwas funktionieren könnte. Du musst dann noch Fehlerchecks ergänzen, verhindern dass die Dateien direkt geladen werden usw…
Wenn du lieber „sprechende“ Namen haben willst, wie „index.php?site=seite1“, musst du statt intval etwas anderes nehmen um auf gültige Werte zu prüfen. Du könntest beispielsweise die switch-cases entsprechend umbauen.

Bitte keinesfalls sowas machen:

readfile($\_GET['site'].".html"); // NICHT machen!!

Damit würdest du jedermann erlauben, viel zu viele Dateien deines Servers zu lesen, was es Angreifern sehr einfach machen kann, in den Server einzubrechen…

Wie jemand anderes schon schrieb: Ein Framework nimmt dir diese Arbeit ab und macht es in der Regel sehr viel eleganter als das Beispiel von mir. Man muss sich zwar in das gewählte Framework einarbeiten, das ist aber meistens lohnend.
Frameworks bringen üblicherweise auch eine .htaccess mit, die die Adressen schöner macht. Also statt „index.php?site=seite1“ vielleicht „seite1.php“…

Viel Erfolg beim Lernen!

Grüße,

frozen

Hallo Casparjones,
danke für deine Antwort! Ich habe mir das mal alles mal durchgelesen! Coole Sache aber glaub nicht das was ich suche! Ich habe ein paar Seiten mit einem WebEditor aufgebaut die ich jetzt mit dem PHP Script einzelnd aufrufen will. Die Header.php und die fußzeilen.php sollen immer gleich bleiben und nur die xx.php die sich hier in der Mitte befindet soll sich je nach eingegebenem Parameter angezeit werden!
Früher habe ich dies mit Frames gelöst gehabt was mir aber dann zu unflexsibel war! Was ich nun suche ist ein Beispiel Code an dem ich mich orientieren kann!
MFG
Bastian D.

PS: Hier mal ein kleiner Einblick wie das im Moment statisch aussieht: http://jabadu.dyndns.ws

Hallo frozen,
danke das hilft mir sehr.
Ja so hatte ich mir das auch vorgestellt werde auf deinen Rat hin noch etwas dran feilen für mehr Sicherheit!
Wenn ich jetzt das so wie hier machen würde

readfile($\_GET['site'].".html"); // NICHT machen!!

könnte man jede Datei in dem Ordner mit der endung .html aufrufen?! Hab ich das so richtig verstanden

Gruß
Bastian

Hi,
schau mal hier:
http://www.selfphp.de/forum/showthread.php?t=14699

Wenn du damit nicht klar kommst, melde dich wieder.

Viel Erfolg.

Hallo Bastian,

ja, mindestens… Aber auch jede Datei mit der Endung .html innerhalb oder außerhalb des Ordners (sofern PHP sie lesen kann). Und bestimmt gibt es auch Mittel und Wege das .html abzuschneiden, so daß jede beliebige Datei eingebunden werden kann, die PHP lesen kann.

Darüber hinaus können bei entsprechender Konfiguration (die meistens aktiv ist) beliebige URLs eingebunden werden, beispielsweise um auf jedem PC, der die Seite lädt, Trojaner zu installieren bzw. es zumindest zu versuchen.

Es ist eigentlich ganz einfach: Vertraue NIE den Daten, die irgendwer manipulieren kann (also $_GET, $_POST, $_SESSION, Cookies usw.). Wenn du keine Idee hast, wie du in einem bestimmten Fall auf einen gültigen Wert prüfen kannst, mach es anders.

Deshalb habe ich in meinem Beispiel intval verwendet. Diese Funktion arbeitet recht zuverlässig und reduziert einen String auf einen int-Wert. Beispiele wie die Funktion sich verhält findest du in der Doku zu php. Sie macht nicht immer ganz genau das, was man vielleicht erwartet hat (Hex-Zahlen oder Oktal-Zahlen können einen ganz schön verwirren, wenn man sie nicht kennt…), aber das Ergebnis ist immer eine Zahl.

Viele Grüße,

frozen

Hallo,

wenn Du teile einer Seite dynamisch auswechseln möchtest, dann solltest Du dich mit Ajax beschäftigen, da kann man teile einer Seite ändern, während die anderen Teile unverändert bleiben.

Mit Ajax habe ich mich bisher noch nicht beschäftigt, daher kann ich dir hier leider nicht helfen.

Hallo Bastian,

Warum willst du alles über eigene php Dateien lösen? Über das Routing kannst du alles über die index.php laufen lassen und hast alles schön aufgeräumt.

Dann doch lieber einzelne Controller Anlegen und darin die Action definieren.
Ich hab mal eine Skeleton App auf Basis von Slim Programmiert, die zeigt wie ich das meine:

https://github.com/casparjones/slim-skeleton

Dort wird über die im layout Ordner hinterlegte Struktur ein Header und ein Footer includiert, die immer gleich aussehen. Und der Content kommt von den darüber liegenden templates. Das zusammen stückeln geschiet in der Base-Classe von der jeder Controller erbt.

Das Ergebniss kannst du dir hier anschauen:
http://slim-test.urks.org/

Noch eine simple Möglichkeit unabhängig von Slim:
Einfacher wäre einfach eine layout.php datei zu machen, in der du oben den header includierst und unten den footer und in der mitte füllst du den content immer über eine variable.

z,B.

<?php include('header.php');
echo $content; include('footer.php'); ?\> Im aufrufenden PHP Datei befüllt dann die Content Variable und includiert dann das layout.php <?php $content = "Hallo Welt";
include('layout.php'); ?\> Viele Grüße Frank
1 Like

Hallo Bastian,

dein Problem hast du eig. ja schon zum Teil gelöst :wink:
wenn du dir die URL „domain.de/index.php?video“ anschaust,
so ist „video“ die $_GET Variable $_GET[‚video‘]. Du könntest jetzt per file_exist (und natürlich addslashes) nachprüfen ob eine solche Datei existiert.
Bsp.:

if(!isset($\_GET['video']))
 include('home.php');
elseif(isset($\_GET['video']))
 include('video.php');

Wobei du dann jedes mal für jede Seite deinen Code erweitern müsstet. Schau dich online mal um, und schau dir das Prinzip eines Content Management Systems mal an. Vlt kommst du damit etwas weiter :wink:

LG
Chris

Hier ein Beispiel.
Die Zeilen mit //!!! müssen geändert werden.
MfG
Uwe

<?php // Initialiserung globaler Variablen
$server= "localhost"; $http\_loc="localhost/htacces/"; //!!!!!! $status="start"; if(isset($\_SERVER['PATH\_INFO'])) { $PATH\_INFO=$\_SERVER['PATH\_INFO']; $vardata = explode('/', $PATH\_INFO); $num\_param = count($vardata); if($num\_param % 2 == 0) { $vardata[] = ''; $num\_param++; } for($i = 1; $i { $$vardata[$i] = $vardata[$i+1]; } unset ($PATH\_INFO); } // Defaults --\> Startseite ?\> <?php echo"\n\n"; echo "\n"; echo "\n"; echo "Test ??\n";//!!!!!! ?\> <?php include_once "./include/anpassen.inc"; //!!!!!!
echo"\n".$temp."\n"; switch ($status) { case 'start': echo "Start Möglicheit"; echo ' [Start](org_index.php/status/start)'; echo ' [zweite](org_index.php/status/zweite) '; break; case 'zweite': echo "Zweite Möglicheit"; echo ' [Start](org_index.php/status/start) '; echo ' [zweite](org_index.php/status/zweite) '; break; } ?\>

Hallo,
danke für die Mühe mir das näher zu bringen!
Deine Test-Hompage sieht echt cool aus und ich muss zugeben das finde ich wirklich besser als das was ich vorhatte!
Werde mich gleich mal dransetzen :smile: !
Eine Frage hab ich trotzdem noch und zwar hast du das Design mit CSS umgesetzt?!
MFG
Bastian D.

Hey Bastian,

ich hab dafür bootstrap genutzt:
http://twitter.github.com/bootstrap/

Da hast du alles schon fertig und super um mal „schnell“ eine neue Seite aufzubauen. :smile: Wird auch von den großen allen genutzt. Initalisiert wurde es ja von twitter, mittlerweile wird es von github und co auch genommen.

Wir können uns ja gerne mal vernetzen, dann kann ich dir vielleicht einfacher helfen, wenn du magst.

Schreib mich einfach mal an…

Viele Grüße
Frank

Hallo,

zuerst zum Verständnis: http ist ein zustandsloses Protokoll, d.h. wenn die etwas vom Server geladen hast wir die Verbindung abgebaut und der Server weiß nichts mehr vom Client (=Browser). Es gibt zwar Möglichkeiten, wie serverseitig Sessions oder cientseitig Cookies, um was zu merken, auch Ajax muß hier erwähnt werden, ist aber letztlich nur eine Aneinanderreihung dieses zustandslosen Datenaustauschs.

Damit will ich sagen, dass dein Wunsch „man trotzdem in dem Script bleibt“ nicht realisieren läßt, da das PHP-Script nach der Datenübertragung i.d. Regel beendet wird bzw meist nach 30 Sekunden abgebrochen.

Auch wenn manche sagen, Frames sind Out, so wäre, wenn du nicht immer die komplette Seite sondern nur Teile neu laden willst, ein Frameset durchaus ein Weg. Du kannst auch cientseitig zusätzlich mit Java-Script arbeiten, also eine andersartige Aufteilung mit html machen und in Richtung Ajax die einzelnen Abteilungen über Java-Script nachladen. Ist aber aufwändiger und in Grundprinzip doch wie mit Frames.

Ich gehe mal davon aus, das du weißt, wie man benannte, fremde Frames läd.

Das mit dem dass alle Seiten über eine PHP-Datei aufgerufen werden ist so gelöst, das index.php einen Get-Parameter (hier „video“) erhält und dann eine andere Seite läd. Am einfachstes in es, in der index.php nur ein switch je nach Get-Parameter zu machen und dorthin mit include die „richtigen“ Dateien,die in einem für hhtp nicht zugänglichen Verzeichnis liegen sollten, ausgegeben werden kann.

Falls noch Fragen sind, melde dich.

Grüße
Tom

Hi Bastian D.

es führen viele Wege zur Lösung deines Problemes.

einfachste ist mittels GET die eine Variable übergeben

domain.de/index.php?file=video

oder

grundsätzlich alle Seiten auf eine PHP Datei umleiten

.htaccess (erstellen mit diesem Inhalt)

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([a-z^/]+).php$ /verteiler.php?file=$1 [QSA,L]
RewriteRule ^([a-z^/]+).html$ /verteiler.php?file=$1 [QSA,L]

die Datei verteiler.php include nacheinander das Menu den Inhalt $_GET(‚file‘) und das Impressum

der unterschied ist nur das im oberen beispiel
domain.de/index.php?file=video
domain.de/index.php?file=privat
domain.de/index.php?file=links
übergeben wird
im unteren beispiel jedoch
domain.de/video.html (oder video.php)
domain.de/privat.html (oder privat.php)
domain.de/links.html (oder links.php)

Cu Stefan

Hallo Bastian,

das löst sich nicht mit PHP. Was Du benötigst, ist HTML und CSS.

Dass bei der EIngabe der Domain die index.php kommt ist eine Einsctellung des Webservers (z.B. Apache). In der Regel ist es so,m dass erst nach einer index.html, dann nach einer index.htm und dann nach einer index.php gesucht wird. Welche Dateinamen er genau sucht kann man festlegen, aber eventuell bietet dein Provider das nicht als einstellbare Option an.

WENN eine PHP-Seite aufgerufen wird, kannst Du da drin normalen HTML-Code oder PHP-Code haben. Der PHP-Code selbst macht kein Menü. Er kann (wenn er richtig programmiert ist) HTML-Befehle ausgeben die dann vom Browser des Benutzers zu einem Menü zusammengefügt werden. PHP ist eine Serverseitige Programmierung. Das heisst: Der Browser des Benutzers bekommt den Code NIE zu sehen. Der Code wird noch vor der Auslieferung an den Benutzer auf dem Webserver ausgeschnitten, abgearbeitet und die Ergebnisse werden eingefügt.

Beispiel gefällig?
Auf dem Server liegt die index.php und sieht wie folgt aus:

<?php echo 'Hallo Welt';<br /> $datum = date("d.m.Y",$timestamp);
 $uhrzeit = date("H:i",$timestamp);
 echo $datum . " - " . $uhrzeit . " Uhr";
?\> 

Am Browser des Benutzers kommt an folgendes an:

 Hallo Welt - 01.03.2013 - 13:05 Uhr 

Also keine Spur mehr von PHP.

Du möchtest zwei statische Seitenelemente (Header und Footer) sowie ein dynamisches Element. Ich regle sowas immer mit DIVs. Viele schöne Beispiele für Seitenaufteilungen gibts bei Stu Nichols:

http://www.cssplay.co.uk/layouts/

Die kannst Du als Vorlage nehmen um mit HTML und CSS dein Seitengerüst zu bauen. Mit PHP dann das „dynamische“ Element zu füllen benötigt dann wirklich PHP programmierung:

Aus „domain.de/index.php?page=video“ kann man dann mehr machen.

Beispiel:
„page=video“ bettet ein Youtube-Video ein, wenn nicht angegeben wird erscheint eine Willkommensnachricht.

<?php if ($_POST['page']=='video') {<br /> echo '<iframe width="560" height="315"></iframe>src="http://www.youtube.com/embed/IJNR2EpS0jw" 
frameborder="0" allowfullscreen\>';
}

if ($\_POST['page']=='') {
 echo 'Willkommen auf der Seite, Sie haben keine Option geklickt.';
}

?\>

„Mal schnell“ ist das nicht gemacht, man sollte dazu schon HTML, CSS und PHP programmieren können oder sich die Zeit nehmen sich hier einzufuchsen.

Oder Du installierst auf deinem Webspace ein CMS (Content Management System) wie Drupal, Typo3 etc., dann musst Du dich nicht um die Programmierung kümmern, sondern nur um die Inhalte.

Viele Grüße,
Markus

hi,

so richtig kann ich nicht erkennen, was du vorhast.

domain.de/index.php?video

hier wird ein parameter (video) an die index.php geliefert, der dann entsprechend verarbeitet wird.

cu
harald
*****************

Hallo Bastian

Ich mache meine Webseiten Macromedia Dreamweaver. Ist zwar nicht Gratis, aber ist genau für deinen Zweck zugeschnitten. Man kann Elemente gestalten die für alle Seiten gelten, eben zB Menu oder Kopf und Fuss. Genau wie in der von dir erwähnten Webseite. Klar kann man das auch „zu Fuss“ mit PHP programmieren, ist auch nicht aufwändig aber sicher nicht so elegant. Sicherlich gibt es noch andere Tools die das Selbe können, kenne ich aber nicht da ich versorgt bin.

Ich hoffe, ich konnte dir was helfen. Sonst melde dich wieder.
Gruss Peter