PHP Dynamischer Seitenaufbau, bei Klick auf Link

lordg2009

Lt. Commander
Registriert
Apr. 2009
Beiträge
1.552
Hallo

Ich bin relativ neu im webdesign. Habe mich ein wenig mit html, php, css und perl beschäftig.
Zu meiner Frage:

Eine html Seite mit frames aufzubauen gilt heutzutage nicht mehr als lege artis. Jedes mal den ganzen statischen Teil (Header, Navigation, footer, usw) in ein neues html-Dokument zu kopieren scheint auch zu umständlich. Dazu kommt noch, dass man mittels CSS3 eigentlich sehr bequem einzelne Objekte, durch Klassen hervorheben kann.

Gibt es eine Möglichkeit, bei Klick auf einen Link, kein neues html-Dokument anzusteuern, sondern php einen Parameter zu übergeben, der einen Teil der Seite nun ander lädt?

Vielen Dank für eure Hilfe
 
Hi,

Gibt es eine Möglichkeit, bei Klick auf einen Link, kein neues html-Dokument anzusteuern, sondern php einen Parameter zu übergeben, der einen Teil der Seite nun ander lädt?

wenn ich dein Anliegen richtig verstehe sollten dir die Stichworte "JavaScript" und "AJAX" weiterhelfen.

VG,
Mad
 
<a href="deine_seite.php?id1=layer1&id2=layer56&username=Hans>Link</a>
Dann wird die Seite neu aufgerufen und du kannst die Variablen abrufen.
 
Na ich hätte mir das so gdacht:

Wenn ich hier in einem Forum den aktuellen Thread anschaue, steht in der URL hinter .php ein Fragezeichen und noch eine Art Wertzuweisung:
Code:
.php?p=14920413&noquote=1

Ich denke die beiden Parameter 'p' und 'noquote' werden an php übergeben und ausgewertet.

Ein Beispiel:

Nach meinem jetzigen Kentnisstand:
Hauptseite: index.php
Zweitseite: impressum.php

Zwei verschiedene Seite, zwei mal das gleiche Dokument

Was ich mir vorstelle:
Hauptseite: index.php
Zweitseite: index.php?p=impressum

PHP wertet diesen Parameter am Anfang des Dokuments aus, wenn es z.B. zu dem Abschnitt 'content' kommt, baue ich mit php eine if-else-Verzwegung ein und je nach Wert wird eine anderer Inhalt geladen, die Hauptteile des Dokumentes stehen jedoch immer im gleichen Dokument.
Ergänzung ()

@Suxxess:
Ahh, genau das meine ich, wie kann ich die Variablen mit php abrufen?
Ergänzung ()

@LiebernetterFlo

JavaScript wollte ich nicht nutzen, weil ich ja dann schon den gesamten Inhalt am Anfang laden muss, den Content jedoch dynamisch nachladen wollte (Es sei denn mit Ajax, aber da habe ich gar keinen Plan) ;)
 
Ich arbeite so ähnlich wie du es vorhast und verwende die GET-Variante. Habe eine index.php, die folgende Aufrufe tätigt:

Code:
<?php

include ("header.php");
$id = $_GET['id'];
if(empty($id))
{
include "content.php";
}
else
{
include $_GET['id'];
}
include ("footer.php");

?>

Es wird also ein header geladen, der die Logos, Navi etc. enthält. Dann wird geprüft, ob eine id übermittelt wurde. Wenn nicht, wird standardmässig die content.php geladen. Danach kommt der Footer, sofern benötigt.
Um die Seite nun dynamisch zu gestalten rufst du deine Links z.B. mit
Code:
<a href="index.php?id=impressum.php">Impressum</a>
auf.

Wäre jetzt mal mein Vorschlag^^

LG
 
Hey, das sieht gut aus.

Jetzt nur noch 2 Kleinigkeiten:

1) Wird die Datei, die über include eingebunden wurde sofort an Ort und Stelle abgearbeitet?

2) Kurz zum Aufbau einer URL (korrigiert mich, wenn ich falsch liege):
'?' Das Fragezeichen steht anscheinend für das Ende der URL und den Beginn eines Parameterteils
'&' Das Kaufmännische Und wird anscheinend für das Übergeben mehrerer Paramter genutzt
'#' Die Funktion der Raute kann ich mir nicht erklären, oder handelt es sich hier um den simplen Sprung zu einem Anker im html Dokument?
 
