Loading...   Upload Image

Newssystem mit Kommentar-FunktionTutorials » PHP/MySQL Tutorials » Newssystem mit Kommentar-Funktion

Verfasst von Alice am 04.05.2009 - wurde schon 41892 mal gelesen

Kategorie: PHP/MySQL
Bewertung:
36x bewertet
Schwierigkeit: mittel
Kommentare: [ 43 ]

Tag - Schlagwort PHP Tag - Schlagwort Newssystem Tag - Schlagwort Kommentare Tag - Schlagwort Funktion Tag - Schlagwort Script

Newssystem mit Kommentar-Funktion - Tutorial

Im Wishbook wurde ein Tutorial gewuenscht, welches die Erstellung eines Newssystem aufzeigt, also zeig ich euch heute wie man sich ein simples Newssystem mit Kommentarfunktion erstellt ...

Was wird benoetigt


- PHP / MySql Grundkenntnisse
- 1 MySql Datenbank
- Webspace der PHP unterstuetzt

Wie sieht es am Schluss aus?


Administration
- admin.php - Artikeluebersicht
- post_news.php - Artikel verfassen
- post_news.php - Artikel bearbeiten
- show_comments.php - Kommentare auflisten
- edit_comments.php - Kommentar bearbeiten
- cats.php - Kategorien
- cats.php - Kategorien bearbeiten

Ausgabe
- news.php - NewsArtikel
- news.php - NewsArtikel - Archiv / Kategorien
- comments.php - Kommentare

Step 1


Als erstes erstellen wir uns eine neue Tabelle, fuer die Autoren, in der Datenbank(mit PHPMyAdmin)
CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(48) NOT NULL,
`email` varchar(255) NOT NULL,
`passwort` varchar(48) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
);

Dann legen wir gleich mal einen User an, die Daten bitte Anpassen!
INSERT INTO `user` (`id`, `name`, `email`, `passwort`) VALUES
(1, 'DeinUsername', 'DeineEmailAdresse', 'DeinPasswort');

Und noch eine Tabelle, fuer die einzelnen Artikel
CREATE TABLE IF NOT EXISTS `news` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`autor` varchar(48) NOT NULL,
`title` varchar(255) NOT NULL,
`cat` varchar(255) NOT NULL,
`news` text NOT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`id`)
);

Und nun noch eine Tabelle fuer die Kommentare
CREATE TABLE IF NOT EXISTS `comments` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(38) NOT NULL,
`email` varchar(255) NOT NULL,
`url` varchar(255) NOT NULL,
`comment` text NOT NULL,
`date` datetime NOT NULL,
`news_id` int(11) NOT NULL,
`ip` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
);

Step 2 - DB Verbindung | config.inc.php


Config.inc.php heisst unsere Datei mit der wir eine Verbindung zur Datenbank herstellen, ohne die geht gar nichts!
Sie enthaelt ebenfalls die im NewsSystem haeufig verwendeten Funktionen, die z.B. u.a. fuer das 'Saeubern' der Daten zustaendig ist, welche mit der DB zu tun haben, die Seitennavigation(Blaetterfunktion) und die BBCode Funktion.
 SQL Injektions
//-----------------------------------------------------------------------------------------------
function clean_it($dirty){ 
    
     // Auswirkungen von magic_quotes_gpc zuruecksetzen, wenn ON
    if (get_magic_quotes_gpc()) {
        $clean = mysql_real_escape_string(stripslashes(htmlspecialchars($dirty)));
    }else{
        $clean = mysql_real_escape_string(htmlspecialchars($dirty));
    }
    return $clean;
}

