Seitenchaos vermeiden wie? mit PHP?

cym

cym

Aktives Mitglied
Thread Starter
Dabei seit
03.05.2004
Beiträge
1.363
Reaktionspunkte
9
Guten Abend Forum!

Ich surfte vor ein paar Tagen auf dieser Webseite und entdeckte in der Adresszeile des Browser eine ziemlich lange Adresse, während man sich durch die verschiedenen Beispielgalerien klickte. Wie programmierten dies die Programmierer, dass sich jeweils nur das Bild auf der Seite ändert, wenn man z.B. "Bild 1", "Bild 2", etc. wählt? Bisher erstellte ich für jedes Bild in meiner Bildergalerie eine separate Seite.
Kann man das mit PHP nun ganz einfach lösen?

Gruss,
cym :)
 
Ein klares JEIN ;)
Einfach ist es sicher nicht. PHP ist dafür gedacht Webseiten dynamisch zu erstellen, also on the fly für den Benutzer aus Daten HTML-Seiten zu generieren. Per Programm eben. Das was Du da siehst ist eine Variable, die zusammen mit der Webseite übergeben wird. Je nach Wert von id wird die Seite anders dargestellt.
Sogesehen ist es in der Tat so einfach.
Deine Frage deutet aber evtl. an, daß Du wenig Ahnung vom programmieren hast!?
Wenn dem so ist, dann müßtest Du Dich da einarbeiten um das ganze dann einfach zu lösen. Daher mein JEIN. Wenn Du eine Motivation zum lernen gesucht hast, dann hast Du die mit obiger Erkenntnis gefunden.
 
Die einfachste Lösung auf die Frage, die sich in Deiner Beschreibung verbirgt wäre die systematische Verwendung von Parametern in der Adresszeile.

Ein einfaches Beispiel, wobei das keine Anleitung werden soll:

Du hast eine Website mit 5 Seiten, die jeweils immer den gleichen Navigationsheader haben. Jetzt könntest Du an ein Frameset denken, aber das könntest Du auch gleich wieder verwerfen ;) Was Du also nun brauchst, sind die fünf unterschiedlichen Inhalte, der Navigationsheader sowie eine Datei, die diese fünf je nach Zusammenhang zusammenbringt.

Also legst Du Dir eine Struktur zurecht, und vereinbarst mit Dir selbst, dass der zentrale Parameter 'seite' heißen soll (kann natürlich auch 'page', 'page-id', oder ganz etwas anderes sein; auch 'krokodilsledertasche' ginge, wäre aber vielleicht etwas lang).

Diesen Parameter würdest Du je nach Ziel an die Adresse anhängen, und zwar am besten an die Adresse Deiner zentralen Datei, die, wie oben schon erwähnt für die Steuerung zuständig ist. Dies nennen wir "index.php", weil's so nett praktisch ist ;)

Möchtest Du Seite 1 sehen, könnte die Zieladresse so lauten: index.php?seite=1. Statt dessen Seite 3? - Kein Problem, erreichbar via index.php?seite=3.

Innerhalb der der »magischen« index.php fragst Du einfach den URL-Parameter über das assoziative Array $_GET ab und lässt diese über einen Switch laufen. Etwa so:

PHP:
<?

    require_once ('header_mit_der_immergleichen_navigation.inc.php');

    switch ($_GET ['seite']) {
        case '5':
             require_once ('inhalt_5.inc.php');
             break;
        case '4':
             require_once ('inhalt_4.inc.php');
             break;
        case '3':
             require_once ('inhalt_3.inc.php');
             break;
        case '2':
             require_once ('inhalt_2.inc.php');
             break;
        case '1':
        default:
             require_once ('inhalt_1.inc.php');
             break;
    }

?>

Jetzt hast Du so ziemlich vereinfach das, was Du ungefähr haben wolltest. Pass nur bitte dabei auf, dass Du keinen URL-Parameter ungeprüft verarbeitest, dabei können böse Sicherheitslücken entstehen ;)

Viel Erfolg!
 
Danke für eure Antworten! Ich würde schon gerne PHP lernen. Aber leider habe ich momentan keine Zeit. Aber falls ich dann 90 bin, fange ich vielleicht mal damit an :D
Auch danke für das Beispiel. Werd' ich ausprobieren. :)
 
Zuletzt bearbeitet:
also das geht doch auch einfacher??

- eine html-seite, mit erweiterung .php

- an der stelle, wo das bild hinkommt:

PHP:
if(!isset($_GET[bild]))
{
    $bild = 1;
}
else
{
    $bild = $_GET[bild];
}

$naechstes_bild = $bild++;

echo "<a href='seite.php?bild=".$naechstes_bild."'><img src='bild".$bild.".jpg' width='...' height='...' border='0'></a>";

warum nicht so?
 
und in dem fall ist die ungeprüfte variable keine sicherheitslücke... weil bei einem falschen wert einfach kein bild angezeigt wird...

solange man nicht

PHP:
echo $_GET[var]();

macht... und dann irgendwelche funktionen ausführen kann... ;-)
 