1.) Ja wird sofort in der Reihenfolge abgearbeitet in der du sie einbindest, bedeutet also du kannst dort im header deine komplette HTML-Struktur bereits hinterlegen. Meist öffne ich dort ganz zum Schluss einen DIV-Container für den Content, welchen ich dann erst im Footer wieder schliesse. Somit lässt sich von vornherein der Bereich in dem der Content später mal stehen soll direkt festlegen.

2.) Korrekt
 
lordg2009 schrieb:
Hey, das sieht gut aus.

Jetzt nur noch 2 Kleinigkeiten:

1) Wird die Datei, die über include eingebunden wurde sofort an Ort und Stelle abgearbeitet?

2) Kurz zum Aufbau einer URL (korrigiert mich, wenn ich falsch liege):
'?' Das Fragezeichen steht anscheinend für das Ende der URL und den Beginn eines Parameterteils
'&' Das Kaufmännische Und wird anscheinend für das Übergeben mehrerer Paramter genutzt
'#' Die Funktion der Raute kann ich mir nicht erklären, oder handelt es sich hier um den simplen Sprung zu einem Anker im html Dokument?
1) Die Datei wird immer dann verarbeitet wenn sie abgerufen wird.
2) Alle drei korrekt, die Ankerangabe wird aber beizeiten auch von Javascript ausgelesen und zur Angabe des (dann via AJAX zu ladenden) Inhalts verwendet.

 
ForestKoepp schrieb:
Ich arbeite so ähnlich wie du es vorhast und verwende die GET-Variante. Habe eine index.php, die folgende Aufrufe tätigt:

Code:
<?php

include ("header.php");
$id = $_GET['id'];
if(empty($id))
{
include "content.php";
}
else
{
include $_GET['id'];
}
include ("footer.php");

?>

Es wird also ein header geladen, der die Logos, Navi etc. enthält. Dann wird geprüft, ob eine id übermittelt wurde. Wenn nicht, wird standardmässig die content.php geladen. Danach kommt der Footer, sofern benötigt.
Um die Seite nun dynamisch zu gestalten rufst du deine Links z.B. mit
Code:
<a href="index.php?id=impressum.php">Impressum</a>
auf.

Wäre jetzt mal mein Vorschlag^^

LG

Das sieht soweit gut aus, aber wenn der Code so wie hier direkt verwendet, kann die URL ganz einfach verwendet werden um auf jede Datei des Servers zuzugreifen! Besser überprüfen:
Code:
<?php

include ("header.php");
$id = $_GET['id'];
if(empty($id))
{
  include "content.php";
}
else
{
  include "/pages/". str_ireplace("\\", "", str_ireplace("/" , "" , $id)) ." .php";
}
include ("footer.php");

?>
 
Zuletzt bearbeitet:
Hey Salamander,

deinen Einwand finde ich supi, denn ich selbst wusste bis dato selbst nicht, wie ich genau dieses Problem lösen konnte.
Danke :)
 
Auf der sicheren Seite bin ich doch auch, wenn ich anstatt die Variable 'id' zu nutzen in einer switch - case anweisung jede Möglichkeit seperat abarbeite, oder? Ist für mich im Moment einfacher zu durchschauen.

PHP:
<?php

$id = $_GET['id'];
include ("header.php");
switch ($id) {
    case "hardware":
        include ("hardware.php");
        break;
    case "software":
        include ("software.php");
        break;
    case "impressum":
        include ("impressum.php");
        break;
}
include ("footer.php");

?>
 
Madman1209 schrieb:
wenn ich dein Anliegen richtig verstehe sollten dir die Stichworte "JavaScript" und "AJAX" weiterhelfen.
So hab ichs auch anfangs verstanden und kann dazu nur sagen: Suchmaschinentechnischer Selbstmord. Nich machen!

ForestKoepp schrieb:
Ich arbeite so ähnlich wie du es vorhast und verwende die GET-Variante. Habe eine index.php, die folgende Aufrufe tätigt:

Code:
<?php

include ("header.php");
$id = $_GET['id'];
if(empty($id))
{
include "content.php";
}
else
{
include $_GET['id'];
}
include ("footer.php");

?>
Was du da verzapfst ist
a) unflexibel
b) ne Sicherheitslücke sonder gleichen...
Es wäre echt nett, wenn du solchen Grützcode nicht noch im Internet breittreten würdest, ohne riesige rote Warnungen daneben zu schreiben. Es gibt genug schwere Sicherheitslücken weltweit, da musst du nicht auch noch welche an Neulinge verbreiten.