// Funktion zum Fehler ausgeben
function get_error($var){
	$fehler = "

Error ...

\n

".$var."

\n
\n"; return $fehler; } // Funktion um no error ausgeben function get_okay($var){ $fehler = "

Prima ...

\n

".$var."

\n
\n"; return $fehler; } //----------------------------------------------------------------------------------------------- // Blaetterfunktion => Seitennavigation //----------------------------------------------------------------------------------------------- function get_navi($go, $total, $pfad, $ausgabe = false, $ende = 10, $p = 3){ //----------------------------------------------------------------------------------------------- // $pfad => Dateipfad // $total => Anzahl der in DB // $ende => Anzahl der Datensaetze die Pro Seite angezeigt werden sollen // $p => Anzahl der Links die in der Seitenavigation ausgegeben werden // $ausgabe = false => Seitennavigation NICHT ausgeben oberhalb der DB Abfrage //----------------------------------------------------------------------------------------------- $seiten = ceil($total / $ende); // Berechnet die Seitenanzahl insgesamt if(!isset($go)){ // korrigieren der aktuellen Seite $go = 1; // Sofern $go nicht uebergeben wurde }elseif($go <= 0 || $go > $seiten){ $go = 1; // Variable definieren }else{ // Wenn Obiges nicht zutraf $go = clean_it($go); // Variable definieren } $links = array(); // Linkkette bilden // Seite die vor der aktuellen Seite kommt definieren if(($go - $p) < 1){ $davor = $go - 1; }else { $davor = $p; } // Seite die nach der aktuellen Seite kommt definieren if(($go + $p) > $seiten){ $danach = $seiten - $go; }else{ $danach = $p; } $off = ($go - $davor); // Variable definieren if ($go- $davor > 1){ // Link definieren => Zur Erste Seite springen $first = 1; $links[] = "« Erste ...\n"; } if($go != 1){ // Link definieren => eine Seite zurueck blaettern $prev = $go-1; $links[] = "«\n"; } for($i = $off; $i <= ($go + $danach); $i++){ // einzelne Seitenlinks erzeugen if ($i != $go){ // Link definieren $links[] = "$i\n"; }elseif($i == $seiten) { // aktuelle Seite, ein Link ist nicht erforderlich $links[] = "$i\n"; }elseif($i == $go){ // aktuelle Seite, ein Link ist nicht erforderlich $links[] = "$i\n"; } // close if $i }// close for if($go != $seiten){ // Link definieren => eine Seite weiter blaettern $next = $go+1; $links[] = "»\n"; } if($seiten - $go - $p > 0 ){ // Link definieren => Zur letzen Seite springen $last = $seiten; $links[] = "... Letzte »\n"; } $start = ($go-1) * $ende; // Berechne den Startwert fuer die DB $link_string = implode(" ", $links); // Zusammenfuegen der einzelnen Links zu einem String // -------------------------------------- Seitennavigation ausgeben ---------------------------- if($ausgabe == true){ echo "
\n"; echo "Seite $go von $seiten\n"; echo $link_string; // Ausgabe der Seitennavigation echo "
\n"; } //close ausgabe // -------------------------------------- Seitennavigation ende -------------------------------- return array($start, $ende); } // close function //----------------------------------------------------------------------------------------------- // BB Code funktion //----------------------------------------------------------------------------------------------- function bbcode($bb){ $php_header = '
'; $php_footer = '
'; // PHP Code zwischenspeichern $c = md5(time()); preg_match_all("/\[php\](.*?)\[\/php\]/si", $bb, $results); for($i=0;$i\2", $bb); $bb = preg_replace("/\[email=(.*)\](.*)\[\/email\]/Usi", "\2", $bb); $bb = preg_replace("/\[url=(.*)\](.*)\[\/url\]/Usi", "\2", $bb); $bb = preg_replace("/\[img\](.*)\[\/img\]/Usi", "\"\"", $bb); $bb = nl2br($bb); // PHP Code highlighten for($i=0;$i parse Code $video = array(); preg_match_all("/\[video\](.*)\[\/video\]/siU", $bb, $video); foreach($video[0] as $key => $value){ $bb = preg_replace('#'.preg_quote($value, '#').'#','[video]'.$key.'[/video]',$bb,1); $video[1][$key] = html_entity_decode($video[1][$key]); } foreach($video[1] as $key => $value) $bb = preg_replace("/\[video\]".$key."\[\/video\]/siU", $value, $bb); return $bb; } function get_bbcode($wo){ // BBCode Funktion $bb = '
'; $bb.= 'fett'; $bb.= 'krusiv'; $bb.= 'unterstrichen'; $bb.= 'links ausrichten'; $bb.= 'zentriert'; $bb.= 'rechts ausrichten'; $bb.= 'Link einfuegen'; $bb.= 'Email Adresse einfuegen'; $bb.= 'Bild einfuegen'; if($wo != "comi"){ $bb.= 'Video Einfuegen'; } $bb.= 'Zitat einfuegen'; $bb.= 'Code einfuegen'; $bb.= "PHP Code einfuegen title="PHP Code einfuegen" />


Wichtig

Die in [p h p] und [/p h p] enthaltenen Leerzeichen in Zeile 239 MUESSEN entfernt werden, sofern der Code hier heraus kopiert wird.
Die Leerzeichen dienen nur der korrekten Darstellung hier im Tutorial!


Step 3 - header.php


Die Datei header.php wir in alle Datein eingebunden, die fuer die Administration der News zustaendig sind, sie enthaelt zum einen einen Zugriffsschutz, sowie den oberen Teil des immer wieder benoetigen HTML Grundgeruests ...





	GrafixxNews

	
	
	

	





Step 4 - footer.php


Die Datei footer.php wird ebenfalls, wie zuvor schon die header.php, in alle Datein eingebunden, welche fuer die Administration der News zustaendig sind, die Datei enthaelt den abschliessenden Teil des HTML-Grundgeruestes, sowie die Navigation...


Step 5 - sidebar.php


Die Datei sidebar.php enthaelt zum einen den Loginbereich, eine Moeglichkeit sich wieder auszuloggen, die Navigation und listet die letzen 3 Kommentar auf ...
\n";
 	
isset($_GET['action']) ? $action = clean_it($_GET['action']) : $action = '';	// Variable definieren

if(isset($_POST['submit_login'])){
	
	$log_user = clean_it($_POST['log_user']); 	// Variable definieren
	$log_pass = clean_it($_POST['log_pass']);	// Variable definieren => MD5 Verschluesselung
	
	$login = mysql_query("SELECT id FROM user WHERE name='$log_user' AND passwort='$log_pass'"); 
	
	if(mysql_num_rows($login) > 0){ // korrekt eingeloggt
	
			$row = mysql_fetch_object($login); // DATEN aus DB
			
			$_SESSION['login'] = $row->id; // Session zuweisen
			$_SESSION['user'] = $log_user; // Session zuweisen
			
			header("Location: admin.php"); // Weiterleitung 

	}else{
		echo get_error(' Logindaten fehlerhaft ...');
	}
}

//--------------------------------------------------------
// Wenn Eingeloggt
//--------------------------------------------------------

if(isset($_SESSION['login'])){

 echo "

Welcome ".$_SESSION['user'].""; echo "Logout

"; echo "

Neuen Artikel verfassen

"; echo "
"; //-------------------------------------------------------- // Letzte Kommentare //-------------------------------------------------------- echo "

Neusten Kommentare

\n"; $new_comi = mysql_query("SELECT id, name, comment, DATE_FORMAT(date, '%d.%m.%Y') AS datum FROM comments ORDER BY id DESC LIMIT 3"); if(mysql_num_rows($new_comi)<1){ echo "

Derzeit existieren keine Kommentare...

"; } echo "
    "; // News ausgeben ausgeben while($row_c = mysql_fetch_object($new_comi)){ echo "
  • ".$row_c->id."."; echo substr($row_c->comment, 0, 80)." [..]
    \n"; echo "
    \n"; echo "id."\">Bearbeiten \n"; echo "id."\">[x]\n"; echo "
    \n "; echo "".$row_c->name." » ".$row_c->datum."\n"; echo "
  • \n"; } // close while echo "
"; //-------------------------------------------------------- // Logout //-------------------------------------------------------- if($action == 'logout'){ session_unset(); // Sessionvariable loeschen session_destroy(); // Session zerstoeren header("Location: admin.php"); // Weiterleitung } }else{ ?>
Grafixx Login




Step 6 - admin.php


Die Datei admin.php listet alle bisher geschriebenen Artikel auf, sie ist die Seite auf die jemand weitergeleitet wird, sofern man nicht eingeloggt ist, dieser bekommt dann einen Hinweis zu sehen, dass er sich doch bitte einzuloggen hat ;)
NewsArtikel\n";

// DB Abfragen
$abfrage = mysql_query("SELECT id FROM news");
$total = mysql_num_rows($abfrage); 					// Anzahl aller Zeilen in DB ermitteln

// ---------------------- Seitennavigationsdaten --------------------------------------------------

$per_page = "10";      // Anzahl der Links die Pro Seite angezeigt werden sollen
$p = "3";                  // Anzahl der Links die in der Seitenavigation ausgegeben werden

isset($_GET['go']) ? $go = clean_it($_GET['go']) : $go = ''; // Variable definieren

// Blaetterfunktion aufrufen 
list ($start, $ende) = get_navi($go, $total, $pfad.'?go=', false, $per_page, $p);

// ---------------------- ENDE Seitennavigationsdaten----------------------------------------------

$abfrage = mysql_query("SELECT id, title, news, DATE_FORMAT(date, '%d.%m.%Y') AS datum FROM news ORDER BY id DESC LIMIT $start,$ende");

if($total < 1){ // Pruefen ob Eintraege vorhanden
	
	echo "

Bisher existieren keine Newsartikel ...

"; }else{ echo "
    "; // News ausgeben ausgeben while($row = mysql_fetch_object($abfrage)){ // Anzahl der Kommentare ermitteln $comments = mysql_query("SELECT id FROM comments WHERE news_id='$row->id'"); $com_num = mysql_num_rows($comments); // Anzahl der Kommentare echo "
  • "; echo "
    \n"; echo "id."\">Bearbeiten \n"; echo "id."\">[x]\n"; echo "
    \n "; echo "".$row->id.". ".$row->title."\n"; echo "

    ".substr($row->news, 0, 80)." [...]

    \n"; echo "".$row->datum." » id."\">".$com_num." Kommentar(e)\n"; echo "\n
  • \n"; } // close while echo "
\n

"; // ---------------------- Seitennavigation ausgeben ------------------------------------------ // Blaetterfunktion aufrufen = > Ausgeben get_navi($go, $total, $pfad.'?go=', true, $per_page, $p); } // close Eintrage vorhanden //------------------------------------------------------------------------------ }else{ // Sofern nicht eingeloggt ... echo "

Zugriff verweigert ...

"; echo "

Du musst eingeloggt sein, um diese Seite aufrufen zu koennen ...

"; } // close eingeloggt include('footer.php'); // Footer einbinden ?>


Step 7 - post_news.php


Die Datei post_news.php ist zum Einen zum Erstellen eines neuen Artikels zustaendig, sowie als auch zur Bearbeitung eines bestehenden Artikels
 Fehlermeldung
			echo get_error('Der Eintrag konnte leider nicht geloescht werden! ".mysql_error()."');
	}
}
//------------------------------------------------------------------------------
// Formular auswerten
//------------------------------------------------------------------------------