Naja, prinzipiell kann man in deinem Beispiel beliebigen Code in die Webseite schreiben. Ob das für Cross Side Scriptiing ausgenutzt werden kann ist, hängt dann natürlich von dem Rest der Anwendung ab.

Explizite Typumwandlung sollte hier ausreichen. Und die Anführungszeichen um den Arrayschlüssel nicht vergessen.

$bild = (int)$_GET["bild"];

Außerdem hast du einen Logikfehler drin. Aufruf mit bild=1 würde bild2.jpg anzeigen.

Hilarious' Variante ist aber robuster. Wenn man sie bei deiner Variante beim Wert für bild vertippt, und eine nicht vorhandene Nummer angibt, gibt es ein kaputtes Bild. (Aber du hast eh eine Endlosgalerie ;-)
 
okeeyy....

hab ja den code nur schnell hingetippt... ;)
 
Das Problem mit schnell hingetipptem Code ist, das er Anfängern schlechten Codestil zeigt. Sie können das aber nicht selbst erkennen und lernen schlampigen Stil.

Von der Anwendungslogik her ist gegen deine Variante ja nichts zu sagen. Ist halt auch eine mögliche Lösung.
 
Sowas macht man viel einfacher und schneller mit JavaScript. Div mit ID anlegen und bei einem Klick auf eine Zahl etwas in der Form "getElementById[ID].innerHTML=<img src="Bild.jpg" />"

BadHorsie
 
Danke für Eure Antworten! Nun kann ich mal rumpröbeln. :)
 
BadHorsie:
Sowas macht man viel einfacher und schneller mit JavaScript

Vor allem bei all denen die javascript deaktiviert haben ;)
Das ist leider häufiger der Fall. Ich rate daher von Javascript ab, solange es nicht zwingend nötig ist.
 
BadHorsie schrieb:
Sowas macht man viel einfacher und schneller mit JavaScript.

Eine kontrollierbare, serverseitige Lösung durch eine schlecht kontrollierbar,e clientseitige Lösung zu ersetzen halte ich im allgemeinen für keine gute Lösung. Vor allem, wenn eine clientseitige Lösung nicht notwendig ist. Neue Browser, neues, unterschiedliches Verhalten, neue Bugs.

Javascript könnte hier aber, ähnlich wie du es beschreibst, eingesetzt werden, um kürzere Antwortzeichen zu erreichen. Als Ergänzung.

"getElementById[ID].innerHTML=<img src="Bild.jpg" />"

<img /> ? Also XHTML? Dann geht das mit innerHTML nicht, weil das bei XHTML nicht möglich ist. Du mußt dann per DOM Manipulation mit deleteElement, createElement und appendChild arbeiten.
 
Ich lerne grade PHP und finde es nicht so schwer, eigentlich ist es relativ einfach. Habe früher mal ein wenig programmiert und weiss, was eine "IF...THEN" Verzweigung und z. B. ein Array ist.

Außerdem macht es superviel Spass und Seiten, die sich ständig wiederholen sind total elegegant per PHP zu scripten :)

Da bin ich grad dabei, die Hauptseite besteht komplett PHP:

http://www.2ndreality.net/prototype/vidis

Am Wochenende kommt die MySQL Datenbank dazu, mal sehen.

Frank
 
Viel Erfolg! :)
 
hi!

wie wäre es, wenn du den string für seite=WERT einfach md5 verschlüsselst?

mache ich immer so erkennt der benutzer garnicht auf was er da zeigt...

sprich: egal wie du es machst... es gibt immer mehrere lösungen und finde für dich die beste heraus!

Gruß
 
Verstehe ich nicht. md5 ist eine Hashfunktion. Man kann aus dem Hash nicht auf den Inhalt schließen, den der Hash repräsentiert. Wie soll das ganze denn ablaufen?
 
Nogger schrieb:
Verstehe ich nicht. md5 ist eine Hashfunktion. Man kann aus dem Hash nicht auf den Inhalt schließen, den der Hash repräsentiert. Wie soll das ganze denn ablaufen?
Ich vermute, er setzt keinen 'salt'-Wert ein, damit er immer auf dasselbe Ergebnis kommt, und vergleicht dann mit einer Tabelle fertiger Werte...
Der Sinn des Ganzen entzieht sich mir allerdings auch. Warum sollte ich dem Benutzer etwas verheimlichen? Wenn ich Benutzereingaben nie traue und jede Ein- sowie Ausgabe sorgfältig prüfe kann, ich ihm ruhig den Spaß lassen, auch mal an der URL herumzuspielen. Und wenn jemand etwas verschlüsselt, gehe ich ja erst recht davon aus, dass er mehr Angst vor mir als ich vor ihm habe... ;)
 
naja vorsicht ist die mutter aller porzelankisten...

sowieso egal wie man es macht: Wenn ein Hacker etwas herausfinden will, dann wird es nach einiger zeit
 
Ich verwende nur method=POST, das reicht meist. GET hat eh den Nachteil längenlimitiert zu sein. In sensiblen Bereichen setze ich dann auch Hashes oder andere Kontrollmechanismen ein. Wenn's ganz arg kommt, dann ist $_SESSION[] dran, die Daten verbleiben auf dem Server.
 
Zurück
Oben Unten