Besser wäre eh, datenbankgestützt zu arbeiten, z.B. über numerische Seiten-IDs oder einen Alias-Namen. In der Datenbank kann ja zu der ID auch gern einfach nur der Pfad einer zu inkludierenden PHP-Datei stehen, aber man kann genauso unglaublich viel mehr damit anstellen.

UltiSalamander schrieb:
2) Alle drei korrekt, die Ankerangabe wird aber beizeiten auch von Javascript ausgelesen und zur Angabe des (dann via AJAX zu ladenden) Inhalts verwendet.
Genauer gesagt: Das URL-Fragment dient bei Seitenmanipulation durch JS auch der eindeutigen und wiederholbaren Referenzierung eines Inhalts.... im einfachsten Fall formular.php#schritt3
 
lordg2009 schrieb:
Auf der sicheren Seite bin ich doch auch, wenn ich anstatt die Variable 'id' zu nutzen in einer switch - case anweisung jede Möglichkeit seperat abarbeite, oder?
[/PHP]
Selbstverständlich, wenn es nur eine übersichtliche Anzahl an Seiten gibt, ist das problemlos so machbar. Bei einer großen Anzahl an Seiten oder wenn oft Seiten dazukommen, ist es natürlich umständlich diese immer auch in den Switch einzufügen.

lordg2009 schrieb:
Ist für mich im Moment einfacher zu durchschauen.

Ich breche die Zeile mal herunter:

Code:
$p1 = str_ireplace("\\", "", $id); // ersetze alle \ mit Leerzeichen (http://www.php.net/manual/de/function.str-ireplace.php)
$p2 = str_ireplace("/" , "" , $p1); // ersetze alle / mit Leerzeichen
include "/pages/". $p2 .".php"; // füge 3 String-Teile zu einem zusammen
Ist nur eine Lösung die mir auf die schnelle eingefallen ist, gibt bestimmt elegantere, aber ich habe seit Jahren kein PHP mehr programmiert und kenne daher nicht mehr alle Tricks ;)

Daaron schrieb:
Besser wäre eh, datenbankgestützt zu arbeiten, z.B. über numerische Seiten-IDs oder einen Alias-Namen. In der Datenbank kann ja zu der ID auch gern einfach nur der Pfad einer zu inkludierenden PHP-Datei stehen, aber man kann genauso unglaublich viel mehr damit anstellen.
Selbstverständlich die bessere Lösung, aber bei einer kleinen Seite halte ich eine Datenbanklösung für übertrieben. Wenn jedoch bereits eine Datenbank eingesetzt wird kriegt dieser Vorschlag natürlich meine Unterstützung.
 
Zuletzt bearbeitet:
Hi,

So hab ichs auch anfangs verstanden und kann dazu nur sagen: Suchmaschinentechnischer Selbstmord. Nich machen!

Es soll auch Leute geben, die Seiten für interne Zwecke schreiben und denen "Suchmaschinen" erstmal gar nicht wichtig sind ;) Nicht jeder schreibt eine Webseite um auf Google damit Werbung zu machen, viele Leute arbeiten tatsächlich damit. Sofern man den Einsatzzweck nicht kennt würde ich "Nicht machen!" so pauschal absolut als ungerechtfertigt bezeichnen.

VG,
Mad
 
Wo ich gerade einen Sicherheitsexperte da habe:

Ich möchte eine Art eigene Router-Software für mein Linux-System realisieren.

Ein Webinterface soll über php Daten in MySQL einspeisen und ein Perlskript soll (kein CGI) die Daten auslesen und iptables-Regeln setzen, zusätzlich noch den Traffic über iptables auslesen und für verschiedene Nutzer verwalten. Dieses Perl-Skript soll zur Steuerung auf verschiedene Eingangsparameter reagieren können. Mittels CronJob soll dann die Trafficzählung realisiert werden (ein bestimmter Schalter).
Sollte ich im Webinterface neue Regeln (z.B. Port-Forwarding) eingegeben haben, so soll nach Eintrag in die Datenbank ein CGI-Skript gestartet werden, welches den Aufruf entgegennimmt, auswertet und das erste PerlSkript mit Hilfe dem setzen von Schaltern steuert.

Was haltet ihr vom Sicherheitsaspekt:

(PS: Das ganze wird höchstwahrscheinlich sowieso nur lokal erreichbar sein, aber eine Bewertung würde mir weiterhelfen)
Ergänzung ()

PS: Soll also tatsächlich nur intern verwendet werden, google soll davon gar nichts mitbekommen. :)
 
Zuletzt bearbeitet:

Ähnliche Themen

Antworten
4
Aufrufe
3.261
K
Zurück
Oben