if(isset($_POST['submit'])){ // Sofern Eintragen gedrueckt

	$title = clean_it($_POST['title']); // Variable definieren
	$news = clean_it($_POST['news']);   // Variable definieren
	$autor = clean_it($_SESSION['user']);			// Variable definieren
	
	if(empty($title) || empty($news) || empty($autor)){ // pruefen ob alles ausgefuellt wurde

		echo get_error('Bitte Danke alle benoetigten Felder ausfuellen!');
		
	}else{ // wenn alles ausgefuellt wurde
	
		// Kategorien
		if(empty($_POST['new_cat'])){$cat = clean_it($_POST['cat']);}else{$cat = clean_it($_POST['new_cat']);}
	
		if(($_GET['action']) == 'edit'){ // Wenn action == edit

			$eintragen = mysql_query("UPDATE news SET autor='$autor', title='$title', news='$news', cat = '$cat' WHERE id='$id' ");

		}else{ // wenn action = new

			$eintragen = mysql_query("INSERT INTO news (autor, title, news, cat, date) VALUES ('$autor','$title','$news','$cat', now())");
			
		}// close action
	
		if($eintragen){ // Sofern Eintrag geklappt hat
		
			header("Location: admin.php"); // Weiterleitung 
		
		}else{ // Wenn Eintrag nicht geklappt hat => Fehlermeldung
			echo get_error('Der Eintrag war leider nicht erfolgreich! ".mysql_error()."');
		}
		
	}// close empty
		
}// close isset

