kungschu: / PHP : Permalinks und Templates

Hallo.

Ich schreibe derzeit an einem Blog. Nun hänge ich an der Realisierung von Permalinks und der nachfolgenden Ausgabe einzelner Beiträge (DB-Einträge).

Ich würde mich über eine paar Anregungen und/oder Links zur weiteren Recherche und Programmierung freuen.

Bisher bin ich soweit, eine index-File zu haben, auf der alle Beiträge angezeigt werden. Nun möchte ich aber auch auf einzelne Beiträge verweisen können (, auch, um für ein Atom-Feed Links zu haben). Wie gehe ich die Sache nun an, dass ich mittels eines Permalinks in ein einfaches Template[1] den Inhalt des bestimmten DB-Eintrages "hinein bekomme"?

Es ist ja eigentlich die Regel, das dies möglich ist. Mir ist aber nicht klar, wie das generell gemacht wird.
Wird sonst per GET etwa die id übermittelt und vom verarbeitenden Skript abgefragt? (Wenn ja: Wie kann ich mir bestimmte Daten rausfiltern?)

Danke.

MfG, Kungschu.

[1] "Template": Eine php-File, die sich je nach übermittelter id einen Eintrag aus der DB holt.

--
The computer is not willing? The bug is well hidden? The release is tomorrow?
  1. Hi!

    Also, wenn ich das richtig verstanden habe, willst du keine URL wie folgendes haben:
    http://www.example.com/index.php?artikel-id=123
    Du möchtest "sprechende" Links haben, ja?
    Etwas ist der Art wie http://www.example.com/spannende-sache-passiert.html?

    Mit Hilfe des Apache-Moduls mod_rewrite kannst du dir deine Links umschreiben.
    Schau dir mal den Wikipedia-Artikel Rewrite-Engine an.
    Die Wikipedia wäre übrigens auch ein gutes Beispiel dafür.
    Natürlich gibt es nicht für jeden einzelnen Artikel ein eigenes Verzeichnis auf dem Server, wie der URL vermuten läßt. Auch hier wird der URL umgeschrieben.

    Die meisten Weblog-Systeme setzen diese Technik ein.

    Wenn du mit dem Rewrite-Modul arbeiten willst, könntest du einen Blick in die Apache Doku werfen.
    Auf ranking-konzept.de findest du den Artikel Professionelle Suchmaschinenoptimierung - Mod_Rewrite Tutorial (Anleitung zu Mod_Rewrite), der für dich interessant sein wird.
    Und auf modrewrite.de findest du Erklärungen, Anleitungen/Tutorials, FAQ.

    Mit einer htaccess-Datei und mit Hilfe regulärer Ausdrücke kannst du deine Links (fast) beliebig umschreiben.
    In deinem Fall solltest du vielleicht aus dem Artikelnamen mit Hilfe von PHP einen URL erzeugen. In dem URL dürfen ja schließlich keine Leerzeichen oder Sonderzeichen enthalten sein. Diese müßtest du dann URL-tauglich umwandeln.
    Danach kommt dann das Rewrite-Modul zum Einsatz.

    Schöner Gruß,
    rob

    1. Hallo rob.

      Also, wenn ich das richtig verstanden habe, willst du keine URL wie folgendes haben:
      http://www.example.com/index.php?artikel-id=123
      Du möchtest "sprechende" Links haben, ja?
      Etwas ist der Art wie http://www.example.com/spannende-sache-passiert.html?

      Jein. Vorerst geht es mir darum, überhaupt einmal einen Permalink zu haben und über diesen eine Einzelansicht des entsprechenden Beitrags aufrufen zu können. Schöne URLs sind momentan zweitrangig..

      Konkret: Wie kann ich einer Template-php-File mitteilen, welcher Beitrag aus der DB ausgelesen werden soll, wenn die URL etwa http://www.example.com/index.php?artikel-id=123 lautet.

      Es ist zu spät, ich muss ins Bett. Danke dir. Bis nachher.

      MfG, Kungschu.

      --
      The computer is not willing? The bug is well hidden? The release is tomorrow?
      1. Hi!

        Konkret: Wie kann ich einer Template-php-File mitteilen, welcher Beitrag aus der DB ausgelesen werden soll, wenn die URL etwa http://www.example.com/index.php?artikel-id=123 lautet.

        Per URL wird eine ID übergeben. Damit kannst du dann die gewünschten Daten aus deiner DB holen.
        Dazu fragst du erstmal, ob der Parameter artikel-id per URL übergeben wurde.
        Ist das der Fall, holst du den Artikel mit der angegebenen ID aus deiner Tabelle.
        Das könnte in etwa so aussehen:

        <?php  
        if ( isset( $_GET['artikel-id'] ) ) {  
         $sql = "SELECT FROM tabelle WHERE id = ". $_GET['artikel-id'];  
         $res = mysql_query( $sql );  
         $artikel = mysql_fetch_assoc( $res );  
         echo $artikel['artikeltext'];  
        }  
        ?>
        

        Natürlich fehlt da noch die Codezeile, wo die Verbindung zum DB-Server hergestellt und die Datenbank gewählt wird (mysql_connect/mysql_select_db).
        Dann sollte man den übergebenen Parameter nicht ohne Prüfung in die Abfrage einbauen, da sonst ein Angriff per SQL-Injektion möglich wäre (mysql_real_escape_string).
        Und eine Fehlerbehandlung sollte auch noch eingebaut werden.
        Aber das Prinzip, wie es funktioniert, sollte erkennbar sein.

        Natürlich müßtest du auch nicht die ID nutzen.
        Ich weiß nicht, welche Spalten du in deiner Tabelle hast...
        Eventuell hast du ja eine Spalte "Artikel-Titel" oder so. Darüber könnest du dir dann auch den Artikel holen.
        $sql = "SELECT FROM tabelle WHERE artikeltitel = '". $_GET[artikel] ."'";
        Da im Artikeltitel aber Leer- und Sonderzeichen vorkommen könnten, die im URL nicht zulässig sind, müßtest du da dann umwandeln.

        Schöner Gruß,
        rob

        1. Hallo rob.

          Das war der Anstoss, den ich benötigt habe. Damit werde ich wohl weiter kommen. Eigentlich eine simple Sache. Offenbar muss ich mich nochmals mit GET befassen.

          Ich danke dir herzlichst für deine beiden, wie immer sehr ausführlichen und hilfreichen, Beiträge zu meiner Sache. So ist einer Frage zu mod-rewrite ja schon vorgegriffen.

          Ein schönes Wochenende noch!

          MfG, Kungschu.

          --
          The computer is not willing? The bug is well hidden? The release is tomorrow?