Weblog Programmierung

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Weblog Programmierung

    Hi!

    Ich bin schon länger an der Arbeit für ein Projekt einen Weblog zu schreiben.

    Allerdings stoße ich auf Schwierigkeiten, auf die ich keine Lösung weiß.

    1.Problem:
    Ich habe Einträge für die Monate November bis März.
    Ich würde jetzt wollen, dass ich alle Einträge des jeweiligen Monats auf Klick ausgegeben bekomme.
    Also nicht wie hier gelöst, dass ich vom Jänner bis Dezember auswählen kann, sondern November Dezember Jänner Februar März.
    Die Links sollen aber so erhalten bleiben, dass für November 1.Monat steht, Dezember 2.Monat usw.

    Quellcode für die Ausgabe der Weblog-Einträge:

    PHP-Code:
    <?php
    $fm
    ="";
    //-----------------------------------------------------------------------------------------------------------
    // ..:: Verbindung zum DB-Server aufbauen ::..
    $link mysql_connect('localhost''user''pw');
    if (!
    $link
    {
        echo 
    "Kann die Verbindung zum Server \"localhost\" nicht aufbauen: " mysql_error();

    else 
    {
        
    // ..:: Datenbank auswählen ::..
        
    $db mysql_select_db('weblog'$link);
        if (!
    $db
        {
            echo 
    "Kann die Datenbank \"weblog\" nicht benutzen: " mysql_error();
        }
    }
    //------------------------------------------------------------------------------------------------------------

    // ..:: Ausgabe des DB-Inhaltes der Tabelle "Tagebuch" (Weblog) ::..
    echo "<html>";
    echo 
    "<body>";
    echo 
    "<br>";
    echo 
    "<h2 align=center> ..:: Weblog ::.. </h2>";
    echo 
    "</body>";
    echo 
    "</html>";
    echo 
    "<p align=center>";
    if (isset(
    $_GET['month'])&& $_GET['month']>&& $_GET['month']<13 $month $_GET['month']; else $month date("m");
    {
        for (
    $i 1$i <= 12$i++) 
        {
               echo(
    "<a href=\"" $_SERVER['PHP_SELF'] . "?month=$i\">$i.Monat</a>\n");
        }
        echo 
    "</p>";
        
    //$sql = "SELECT * FROM tagebuch ORDER BY tdatum;";
        
    $sql="SELECT * FROM tagebuch WHERE MONTH(tdatum)=$month ORDER BY tdatum;";
        
    $result  =  mysql_query($sql);
        echo 
    "<table border=1 align=center width=53%>"
        
        if (
    $result
        { 
            while (
    $ar=mysql_fetch_array($resultMYSQL_ASSOC)) 
            { 
                echo 
    "<tr bgcolor=#CCCCCC align=right><td><b>Datum:</b> "
                      echo 
    $ar["tdatum"]; echo"</td></tr>"
                echo 
    "<tr bgcolor=#999999><td><h3 align=center>"; echo $ar["tueberschrift"]; echo "</h3>"; echo $ar["teintrag"]; echo "</td></tr>"
                echo
    "<tr><td align=center><a href=$ar[tid].php >Kommentare</a></td></tr>";
                echo
    "<tr><td height=30></td></tr>";
            } 
        }
        echo 
    "</table>";
    }
    ?>
    2.Problem:
    Da man zu jedem Eintrag ein Kommentar abgeben können soll, wäre es praktisch, wenn man nach dem absenden des Eintrag-Formulars, gleich automatisch eine Datei für die Kommentarabgabe erstellen kann.
    Derzeit muss ich dies händisch machen und die jeweiligen Parameter ändern um auf diese KommentarID zugreifen zu können.

    Skript für Weblog-Eintrag:
    PHP-Code:
    <?php
    $fm
    ="";
    //-----------------------------------------------------------------------------------------------------------
    // ..:: Verbindung zum DB-Server aufbauen ::..
    $link mysql_connect('localhost''user''pw');
    if (!
    $link
    {
        echo 
    "Kann die Verbindung zum Server \"localhost\" nicht aufbauen: " mysql_error();

    else 
    {
        
    // ..:: Datenbank auswählen ::..
        
    $db mysql_select_db('weblog'$link);
        if (!
    $db
        {
            echo 
    "Kann die Datenbank \"weblog\" nicht benutzen: " mysql_error();
        }
    }
    //------------------------------------------------------------------------------------------------------------
    // ..:: Wenn der Senden-Button gedrückt worden ist, soll geprüft werden, ob alle Felder ausgefüllt wurden ! ::..
    // ..:: Wenn nicht --> Fehlermeldung !!! ::..
    // ..:: Sonst in DB speichern und Erfolgsmeldung anzeigen !!! ::..
    if (isset($_POST['button']))
    {
        if(
    $_POST['datum'] == '' || $_POST['autor'] == '' || $_POST['titel'] == '' || $_POST['inhalt'] == '')
        {
            
    $fm="Bitte alle Felder ausfüllen !!! <p>";
        }
        else
        {
            echo 
    "<font color='blue'>Speichern erfolgreich !</font>";
            
    $eingabe 'INSERT INTO tagebuch (tdatum, tautor, tueberschrift, teintrag) VALUES ("'.$_POST['datum'].'", 
                       "'
    .$_POST['autor'].'", "'.$_POST['titel'].'", "'.$_POST['inhalt'].'")'
            
    mysql_query($eingabe) or die ("Eintrag fehlgeschlagen !");

    // ..:: Nach erfolgreichem Absenden sollen die Felder wieder gelöscht werden ::..        
            
    $_POST['titel'] = "";


    $sql2 "SELECT tid FROM tagebuch ORDER BY tid DESC LIMIT 1;";
    $result2  =  mysql_query($sql2);
        if (
    $result2
        { 
            while (
    $ar2=mysql_fetch_array($result2MYSQL_ASSOC)) 
            { 
                      
    fopen($ar2['tid'].".".php,"w+"); 
            } 
        }

        }
        
    }
    //-------------------------------------------------------------------------------------------------------------
    // ..:: Einbinden des Eingabeformulars ::..
    include 'eintrag-form.php';
    //-------------------------------------------------------------------------------------------------------------
    // ..:: Ausgabe des DB-Inhaltes der Tabelle "Tagebuch" (Weblog) ::..
    echo "<html>";
    echo 
    "<body>";
    echo 
    "<br>";
    echo 
    "<h2 align=center> ..:: Weblog ::.. </h2>";
    echo 
    "</body>";
    echo 
    "</html>";

    $sql "SELECT * FROM tagebuch ORDER BY tdatum;";
    $result  =  mysql_query($sql);
    echo 
    "<table border=1 align=center width=53%>"
        if (
    $result
        { 
            while (
    $ar=mysql_fetch_array($resultMYSQL_ASSOC)) 
            { 
                echo 
    "<tr bgcolor=yellow align=right><td><b>Autor:</b> "; echo $ar["tautor"]; echo "<br><b>Datum:</b> "
                      echo 
    $ar["tdatum"]; echo "<br>"; echo "</td></tr>"
                echo 
    "<tr bgcolor=green><td><h3 align=center>"; echo $ar["tueberschrift"]; echo "</h3>"; echo $ar["teintrag"]; echo "</td></tr>"
            } 
        }
    echo 
    "</table>";
    ?>
    Skript für Kommentar-Abgabe:
    Hier muss ich derzeit immer die jeweilige tid ändern, dass das Kommentar beim richtigen Weblog-Eintrag ist.
    PHP-Code:
    <?php
    $fm
    ="";
    //-----------------------------------------------------------------------------------------------------------
    // ..:: Verbindung zum DB-Server aufbauen ::..
    $link mysql_connect('localhost''user''pw');
    if (!
    $link
    {
        echo 
    "Kann die Verbindung zum Server \"localhost\" nicht aufbauen: " mysql_error();

    else 
    {
        
    // ..:: Datenbank auswählen ::..
        
    $db mysql_select_db('weblog'$link);
        if (!
    $db
        {
            echo 
    "Kann die Datenbank \"weblog\" nicht benutzen: " mysql_error();
        }
    }
    //------------------------------------------------------------------------------------------------------------
    // ..:: Wenn der Senden-Button gedrückt worden ist, soll geprüft werden, ob alle Felder ausgefüllt wurden ! ::..
    // ..:: Wenn nicht --> Fehlermeldung !!! ::..
    // ..:: Sonst in DB speichern und Erfolgsmeldung anzeigen !!! ::..
    if (isset($_POST['button']))
    {
        if(
    $_POST['datum'] == '' || $_POST['autor'] == '' || $_POST['titel'] == '' || $_POST['kommentar'] == '')
        {
            
    $fm="Bitte alle Felder ausfüllen !!! <p>";
        }
        else
        {
            echo 
    "<font color='blue'>Speichern erfolgreich !</font>";
            
    $eingabe 'INSERT INTO kommentar (tid, kdatum, kautor, kueberschrift, keintrag) VALUES (1, "'.$_POST['datum'].'",
                       "'
    .$_POST['autor'].'", "'.$_POST['titel'].'", "'.$_POST['kommentar'].'")'
            
    mysql_query($eingabe) or die ("Eintrag fehlgeschlagen !");

    // ..:: Nach erfolgreichem Absenden sollen die Felder wieder gelöscht werden ::..        
            
    $_POST['titel'] = "";
        }
        
    }
    //-------------------------------------------------------------------------------------------------------------
    // ..:: Einbinden des Eingabeformulars ::..
    include 'kommentar-form.php';
    //-------------------------------------------------------------------------------------------------------------
    // ..:: Ausgabe des DB-Inhaltes der Tabelle "Kommentar" (Weblog) ::..
    echo "<html>";
    echo 
    "<body>";
    echo 
    "<br>";
    echo 
    "<h2 align=center> ..:: Kommentar ::.. </h2>";
    echo 
    "</body>";
    echo 
    "</html>";

    $sql "SELECT * FROM kommentar where tid = 1;";
    $result  =  mysql_query($sql);
    echo 
    "<table border=1 align=center width=53%>"
        if (
    $result
        { 
            while (
    $ar=mysql_fetch_array($resultMYSQL_ASSOC)) 
            { 
                echo 
    "<tr bgcolor=yellow align=right><td><b>Autor:</b> "; echo $ar["autor"]; echo "<br><b>Datum:</b> "
                      echo 
    $ar["datum"]; echo "</td></tr>"
                echo 
    "<tr bgcolor=green><td><h3 align=center>"; echo $ar["ueberschrift"]; echo "</h3>"; echo $ar["kommentar"]; echo "</td></tr>"
            } 
        }
    echo 
    "</table>";
    ?>
    Ich hoffe ich habe mein Problem verständlich erklärt und hoffe ihr könnt mir helfen, da ich für den Weblog nur noch bis Freitag Zeit habe.

    Hier noch die DB:

    USE weblog;

    CREATE TABLE IF NOT EXISTS tagebuch (
    tid INTEGER auto_increment,
    tdatum date default '0000-00-00',
    tautor varchar(20),
    tueberschrift varchar(100),
    teintrag text,
    PRIMARY KEY (tid)
    ) Type=InnoDB;

    CREATE TABLE IF NOT EXISTS kommentar (
    kid INTEGER auto_increment,
    tid INTEGER,
    kdatum date default '0000-00-00',
    kautor varchar(20),
    kueberschrift varchar(100),
    keintrag text,
    INDEX (tid),
    PRIMARY KEY (kid),
    FOREIGN KEY (tid) REFERENCES tagebuch (tid)
    ON UPDATE CASCADE ON DELETE CASCADE
    ) Type=InnoDB;

    Für Fehlerhinweise bin ich natürlich auch dankbar, bin aber schon zufrieden wenn der Weblog dann stabil läuft!

  • #2
    1. regeln lesen, code umbrechen
    2. wieso nen weblog programmieren gibts doch schon genug! nutze wordpress und schreibe wenn ein plugin

    ps: das beides wollte ich schon immer mal hier sagen wenigstens wissen wir jetzte das die zeit der browsergames und cms systeme hinüber zu blogs schwenkt ^^
    Zuletzt geändert von Bugbuster; 02.05.2007, 19:08.
    tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
    documentation: php.net mysql.com framework.zend.com

    Die Nachtwache!

    Kommentar


    • #3
      zu 1: dann musst du wohl vorher mit SELECT MONTH(datum) abfragen, zu welchen monaten es einträge in der db gibt.

      problem zwei hab ich nicht verstanden.

      Kommentar


      • #4
        1. statt
        PHP-Code:
            for ($i 1$i <= 12$i++) 
            {
                   echo(
        "<a href=\"" $_SERVER['PHP_SELF'] . "?month=$i\">$i.Monat</a>\n");
            } 
        dieshier:
        PHP-Code:
        $my_months = array(1112123);

        foreach(
        $my_months as $k=>$m) {
            
        $mk $k 1;
            echo(
        "<a href=\"" $_SERVER['PHP_SELF'] . 
            
        "?month=$m\">" $mk .  ". Monat</a>\n");

        Aber Achtung, das müsstest du jeden Monat anpassen, damit z.B. auch April drin vorkommt usw., und spätestens dieses Jahr im November macht das so keinen Sinn mehr.

        Zu 2.: Du musst in dem Formular, das ausgefüllt werden soll (also das mit Name, Datum usw.) um ein <input type="hidden" name="tid" value="$tid"> erweitern. Und da, wo du den Kommentar in die Datenbank schreibst musst du eben statt der 1 $_POST['tid'] nehmen.

        Aber bevor du das machst: Lesen! Du hast da eine Scheunentorweite sicherheitslücke und das Zauberwort heißt SQL-Injection.

        OffTopic:
        Peter, kannst du nicht mal ne Seite darüber machen, auf die man immer schön verlinken kann?
        ich glaube

        Kommentar


        • #5
          Original geschrieben von ministry

          Zu 2.: Du musst in dem Formular, das ausgefüllt werden soll (also das mit Name, Datum usw.) um ein <input type="hidden" name="tid" value="$tid"> erweitern. Und da, wo du den Kommentar in die Datenbank schreibst musst du eben statt der 1 $_POST['tid'] nehmen.
          Ich glaube das Problem ist nicht richtig verstanden worden.

          Nachdem ich einen weblog-eintrag gemacht habe, steht im weblog dann der eintrag und darunter dann ein Link "Kommentar" der schon auf die richtige tid führt.
          Also wenn ich den 30sten Eintrag gemacht hab führt der link schon automatisch auf das file 30.php.
          Aber mein Problem dabei ist, dass es die Datei 30.php ja nicht gibt und somit nur ein leeres fenster bekomme und kein kommentar dazu abgeben kann.
          Und ich möchte dass jetzt so lösen, dass gleich dazu das file 30.php angelegt wird, indem ich auch gleich das Formular habe um ein Kommentar abgeben zu können.

          Kommentar


          • #6
            du hast den sinn dynamischer webseiten verfehlt.

            es gibt nur eine seite, die "kommentare.php" heißt und erhält über die url irgendwelche attribute, z.b. id: "kommentare.php?id=30" und finden _dynamisch_ den inhalt, der zu dieser id passt. schau mal unter tut.php-q.net.

            Kommentar


            • #7
              Und ich möchte dass jetzt so lösen, dass gleich dazu das file 30.php angelegt wird
              habe ich dich richtig verstanden? du willst pro eintrag eine php-datei erzeugen? warum nicht eine datei, an die du die entsprechende id übergibts?

              gruß
              peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar


              • #8
                Original geschrieben von Kropff
                habe ich dich richtig verstanden? du willst pro eintrag eine php-datei erzeugen? warum nicht eine datei, an die du die entsprechende id übergibts?

                gruß
                peter
                Das is natürlich die ideale Lösung. Nur sollte ich dazu das Wissen haben, was absolut nicht der Fall ist.

                Wenn du mir vl Ansätze geben könntest?

                Kommentar


                • #9
                  schau dir den tipp von penizillin an. eine datei! und der übergibts du per get die id des datensatzes und läßt auch dort alles abarbeiten. was ist, wenn sich z.b. deine db-struktur oder die programmierung ändert. dann mußt du das in allen! dateien korrigieren,.

                  btw: schau dir mal meine tutorials an, da wird erklärt wie (1 und 2).

                  gruß
                  peter
                  Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                  Meine Seite

                  Kommentar


                  • #10
                    Code:
                    <a href="eintrag.php?id=1" title="Der Eintrag">Der erste Eintrag</a>
                    eintrag.php
                    PHP-Code:
                    print_r $_GET ); 
                    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                    Kommentar


                    • #11
                      Original geschrieben von luppy
                      Nur sollte ich dazu das Wissen haben, was absolut nicht der Fall ist.
                      Und dann muss es gleich ein Weblog-Script sein ...?
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        Original geschrieben von luppy
                        Nachdem ich einen weblog-eintrag gemacht habe, steht im weblog dann der eintrag und darunter dann ein Link "Kommentar" der schon auf die richtige tid führt.
                        Also wenn ich den 30sten Eintrag gemacht hab führt der link schon automatisch auf das file 30.php.
                        Aber mein Problem dabei ist, dass es die Datei 30.php ja nicht gibt und somit nur ein leeres fenster bekomme und kein kommentar dazu abgeben kann.
                        Und ich möchte dass jetzt so lösen, dass gleich dazu das file 30.php angelegt wird, indem ich auch gleich das Formular habe um ein Kommentar abgeben zu können.
                        Zusammenfassend wie andere schon erwähnten: Keine Gute Idee

                        Mach es so:
                        - Unter deinem Eintrag änderst du den Link von <a href="30.php">Kommentar</php> in z.B. <a href="kommentar.php?tid=30">Kommentar</a>.

                        In der kommentar.php kannst du dann (mal eben fürs Verständnis abgesehen von der Sicherheitslücke die ich erwähnte) ein input machen
                        PHP-Code:
                        echo("<input type=\"hidden\" name=\"tid\" value=\"" $_GET['tid'] . "\">"); 
                        Und dort, wo du den Kram in die DB schreibst, machst du eben statt der 1 eine $_POST['tid'] hin.

                        Für jeden Eintrag eine eigene Datei ist so ähnlich, wie für jedes Stück Wurst einen Extra Kühlschrank zu kaufen. Nachdem die Wurst schon auf dem Tisch liegt.
                        ich glaube

                        Kommentar


                        • #13
                          hmm was haltet ihr davon?
                          also wenn ich es vertanden hab würde ich da machen
                          PHP-Code:
                          if( file_exists("$tid.log") ) {
                             
                          //wenn zB "kommentare/datei.log" vorhanden sein sollte- öffnen zeiger zum ende und neue zeile- post werte einfügen, datei schliessen.
                             
                          }
                             else {
                             
                          //wenn datei nicht vorhanden ist, erstellen "kommentare/datei.log", öffnen, denn post werte einfügen, datei schliessen.
                             

                          weil er meinte er muss es manuel machen,
                          also hat er keine routine die das automatisch macht.
                          also hab ich mal schnell mal einen tipp gegeben =)
                          und den ordner "kommentare" noch mal schnell mit einem .htaccess
                          schützen, und das müsste erstmal gehen oder nicht ?

                          bye Nicola
                          -wissen was mann weiss und wissen was mann nicht weiss, das allein ist wissen...und eine stärke der FRAUEN!!! ;P- </n(R)icola>

                          Kommentar


                          • #14
                            if( file_exists("$tid.log") )
                            hast du wohl falsch verstanden, er/sie wollte pro eintrag eine eigene php-datei (!) zum verarbeiten erstellen.
                            OffTopic:
                            gibt es das foto in deiner sig auch in groß?

                            gruß
                            peter
                            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                            Meine Seite

                            Kommentar


                            • #15
                              Original geschrieben von Kropff
                              hast du wohl falsch verstanden, er/sie wollte pro eintrag
                              eine eigene php-datei (!) zum verarbeiten erstellen.
                              aso, na dann,
                              nicht wundern warum ich .log stehen hatte.
                              ich hab solch einträge meistens in ".log dateien" die mittles
                              einer .htaccess geschützt werden


                              Original geschrieben von Kropff
                              OffTopic:
                              gibt es das foto in deiner sig auch in groß?
                              http://s6.bilder-hosting.de/img/O3EAI.jpg
                              ;P
                              bessere fotos gibt meine (teure^^)webcam net her da ich leider noch keine digicam besitze,
                              eine freundin von mir hat eine webcam
                              die macht noch bessere fotos (neidisch werd^^)
                              naja meine reicht solange noch.
                              die hat schon viel durchgemacht =P
                              http://s6.bilder-hosting.de/img/OB9JP.jpg
                              wie du siehst ist sie gut genug =)

                              naja zuzück zum thema
                              hmm und das mit der SQL Injection, mein gedanke wäre:

                              beim schreiben:
                              htmlspecialchars();
                              strip_tags();
                              addslashes();

                              beim auslesen:
                              stripslashes();

                              EDIT:

                              oder in der query
                              ".mysql_real_escape_string($_POST['wert'])."


                              hatte das noch vergessen =)
                              Zuletzt geändert von wahsaga; 04.05.2007, 08:30.
                              -wissen was mann weiss und wissen was mann nicht weiss, das allein ist wissen...und eine stärke der FRAUEN!!! ;P- </n(R)icola>

                              Kommentar

                              Lädt...
                              X