//------------------------------------------------------------------------------

if($action == 'edit'){ // Headline fuers Formular ermitteln
	$headline = "Artikel ".$id." bearbeiten";
}else{
	$headline = "Artikel verfassen";
}// close Headline ermitteln

//------------------------------------------------------------------------------
// Formular ausgeben
//------------------------------------------------------------------------------
?>




\n"; echo ""; echo ""; while($rows = mysql_fetch_object($query)){ echo ""; } echo "
\n"; } ?> Neue Kategorie erstellen





Step 8 - show_comments.php


Die Datei show_comments.php listet alle bisher verfassen Kommentare auf und biete jeweils immer einen Link zum Bearbeiten und zum Loeschen eines Kommentares an
Kommentare zu Artikel ".$id."\n";

	// News auslesen
	$result = mysql_query("SELECT id, name, url, comment, DATE_FORMAT(date, '%d.%m.%Y') AS datum FROM comments WHERE news_id ='$id'");
	$pfad = "show_comments.php?id=".$id."&go="; // URL => Seitennavigation
	
}else{

	echo "

Kommentare

\n"; // News auslesen $result = mysql_query("SELECT id, name, url, comment, DATE_FORMAT(date, '%d.%m.%Y') AS datum FROM comments"); $pfad = "show_comments.php?go="; } $total = mysql_num_rows($result); // Anzahl aller Zeilen in DB ermitteln // ---------------------- Seitennavigationsdaten -------------------------------------------------- $per_page = "5"; // Anzahl der News die Pro Seite ausgegeben werden sollen $p = "5"; // Anzahl der Links die in der Seitenavigation ausgegeben werden isset($_GET['go']) ? $go = clean_it($_GET['go']) : $go = ''; // Variable definieren // Blaetterfunktion aufrufen = > Ausgeben list ($start, $ende) = get_navi($go, $total, $pfad, false, $per_page, $p); // ---------------------- ENDE Seitennavigationsdaten---------------------------------------------- if(isset($_GET['id'])){ $abfrage = mysql_query("SELECT id, name, url, comment, email, ip, DATE_FORMAT(date, '%d.%m.%Y') AS datum FROM comments WHERE news_id ='$id' ORDER BY date DESC LIMIT $start, $ende"); }else{ $abfrage = mysql_query("SELECT id, name, url, comment, email, ip, DATE_FORMAT(date, '%d.%m.%Y') AS datum FROM comments ORDER BY date DESC LIMIT $start, $ende"); } if($total < 1){ // Pruefen ob Eintraege vorhanden echo "

Zur Zeit existieren keine Kommentare ...

"; }else{ echo "
    "; // Kommentare ausgeben ausgeben while($row = mysql_fetch_object($abfrage)){ if(empty($row->url)){ // Pruefen ob Website angegeben $autor = $row->name; // Variable definieren }else{ // Wenn Website angegeben $autor = "url."\">".$row->name.""; } echo "
  • "; echo "
    \n"; echo "id."\">Bearbeiten \n"; echo "id."\">[x]\n"; echo "
    \n "; echo "

    ".substr($row->comment, 0, 80)." [...]

    \n"; echo "von ".$autor." - ".$row->email." am ".$row->datum." | ".$row->ip."\n"; echo "\n
  • \n"; } // close while echo "
