Antworten auf deine Fragen:
Neues Thema erstellen

Newssystem um eine Einzelansicht und eine Kommentarfunktion erweitern

d3mueller

PC-Freak :D

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:
<?php
 
error_reporting(E_ALL);
ini_set('display_errors', 1);

$db = @new MySQLi('localhost', 'User', 'Passwort', 'Datenbank');
if (mySQLi_connect_errno()) {
    die('in news.php: Konnte keine Verbindung zu Datenbank aufbauen, MySQL meldete: '.mysqli_connect_error());
}
//Hier setze ich $start und $step
if (isset($_GET['start'])) {
	$start = $_GET['start'];
} else {
	$start = 0;
}
$step = 2; // Wie viele Einträge gleichzeitig?


$result = $db->query("SELECT * FROM artikel");
$zeilen = $result->num_rows;



 echo "Seiten: ";
for ($i = 0; $zeilen > $i; $i = $i  + $step) {
	$anf = $i + 1;
	$end = $i + $step;
	if ($end > $zeilen) {
		$end = $zeilen;
	}
	if ($anf == $end) {
		echo " [ <a style='color: #000; font-weight: bold;' href=\"artikel.php?start=$i\">$end</a> ] ";
	} else {
		echo " [ <a style='color: #000; font-weight: bold;' href=\"artikel.php?start=$i\">$anf - $end</a> ] ";
	}
}






echo "<hr>";
$sql = "SELECT * FROM artikel ORDER BY datum DESC LIMIT $start, $step";


$result = $db->query($sql);
if (!$result) {
    die ('Konnte den Folgenden Query nicht senden: '.$sql."<br />\nFehlermeldung: ".$db->error);
}
if (!$result->num_rows) {
    echo "<fieldset class=\"fehler\">Es sind keine Newsbeiträge vorhanden</fieldset>";
} else {
    while ($row = $result->fetch_assoc()) {
		
		echo "<div class=\"artikel\">";
		echo "<strong>" . $row['titel'] . "</strong> |";
		echo $row['datum'];
		echo "<hr class=\"hoch-verschoben\">";
		echo $inhalt_eingetragen = substr($row['inhalt'], 0, 100);
		if(strlen($inhalt_eingetragen) >= "100") {
			echo "...";
		}
		echo "<hr></div>";

    }
}
$start = $start + $step;
if ($start < $zeilen) { 
    echo "[ <a style='color: #666; font-weight: bold;' href=\"artikel.php?start=$start\"> &Auml;ltere Eintr&auml;ge ></a> ]";
}
@$newStart = $_GET['start'] - $step;
if (isset($_GET['start']))
{
  $start = intval($_GET['start']);
  if ($start<0)
  {
    $start = 0;
  }
} 

if ($newStart<0)
{
  $newStart = 0;
}
if ($newStart!=$start)
{
  if (isset($_GET['start'])) {    
  echo "[ <a style='color: #666; font-weight: bold;' href=\"artikel.php?start=$newStart\"> < Neuere Eintr&auml;ge</a> ]";
  }
}

?>

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:
...

 echo "Seiten: "; 
for ($i = 0; $zeilen > $i; $i = $i  + $step) { 
    $anf = $i + 1; 
    $end = $i + $step; 
    if ($end > $zeilen) { 
        $end = $zeilen; 
    } 
    if ($anf == $end) { 
        echo " [ <a style='color: #000; font-weight: bold;' href=\"artikel.php?start=$i\">$end</a> ] "; 
    } else { 
        echo " [ <a style='color: #000; font-weight: bold;' href=\"artikel.php?start=$i\">$anf - $end</a> ] "; 
    } 
} 

...

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.
 

TECFreddy

"alles und nichts"-Könner

AW: Newssystem um eine Einzelansicht und eine Kommentarfunktion erweitern

Hi,

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?=

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:
echo ("<form name=".$row['newsID']." action=\"index.php\" method=\"POST\">");
if(userCanDo('delete news')){
                 echo ("<input type=\"text\" name=\"action\" value=\"delete news\" style=\"visibility:hidden\" READONLY>");
                 echo ("<input type=\"text\" name=\"newsID\" value=".$row['newsID']." style=\"visibility:hidden\" READONLY> <br>");
                 echo ("<a href=\"#\" onclick=".$onclick.">News l&ouml;schen</a>");               
              }
Diese wird dann per post mit übertragen und du kannst imho per
PHP:
$_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:
<form></form>
unter die Einzelansicht packen. Auch hier dann einfach das versteckte Textfeld einbauen und alles ist geklärt.
 
Zuletzt bearbeitet:

Duddle

Posting-Frequenz: 14µHz

AW: Newssystem um eine Einzelansicht und eine Kommentarfunktion erweitern

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?=

Das ist exakt richtig und was quasi jeder macht.

Bei der Kommentarfunktion habe ich leider keine Ahnung, wie man das realisieren kann.
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 muss man daran ändern, damit er nur eine reine Seitenanzahl anzeigt
Was ist für dich eine "reine Seitenanzahl"? Die Gesamtanzahl von Artikeln?

Edit:
Diese wird dann per post mit übertragen und du kannst imho per
PHP:
$_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

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


Duddle
 
Zuletzt bearbeitet:

d3mueller

PC-Freak :D

AW: Newssystem um eine Einzelansicht und eine Kommentarfunktion erweitern

Hi, danke für die Antworten.

Ich habe das bisher immer so gemacht, dass ich ein unsichtbares und nicht beschreibbares Textfeld dazugepackt habe in dem die ID steht (name="newsID").
Diese wird dann per post mit übertragen und du kannst imho per $['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
^^ 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.


Was die Kommentarfunktion angeht, würde ich einfach eine
HTML:
<form></form>
unter die Einzelansicht packen. Auch hier dann einfach das versteckte Textfeld einbauen und alles ist geklärt.
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

Das ist exakt richtig und was quasi jeder macht.
Cool :D danke


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.
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^^


Was ist für dich eine "reine Seitenanzahl"? Die Gesamtanzahl von Artikeln?
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
 

Duddle

Posting-Frequenz: 14µHz

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.

Naja, wenn man zum Beispiel 20 Artikel hat, und pro Seite 5 Artikel angezeigt haben will, dann braucht man ja 4 Seiten.
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:

d3mueller

PC-Freak :D

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.
Duddle
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.


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.

So?

PHP:
//Am Anfang soll der Wert bei 1 liegen...
$anzeige = "1";
echo "Seiten: ";
for ($i = 0; $zeilen > $i; $i = $i  + $step) {
	$anf = $i + 1;
	$end = $i + $step;
	echo " [ <a style='color: #000; font-weight: bold;' href=\"artikel.php?start=$i\">$anzeige</a> ] "; //... dann ausgegeben werden ...
	$anzeige++; //... und um eins erhöht werden
}

Mir ist nur kein besserer name für $anzeige eingefallen... :D
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben