Anzeige

Newssystem um eine Einzelansicht und eine Kommentarfunktion erweitern

Newssystem um eine Einzelansicht und eine Kommentarfunktion erweitern | PSD-Tutorials.de

Erstellt von d3mueller, 15.08.2012.

  1. d3mueller

    d3mueller PC-Freak :D

    Dabei seit:
    22.03.2012
    Beiträge:
    299
    Geschlecht:
    männlich
    Ort:
    Deutschland
    Software:
    Adobe Collection, GIMP
    Newssystem um eine Einzelansicht und eine Kommentarfunktion erweitern
    Hi,

    ich bin gerade dabei eine neue Webseite für ein Projekt von mir zu programmieren :)

    Da braucht man natürlich immer ein Newssystem etc.

    Das eigentliche Newssystem habe ich bereits. Es gibt einfach die Daten aus einer Datenbanktabelle aus, aber nur eine bestimmte Anzahl, zum Beispiel nur 5. Wenn aber mehr Einträge da sind, dann kommt eine Seitenfunktion. Man klickt auf die 2. Seite und da sieht man die älteren Einträge :).

    Soo, jetzt wäre es aber noch toll, wenn man auf die Überschrift eines Newsbeitrag klicken könnte, und dann in eine Einzelansicht gelangen könnte.
    Und unter dem einzelnen Beitrag sollte man Kommentieren können.

    Hier ist erst einmal der bisherige Code:

    PHP:
    1.  
    2. <?php
    3.  
    4. ini_set('display_errors', 1);
    5.  
    6. $db = @new MySQLi('localhost', 'User', 'Passwort', 'Datenbank');
    7.     die('in news.php: Konnte keine Verbindung zu Datenbank aufbauen, MySQL meldete: '.mysqli_connect_error());
    8. }
    9. //Hier setze ich $start und $step
    10. if (isset($_GET['start'])) {
    11.     $start = $_GET['start'];
    12. } else {
    13.     $start = 0;
    14. }
    15. $step = 2; // Wie viele Einträge gleichzeitig?
    16.  
    17.  
    18. $result = $db->query("SELECT * FROM artikel");
    19. $zeilen = $result->num_rows;
    20.  
    21.  
    22.  
    23.  echo "Seiten: ";
    24. for ($i = 0; $zeilen > $i; $i = $i  + $step) {
    25.     $anf = $i + 1;
    26.     $end = $i + $step;
    27.     if ($end > $zeilen) {
    28.         $end = $zeilen;
    29.     }
    30.     if ($anf == $end) {
    31.         echo " [ <a style='color: #000; font-weight: bold;' href=\"artikel.php?start=$i\">$end</a> ] ";
    32.     } else {
    33.         echo " [ <a style='color: #000; font-weight: bold;' href=\"artikel.php?start=$i\">$anf - $end</a> ] ";
    34.     }
    35. }
    36.  
    37.  
    38.  
    39.  
    40.  
    41.  
    42. echo "<hr>";
    43. $sql = "SELECT * FROM artikel ORDER BY datum DESC LIMIT $start, $step";
    44.  
    45.  
    46. $result = $db->query($sql);
    47. if (!$result) {
    48.     die ('Konnte den Folgenden Query nicht senden: '.$sql."<br />\nFehlermeldung: ".$db->error);
    49. }
    50. if (!$result->num_rows) {
    51.     echo "<fieldset class=\"fehler\">Es sind keine Newsbeiträge vorhanden</fieldset>";
    52. } else {
    53.     while ($row = $result->fetch_assoc()) {
    54.        
    55.         echo "<div class=\"artikel\">";
    56.         echo "<strong>" . $row['titel'] . "</strong> |";
    57.         echo $row['datum'];
    58.         echo "<hr class=\"hoch-verschoben\">";
    59.         echo $inhalt_eingetragen = substr($row['inhalt'], 0, 100);
    60.         if(strlen($inhalt_eingetragen) >= "100") {
    61.             echo "...";
    62.         }
    63.         echo "<hr></div>";
    64.  
    65.     }
    66. }
    67. $start = $start + $step;
    68. if ($start < $zeilen) {
    69.     echo "[ <a style='color: #666; font-weight: bold;' href=\"artikel.php?start=$start\"> &Auml;ltere Eintr&auml;ge ></a> ]";
    70. }
    71. @$newStart = $_GET['start'] - $step;
    72. if (isset($_GET['start']))
    73. {
    74.   $start = intval($_GET['start']);
    75.   if ($start<0)
    76.   {
    77.     $start = 0;
    78.   }
    79. }
    80.  
    81. if ($newStart<0)
    82. {
    83.   $newStart = 0;
    84. }
    85. if ($newStart!=$start)
    86. {
    87.   if (isset($_GET['start'])) {    
    88.   echo "[ <a style='color: #666; font-weight: bold;' href=\"artikel.php?start=$newStart\"> < Neuere Eintr&auml;ge</a> ]";
    89.   }
    90. }
    91.  
    92. ?>
    93.  
    Wie kriege ich das mit Einzelansicht und Kommentarfunktion hin?
    Das mit der Einzelansicht könnte man ja irgendwie so machen:

    Man packt um die Überschrift einen Link mit dem Ziel "einzelartikel.php?id=1" und auf der einzelartikel.php prüft man die id und zeigt dementsprechend den zugehörigen Artikel an. (Ist das aber auch sicher? weil das ?id= kann jeder verändern. Man könnte vorher daraus ein integer machen iwie so: $id = (int)$_GET['id']. Hilft das was?=


    Bei der Kommentarfunktion habe ich leider keine Ahnung, wie man das realisieren kann.

    Danke schon mal für eure Hilfe,

    LG
    Dennis

    PS: eine kleine nebensächliche Frage noch, und zwar zu dem Teil hier:
    PHP:
    1.  
    2. ...
    3.  
    4.  echo "Seiten: ";
    5. for ($i = 0; $zeilen > $i; $i = $i  + $step) {
    6.     $anf = $i + 1;
    7.     $end = $i + $step;
    8.     if ($end > $zeilen) {
    9.         $end = $zeilen;
    10.     }
    11.     if ($anf == $end) {
    12.         echo " [ <a style='color: #000; font-weight: bold;' href=\"artikel.php?start=$i\">$end</a> ] ";
    13.     } else {
    14.         echo " [ <a style='color: #000; font-weight: bold;' href=\"artikel.php?start=$i\">$anf - $end</a> ] ";
    15.     }
    16. }
    17.  
    18. ...
    19.  
    Was muss man daran ändern, damit er nur eine reine Seitenanzahl anzeigt, und nicht die artikelnummern 1-3 oder 2-4 oder so.
    wenn ich das §anf - $end durch $anf ersetze, dann kommt nur [1] [3] [5] [7] etc.
     
    #1      
  2. TECFreddy

    TECFreddy "alles und nichts"-Könner

    Dabei seit:
    20.04.2009
    Beiträge:
    101
    Geschlecht:
    männlich
    Ort:
    Dresden
    Software:
    GIMP, Notepad++, Scriptly, FileZilla, Poedit
    Kameratyp:
    Panasonic Lumix DMC-TZ5
    Newssystem um eine Einzelansicht und eine Kommentarfunktion erweitern
    AW: Newssystem um eine Einzelansicht und eine Kommentarfunktion erweitern

    Ich habe das bisher immer so gemacht, dass ich ein unsichtbares und nicht beschreibbares Textfeld dazugepackt habe in dem die ID steht.
    Auszug aus meinem Alten Newssystem.
    PHP:
    1.  
    2. echo ("<form name=".$row['newsID']." action=\"index.php\" method=\"POST\">");
    3. if(userCanDo('delete news')){
    4.                  echo ("<input type=\"text\" name=\"action\" value=\"delete news\" style=\"visibility:hidden\" READONLY>");
    5.                  echo ("<input type=\"text\" name=\"newsID\" value=".$row['newsID']." style=\"visibility:hidden\" READONLY> <br>");
    6.                  echo ("<a href=\"#\" onclick=".$onclick.">News l&ouml;schen</a>");              
    7.               }
    8.  
    9.  
    Diese wird dann per post mit übertragen und du kannst imho per
    PHP:
    1. $_POST['newsID']
    drauf zugreifen.
    So kann keiner direkt die url manipulieren und du hast die ID einfach zur Hand. Inwiefern das nun sicher ist, kann ich nicht beurteilen, da ich kein Sicherheitsexperte bin :D

    Was die Kommentarfunktion angeht, würde ich einfach eine
    HTML:
    unter die Einzelansicht packen. Auch hier dann einfach das versteckte Textfeld einbauen und alles ist geklärt.
     
    Zuletzt bearbeitet: 15.08.2012
    #2      
  3. Duddle

    Duddle Posting-Frequenz: 14µHz

    Dabei seit:
    03.02.2006
    Beiträge:
    3.864
    Geschlecht:
    männlich
    Ort:
    Dresden
    Newssystem um eine Einzelansicht und eine Kommentarfunktion erweitern
    AW: Newssystem um eine Einzelansicht und eine Kommentarfunktion erweitern

    Das ist exakt richtig und was quasi jeder macht.

    Wenn du Artikel ausgibst, hast du sie ja irgendwie eingetragen, nicht wahr? Ergo weißt du, wie man ein Formular baut und die Daten in die Datenbank einträgt. Auch weißt du, wie du diese Daten abhängig von gewissen Parametern (siehe oben) wieder ausgibst.

    Eine Kommentar-Funktion ist exakt das gleiche: der Nutzer hat ein Formular pro Artikel. Dessen Daten werden in der DB abgelegt und bei Bedarf unter dem entsprechenden Artikel wieder ausgegeben.
    Natürlich musst du dann ein paar Zusatzdinge wie Spam-Schutz und das Säubern aller eingehenden Daten beachten (Stichwort SQL-Injection), aber bisher schlägst du dich ja schon selbst ganz gut durch.

    Was ist für dich eine "reine Seitenanzahl"? Die Gesamtanzahl von Artikeln?

    Edit:
    Es ist überhaupt kein Problem, POST-Daten zu manipulieren / fälschen. Deshalb müssen Inputs immer entschärft werden.


    Duddle
     
    Zuletzt bearbeitet: 15.08.2012
    #3      
  4. d3mueller

    d3mueller PC-Freak :D

    Dabei seit:
    22.03.2012
    Beiträge:
    299
    Geschlecht:
    männlich
    Ort:
    Deutschland
    Software:
    Adobe Collection, GIMP
    Newssystem um eine Einzelansicht und eine Kommentarfunktion erweitern
    AW: Newssystem um eine Einzelansicht und eine Kommentarfunktion erweitern

    Hi, danke für die Antworten.

    ^^ Gute Idee, aber kann man ein input-Feld auch ohne Formular einen Wert übertragen lassen? Weil normal wird der Wert ja nur übertragen wenn <input type="submit"> angeklickt wird. Und das geht nicht, weil man ja auf die Überschrift klicken soll.


    Ja, aber wie soll das gehen? Man könnte vllt eine neue Tabelle anlegen, mit den Feldern id, name, email, kommentar oder so aber bei id nicht auto_increment machen.
    Heißt, wenn man auf der Einzelansicht.php?id=1 ist, dann prüfe ich den Wert der id und gebe dann unter dem Newseintrag alle Inhalte aus der Kommentar-Tabelle mit der id=1 aus.
    Und beim eintragen kann man ja auch, jenachdem welche Seite offen ist, einen Kommentar mit der entsprechenden id versehen.
    So sollte es doch gehen oder?

    Aber so müsste man der Wert der id irgendwo dauerhaft speichern, weil bei Reload würde ein POST ja verloren gehen. Möglich wäre das evtl. durch SESSIONS, würde ich sagen, das man da bei jedem Reload prüft, ob ein POST existiert, und wenn ja, soll ein Wert in der SESSION überschrieben werden.

    So würde ich das jetzt machen.




    EDIT:
    @Duddle

    Cool :D danke


    Ja, aber das Problem ist halt, wie man das mit der Ausgabe macht, wenn ich es über Einzelansicht.php?id=1 mache.
    Weiter oben im Post ist eine überlegung von mir, wie man das machen könnte. Ich hoffe man kanns verstehen^^


    Naja, wenn man zum Beispiel 20 Artikel hat, und pro Seite 5 Artikel angezeigt haben will, dann braucht man ja 4 Seiten.
    Und diese sollen dann so angezeigt werden:
    [1][2][3][4]

    und nicht z.B. so:
    [1-5][6-10][11-15][16-20]


    LG
     
    #4      
  5. Duddle

    Duddle Posting-Frequenz: 14µHz

    Dabei seit:
    03.02.2006
    Beiträge:
    3.864
    Geschlecht:
    männlich
    Ort:
    Dresden
    Newssystem um eine Einzelansicht und eine Kommentarfunktion erweitern
    AW: Newssystem um eine Einzelansicht und eine Kommentarfunktion erweitern

    Für die Kommentare solltest du auf jeden Fall eine neue Tabelle anlegen, es sei denn du willst dir unnötige Probleme bereiten.

    Ich weiß nicht, wie viel du schon von Datenbank-Design oder -Modellierung gelesen hast. Wenn du Freizeit hast, kannst du dich mal in das Entity-Relationship-Modell einlesen. Das hilft dir, die Beziehungen zwischen einzelnen Entitäten/Objekten klar strukturiert zu beschreiben.
    Aus einem korrekt erstellten ERM kannst du dann ziemlich einfach eine gute Datenbank erzeugen und zukünftige Kopfschmerzen vermeiden.

    Dein Fall ist eine klassische 1-zu-n-Beziehung, da
    • jeder Artikel mehrere (n) Kommentare haben kann und
    • jeder Kommentar zu exakt einem (1) Artikel gehört
    Diese Art von Beziehungen werden immer per Fremdschlüssel umgesetzt. Das heißt, in der Kommentare-Tabelle hat jeder Eintrag (neben einer eindeutigen eigenen ID) noch die ID vom Artikel, zu dem dieser Kommentar geschrieben wurde. So kannst du sehr einfach einen Artikel und seine Kommentare zusammen abfragen und ausgeben.

    Von 1 bis 5 ist es 1.
    Von 6 bis 10 ist es 2.
    Von 11 bis 15 ist es 3.
    Bemerkst du das Muster für Schrittweite 5?

    Für Schrittweite 3 wäre es:
    Von 1 bis 3 ist es 1.
    Von 4 bis 6 ist es 2.
    Von 7 bis 9 ist es 3.
    ...
    Von 19 bis 21 ist es 7.



    Duddle
     
    Zuletzt bearbeitet: 15.08.2012
    #5      
  6. d3mueller

    d3mueller PC-Freak :D

    Dabei seit:
    22.03.2012
    Beiträge:
    299
    Geschlecht:
    männlich
    Ort:
    Deutschland
    Software:
    Adobe Collection, GIMP
    Newssystem um eine Einzelansicht und eine Kommentarfunktion erweitern
    AW: Newssystem um eine Einzelansicht und eine Kommentarfunktion erweitern

    Oh mann, das sollte ich mir echt mal anschauen^^. Hab eh grad Ferien und langeweile xD. Danke

    Ich werd es gleich mal probieren. Melde mich dann nochmal hier.


    So?

    PHP:
    1.  
    2. //Am Anfang soll der Wert bei 1 liegen...
    3. $anzeige = "1";
    4. echo "Seiten: ";
    5. for ($i = 0; $zeilen > $i; $i = $i  + $step) {
    6.     $anf = $i + 1;
    7.     $end = $i + $step;
    8.     echo " [ <a style='color: #000; font-weight: bold;' href=\"artikel.php?start=$i\">$anzeige</a> ] "; //... dann ausgegeben werden ...
    9.     $anzeige++; //... und um eins erhöht werden
    10. }
    11.  
    Mir ist nur kein besserer name für $anzeige eingefallen... :D
     
    #6      
Seobility SEO Tool
x
×
×