\n
"; // -------------------------------------- Seitennavigation ausgeben ---------------------------- // Blaetterfunktion aufrufen = > Ausgeben get_navi($go, $total, $pfad, true, $per_page, $p); // -------------------------------------- Seitennavigation ende -------------------------------- } // close Eintrage vorhanden include('footer.php'); // footer einbinden ?>


Step 9 - edit_comments.php


Die Datei edit_comments.php ist fuer das Bearbeiten und Loeschen eines Kommentares zustaendig
 Fehlermeldung
			echo "

Error ...

\n"; echo "

Der Eintrag konnte leider nicht geloescht werden! ".mysql_error()."

\n
\n"; } } //------------------------------------------------------------------------------ // Kommentar bearbeiten //------------------------------------------------------------------------------ if(isset($_POST['submit'])){ // Sofern Eintragen gedrueckt $name = clean_it($_POST['name']); // Variable definieren $email = clean_it($_POST['email']); // Variable definieren $url = clean_it($_POST['url']); // Variable definieren $comment = clean_it($_POST['comment']); // Variable definieren if(empty($name) || empty($email) || empty($comment)){ // pruefen ob alles ausgefuellt wurde echo "

Error ...

\n"; echo "

Bitte Danke alle benoetigten Felder ausfuellen!

\n
\n"; }else{ // wenn alles ausgefuellt wurde $eintragen = mysql_query("UPDATE comments SET name='$name', email='$email', url='$url', comment='$comment' WHERE id='$id' "); if($eintragen){ // Sofern Eintrag geklappt hat header("Location: show_comments.php"); // Weiterleitung }else{ // Wenn Eintrag nicht geklappt hat => Fehlermeldung echo "

Error ...

\n"; echo "

Da lief was schief ... ".mysql_error()."

\n
\n"; } }// close empty }// close isset // Kommentar aus DB holen $abfrage = mysql_query("SELECT name, email, url, comment FROM comments WHERE id='$id'"); $row = mysql_fetch_object($abfrage); //------------------------------------------------------------------------------ // Formular ausgeben //------------------------------------------------------------------------------ ?>
Kommentar bearbeiten






Step 10 - cats.php


Die Datei cats.php listet alle existierenden Kategorien auf und ist fuer das Bearbeiten und Loeschen einer Kategorie zustaendig

Kategorie bearbeiten
Kategorien\n"; // DB Abfrage $abfrage = mysql_query("SELECT DISTINCT cat FROM news WHERE cat != ''"); $total = mysql_num_rows($abfrage); // Anzahl aller Zeilen in DB ermitteln if($total < 1){ // Pruefen ob Eintraege vorhanden echo "

Zur Zeit existieren keine Kategorien ...

"; }else{ echo "
    "; // Kategorien ausgeben ausgeben while($row = mysql_fetch_object($abfrage)){ echo "
  • "; echo "
    \n"; echo "cat)."\">Bearbeiten \n"; echo "cat)."\">[x]\n"; echo "
    \n "; echo "

    ".$row->cat."

  • \n"; } // close while echo "
\n
"; } // close Eintrage vorhanden }// close $action include('footer.php'); // footer einbinden ?>


Step 11 - news.php


Die Datei news.php ist fuer die Oeffentlichkeit bestimmt, sie ist fuer die Ausgabe der News zustaendig. Hier muss darauf geachtet werden, dass die Pfade der einzelnen include() Befehle u.U. angepasst werden muessen, sofern die Datei nicht im selben Ordner liegt wie die einzubindenden Dateien!




	GrafixxNews

	
	
	

	



	
Abgelegtes unter '".clean_it($_GET['cat'])."'"; $pfad = "news.php?cat=".urlencode(clean_it($_GET['cat']))."go="; }else{ $pfad = "news.php?go="; } // News auslesen $abfrage = mysql_query("SELECT id FROM news ".$where.""); $total = mysql_num_rows($abfrage); // Anzahl aller Zeilen in DB ermitteln // ---------------------- Seitennavigationsdaten -------------------------------------------------- $per_page = "5"; // Anzahl der News die Pro Seite ausgegeben werden sollen $p = "5"; // Anzahl der Links die in der Seitenavigation ausgegeben werden isset($_GET['go']) ? $go = clean_it($_GET['go']) : $go = ''; // Variable definieren // Blaetterfunktion aufrufen list ($start, $ende) = get_navi($go, $total, $pfad, false, $per_page, $p); // ---------------------- ENDE Seitennavigationsdaten---------------------------------------------- $abfrage = mysql_query("SELECT id, autor, title, cat, news, DATE_FORMAT(date, '%d.%m.%Y') AS datum FROM news ".$where." ORDER BY date DESC LIMIT $start,$ende"); // News ausgeben ausgeben while($row = mysql_fetch_object($abfrage)){ // Anzahl der Kommentare ermitteln $comments = mysql_query("SELECT id FROM comments WHERE news_id='$row->id'"); $com_num = mysql_num_rows($comments); // Anzahl der Kommentare echo "
\n"; echo "

".$row->title."\n verfasst von ".$row->autor." am ".$row->datum." | \n"; if(!empty($row->cat)){ // sofern Kategorie angegeben echo "abgelegt unter: cat)."\">".$row->cat." | \n"; } echo "id."\">Kommentare ".$com_num."\n

"; if(isset($_GET['cat'])){ // Kategorieseite nur einen Auszug ausgeben $max_show = "250"; // max 450 Zeichen anzeigen if (strlen($row->news) > $max_show){ // sofern $news mehr als 450 Zeichen enthaelt echo "

".bbcode(substr($row->news, 0, strpos($row->news, ".", 120 )+1 ))."\n"; // Ab 150 Zeichen nach nem punkt suchen und alles das was davor enthalten ist ausgeben echo "id."\" class=\"right\">read more...\n"; echo "

"; // link ausgeben }else{ // komplett ausgeben echo "

".bbcode($row->news)."

"; } }else{ echo "

".bbcode($row->news)."

"; } echo "
\n"; } // close while // -------------------------------------- Seitennavigation ausgeben ---------------------------- get_navi($go, $total, $pfad, true, $per_page, $p); // -------------------------------------- Seitennavigation ende -------------------------------- ?>


Step 12 - comments.php


Die Datei comments.php listet die einzelnen Kommentare zu einem Artikel, sowahl als auch den Artikel selbst nochmals auf und bietet leichzeitig die Moeglickeit den Artikel zu kommentieren. Hier gilt das selbe wie schon bei der Datei news.php sofern sich die Datei nicht im selben Ordner wie, die Dateien befindet, die eingebunden werden, muessen die Pfadangaben des jeweiligen include(); Befehls angepasst werden!





	GrafixxNews

	
	
	

	



	
Fehlermeldung echo "

Error ...

\n"; echo "

Es wurde keine ID uebermittelt ...

\n
\n"; }else{ // Wenn ID uebergeben wurde $id = clean_it($_GET['id']); // Variable definieren $pfad = "comments.php?id=".$id."&go="; // aktuellen Dateipfad ermitteln // Artikel abrufen $artikel = mysql_query("SELECT id, autor, title, news, DATE_FORMAT(date, '%d.%m.%Y') AS datum FROM news WHERE id='$id'"); // Artikel ausgeben ausgeben while($row = mysql_fetch_object($artikel)){ echo "
\n"; echo "

".$row->title."

\n"; echo "

".bbcode($row->news)."

"; echo "
\n"; } // close while echo "

Kommentare

"; // Kommentare abfragen $result = mysql_query("SELECT id FROM comments WHERE news_id='$id'"); $total = mysql_num_rows($result); // Anzahl aller Zeilen in DB ermitteln // ---------------------- Seitennavigationsdaten -------------------------------------------------- $per_page = "5"; // Anzahl der News die Pro Seite ausgegeben werden sollen $p = "5"; // Anzahl der Links die in der Seitenavigation ausgegeben werden isset($_GET['go']) ? $go = clean_it($_GET['go']) : $go = ''; // Variable definieren list ($start, $ende) = get_navi($go, $total, $pfad, false, $per_page, $p); // ---------------------- ENDE Seitennavigationsdaten---------------------------------------------- $abfrage = mysql_query("SELECT id, name, email, url, comment, DATE_FORMAT(date, '%d.%m.%Y') AS datum FROM comments WHERE news_id='$id' ORDER BY date DESC LIMIT $start,$ende"); if($total < 1){ // Pruefen ob Eintraege vorhanden echo "

Bisher sind noch keine Kommentare vorhanden ...

"; }else{ echo "
    "; // Kommentare ausgeben ausgeben while($row = mysql_fetch_object($abfrage)){ if(empty($row->url)){ // Pruefen ob Website angegeben $autor = $row->name; // Variable definieren }else{ // Wenn Website angegeben $autor = "url."\">".$row->name.""; } $default = "http://www.deine-seite.de/default.jpg"; // Standard GRAVATAR Icon - BITTE ANGEBEN $grav_url = "http://www.gravatar.com/avatar/".md5(strtolower(trim($row->email)))."?d=".urlencode($default)."&s=40"; echo "
  • \n"; echo ""; echo "

    ".bbcode($row->comment)."

    \n"; echo "schreib ".$autor." am ".$row->datum."\n"; echo "\n
  • \n"; } // close while echo "
\n
"; // -------------------------------------- Seitennavigation ausgeben ---------------------------- // Blaetterfunktion aufrufen = > Ausgeben get_navi($go, $total, $pfad, true, $per_page, $p); // -------------------------------------- Seitennavigation ende -------------------------------- } // close Eintrage vorhanden //------------------------------------------------------------------------------ // Kommentar verfassen //------------------------------------------------------------------------------ if(isset($_POST['submit'])){ // Sofern Submit gedrueckt $name = clean_it($_POST['name']); // Variable definieren $email = clean_it($_POST['email']); // Variable definieren $url = clean_it($_POST['url']); // Variable definieren $comment = clean_it($_POST['comment']); // Variable definieren $math = clean_it($_POST['math']); // Variable definieren $ip = clean_it($_SERVER['REMOTE_ADDR']);// Variable definieren if(empty($name) || empty($email) || empty($comment) || empty($math)){ // pruefen ob alles Benoetigte ausgefuellt wurde echo get_error('Bitte Danke alle benoetigten Felder ausfuellen!'); }else{ // wenn alles Benoetigte ausgefuellt wurde if($math != 7){ // Antispam-Rechnung pruefen echo get_error('Die hast die Rechenaufgabe nicht korrekt geloest!'); }else{ // Wenn richtig gerechnet wurde if (!(eregi("^.+@.+\..+$", $email))){ // Email Adresse auf korrektheit pruefen echo get_error('Du hast keine korrekte E-Mail Adresse angegeben!'); }else{ // Sofern ne korrekte Email Adresse angegeben wurde if(!isset($_SESSION['login'])){ // Sofern NICHT eingeloggt => admin $comment = preg_replace("/\[video\](.*)\[\/video\]/Usi", "\1", $comment); // VIDEO BBCode rausfiltern } // Abfragen ob schon ein Kommentar in den letzen 2 Min zu diesem Artikel verfasst wurde... $check_ip = mysql_query("SELECT id FROM comments WHERE ip='$ip' AND news_id='$id' AND date > now() - INTERVAL 2 MINUTE "); if(mysql_num_rows($check_ip) > 1){ // sofern schon ein Kommentar in den letzen 2 Minuten => Warnung echo get_error('Du hast schon einen Kommentar in den letzen 2 Minuten hinterlassen!
Probier es doch spaeter noch mal ;)'); }else{ // sofern noch kein Kommentar in den letzen 2 Min verfasst $eintragen = mysql_query("INSERT INTO comments (name, email, url, comment, news_id, date, ip) VALUES ('$name','$email', '$url', '$comment', '$id', now(), '$ip')"); if($eintragen){ // Sofern Eintrag geklappt hat header("Location: ".$pfad."?id=".$id.""); // Weiterleitung }else{ // Wenn Eintrag nicht geklappt hat => Fehlermeldung echo get_error(' Der Eintrag war leider nicht erfolgreich! ".mysql_error()."'); } } // close check_ip } // close check email } // close Antispam }// close empty }// close isset //------------------------------------------------------------------------------ // Formular ausgeben //------------------------------------------------------------------------------ ?>

Kommentar hinterlassen




Die Summe aus 5 + 2 =



Die in der get_bbcode Funktion genutzen Grafiken koennen hier heruntergeladen werden.
Credit: FamFamFam - Silk Icons

Wir haben also nun folgende Dateien:


- config.inc.php - Baut die Verbindung zur DB auf u. enthaelt u.a. die Funktion zum 'Saeuber' von Daten welche mit der DB was zu tun haben
- header.php - enthaelt Zugriffsschutz und einen Teil des HTML-Grundgeruestes
- footer.php - enthaelt den anschliessenden Teil des HTML-Grundgeruestes
- sidebar.php - enthaelt den Login/Logout und die Navigation und listet die letzen Kommis auf
- admin.php - listet alle bisher verfassten Artikel auf
- post_news.php - ist zum Verfassen eines Artikel da, ebenso wie zum Bearbeiten
- cats.php - listet alle existierenden Kategorien auf, ist zum Bearbeiten/Loeschen einer Kategorie da
- show_comments.php - listet alle bisher verfassen Kommentare auf
- edit_comments.php - ist zum Bearbeiten/Loeschen eines Kommentares da

- news.php - listet die NewsArtikel auf
- comments.php - listet die Kommentare zu einem Artikel auf, mit Kommentarfunktion, welche Gravatar unterstuetzt

Wichtig

All diese Dateien sollte sich in ein und dem selben Ordner befinden, ggf. muessen sonst die einzelnen Pfadangaben angepasst werden!


Zusaetzlich wird noch eine CSS Datei benoetigt,
welche die Darstellung des Ganzen etwas auffrischt, diese kann hier heruntergeladen werden ;)

Tutorial Dateien Downloaden

Viel Spass damit,
sollten Fragen zum Newssystem auftauchen oder gar Probleme damit bestehen, bitte die Kommentarfunktion hier nutzen ;)

Hinweis: Dieses Tutorial wurde am 01.03.2012 vom Autor ueberarbeitet - BBCode Darstellungsproblem des Archives behoben
Hinweis: Dieses Tutorial wurde am 01.02.2012 vom Autor ueberarbeitet - u.a. Kategorien hinzugefuegt, Gravatar Unterstuetzung eingebaut
Hinweis: Dieses Tutorial wurde am 07.05.2009 vom Autor ueberarbeitet - u.a. BBCode hinzugefuegt
Hinweis: Dieses Tutorial wurde am 11.09.2009 vom Autor ueberarbeitet...

Kommentar schreibenHinterlasse einen Kommentar

Du musst angemeldet sein, um einen Kommentar zu hinterlassen...

Du bist noch kein Mitglied von Alice-Grafixx.de?
Dann kannst du dich hier kostenlos registrieren ...


Neuste Tutorials

Neuste Forenthemen

Neuste Kommentare

Affiliates:   The Seduction  •   Blue-Graphics  •   Pat DG  •   Gallery Yuri  •   Design Grafixx  •   Colorful Gfx  •   Chibi Graphics  • Show all ...
designenlassen.de - Der Design-Marktplatz für Webdesign, Logo-Design, Flyerdesign u.v.m.        ALL-INKL.COM - Webhosting Server Hosting Domain Provider