Loading...   Upload Image

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

Verfasst von Alice am 04.05.2009 - wurde schon 36231 mal gelesen

Kategorie: PHP/MySQL
Bewertung:
35x bewertet
Schwierigkeit: mittel
Kommentare: [ 41 ]

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.
<?php // config.inc.php

//---------------------------
$host = "localhost";        // Adresse des Datenbankservers, fast immer localhost
$dbuser = "";    // Dein MySQL Benutzername
$dbpass = "";    // Dein MySQL Passwort
$dbase = "";  // Name der Datenbank
//---------------------------

$connection = mysql_connect($host,$dbuser,$dbpass) OR DIE ("Keine Verbindung zu der Datenbank moeglich.");
$db = mysql_select_db($dbase , $connection) OR DIE ("Auswahl der Datenbank nicht moeglich."); 

error_reporting(E_ALL ^ E_NOTICE);

//-----------------------------------------------------------------------------------------------
// Funktion um die DB-Eintraege zu pruefen => 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 = "<div class=\"error\"><h2>Error ...</h2>\n<p>".$var."</p>\n</div>\n";
	return $fehler; 
}

// Funktion um no error ausgeben
function get_okay($var){
 	$fehler = "<div class=\"no_error\"><h2>Prima ...</h2>\n<p>".$var."</p>\n</div>\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[] = "<a href=\"".$pfad."".$first."\" title=\"Zur ersten Seite springen\">&laquo; Erste ...</a>\n";      
	}      
	
	if($go != 1){ // Link definieren => eine Seite zurueck blaettern          
	    $prev = $go-1;
	    $links[] = "<a href=\"".$pfad."".$prev."\" title=\"Eine Seite zurueck blaettern\">&laquo;</a>\n";     
	}   
	       
	for($i = $off; $i <= ($go + $danach); $i++){ // einzelne Seitenlinks erzeugen
	
	  if ($i != $go){  // Link definieren            
	  
	        $links[] = "<a href=\"".$pfad."".$i."\">$i</a>\n";
	        
	  }elseif($i == $seiten) { // aktuelle Seite, ein Link ist nicht erforderlich             
	        
	        $links[] = "<span class=\"current\">$i</span>\n";  
	        
	  }elseif($i == $go){ // aktuelle Seite, ein Link ist nicht erforderlich             
	  
	        $links[] = "<span class=\"current\">$i</span>\n";
	        
	  } // close if $i      
	}// close for                
	
	if($go != $seiten){ // Link definieren => eine Seite weiter blaettern       
	    $next = $go+1;
	    $links[] = "<a href=\"".$pfad."".$next."\" title=\"Eine Seite weiter blaettern\">&raquo;</a>\n";
	}      
	    
	if($seiten - $go - $p > 0 ){ // Link definieren => Zur letzen Seite springen   
	    $last = $seiten; 
	    $links[] = "<a href=\"".$pfad."".$last."\" title=\"Zur letzten Seite springen\">... Letzte &raquo;</a>\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 "<div id=\"navigation\">\n";
		
		 echo "<span class=\"pages\">Seite $go von $seiten</span>\n";
		
		 echo $link_string; // Ausgabe der Seitennavigation
		    
		 echo "</div> \n";
	} //close ausgabe
	// -------------------------------------- Seitennavigation ende -------------------------------- 

  return array($start, $ende);
 
} // close function

//-----------------------------------------------------------------------------------------------
// BB Code funktion
//-----------------------------------------------------------------------------------------------
function bbcode($bb){
	$php_header = '<div class="php">';
	$php_footer = '</div>';
	
 	// PHP Code zwischenspeichern
      $c = md5(time());
      preg_match_all("/\[php\](.*?)\[\/php\]/si", $bb, $results);
      for($i=0;$i<count($results[1]);$i++) {
          $bb = str_replace($results[1][$i], $c.$i.$c, $bb);
      }

	// Formatierung
	$search[] = '[b]';
	$search[] = '[/b]';
	$search[] = '[i]';
	$search[] = '[/i]';
	$search[] = '[u]';
	$search[] = '[/u]';
	$search[] = '[quote]';
	$search[] = '[/quote]';
	$search[] = '[left]';
	$search[] = '[/left]';
	$search[] = '[right]';
	$search[] = '[/right]';
	$search[] = '[center]';
	$search[] = '[/center]';
	$search[] = '[code]0[/code]';

	$replace[] = '<b>';
	$replace[] = '</b>';
	$replace[] = '<i>';
	$replace[] = '</i>';
	$replace[] = '<u>';
	$replace[] = '</u>';
	$replace[] = '<blockquote>';
	$replace[] = '</blockqoute>';
	$replace[] = '<div style="text-align: left">';
	$replace[] = '</div>';
	$replace[] = '<div style="text-align: right">';
	$replace[] = '</div>';
	$replace[] = '<div style="text-align: center">';
	$replace[] = '</div>';
	$replace[] = '<pre class="code">';
	$replace[] = '</pre>';

	$bb = str_replace($search, $replace, $bb);
	
	$search = array();
	$replace = array();
	
	$bb = preg_replace("/\[color=(.*)\](.*)\[\/color\]/Usi", "<span color=\"\1\">\2</span>", $bb);
	$bb = preg_replace("/\[email=(.*)\](.*)\[\/email\]/Usi", "<a href=\"mailto:\1\">\2</a>", $bb); 	
	$bb = preg_replace("/\[url=(.*)\](.*)\[\/url\]/Usi", "<a href=\"\1\">\2</a>", $bb); 	
	$bb = preg_replace("/\[img\](.*)\[\/img\]/Usi", "<img src=\"\1\" alt=\"\" \>", $bb); 	

	$bb = nl2br($bb);

// PHP Code highlighten	
 for($i=0;$i<count($results[1]);$i++) {
          ob_start();
          highlight_string(trim(html_entity_decode($results[1][$i])));
          $ht = ob_get_contents();
          ob_end_clean();
          
          $all = $php_header.$ht.$php_footer;

   		  $bb = preg_replace("/\[php\]".$c.$i.$c."\[\/php\]/siU", $all, $bb);       
 }

// Video => 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 = '<div class="bbcode">';
	$bb.= '<img onclick="add(\'[b] [/b]\');" style="cursor:pointer" src="images/bold.png" alt="fett" title="fett" />';
	$bb.= '<img onclick="add(\'[i] [/i]\');" style="cursor:pointer" src="images/italic.png" alt="krusiv" title="krusiv" />';
	$bb.= '<img onclick="add(\'[u] [/u]\');" style="cursor:pointer" src="images/underline.png" alt="unterstrichen" title="unterstrichen" />';
		
	$bb.= '<img onclick="add(\'[left] [/left]\');" style="cursor:pointer" src="images/left.png" alt="links ausrichten" title="links ausrichten" />';
	$bb.= '<img onclick="add(\'[center] [/center]\');" style="cursor:pointer" src="images/center.png" alt="zentriert" title="zentriert" />';
	$bb.= '<img onclick="add(\'[right] [/right]\');" style="cursor:pointer" src="images/right.png" alt="rechts ausrichten" title="rechts ausrichten" />';

	$bb.= '<img onclick="add(\'[url=] [/url]\');" style="cursor:pointer" src="images/link.png" alt="Link einfuegen" title="Link einfuegen"/>';
	$bb.= '<img onclick="add(\'[email=] [/email]\');" style="cursor:pointer" src="images/email.png" alt="Email Adresse einfuegen" title="Email Adresse einfuegen" />';
	$bb.= '<img onclick="add(\'[img] [/img]\');" style="cursor:pointer" src="images/img.png" alt="Bild einfuegen" title="Bild einfuegen" />';

	if($wo != "comi"){
		$bb.= '<img onclick="add(\'[video] [/video]\');" style="cursor:pointer" src="images/video.png" alt="Video Einfuegen" title="Video Einfuegen" />';
	}
	
	$bb.= '<img onclick="add(\'[quote] [/quote]\');" style="cursor:pointer" src="images/zitat.png" alt="Zitat einfuegen" alt="Zitat einfuegen" />';
	$bb.= '<img onclick="add(\'[code]1[/code]\');" style="cursor:pointer" src="images/code.png" alt="Code einfuegen" title="Code einfuegen" />';
	$bb.= "<img onclick='add(\"[p h p] [/p h p] \");' style='cursor:pointer' src='images/php.png' alt='PHP Code einfuegen title="PHP Code einfuegen" />';
	
	$bb.= '</div>';
	
	echo $bb;	
}
?>


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 ...
<?php // header.php
 
 session_start(); // Session starten
 
 include('config.inc.php'); 	// DB-Verbindung einbinden

 ob_start();    // startet den Ausgabepuffer 

 $pfad = $_SERVER['SCRIPT_NAME'];	// aktuellen Dateipfad ermitteln

 if(!isset($_SESSION['login']) AND (basename($pfad) != 'admin.php')){ // Sofern NICHT eingeloggt
 
	header("Location: admin.php"); // Weiterleitung 
 
 } 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
	<title>GrafixxNews</title>

	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
	<meta http-equiv="imagetoolbar" content="no" />
	<meta http-equiv="Content-Language" content="de" />

	<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>

<div id="ram">
	
	<div id="header">
		
		<ul id="navi">
				<li><a href="admin.php">Home</a></li>
				<li><a href="admin.php">News</a></li>
				<li><a href="cats.php">Kategorien</a></li>
				<li><a href="show_comments.php">Kommentare</a></li>
		</ul>

		<h1>GrafixxNews</h1>
	</div>
	
		
	<div id="content">


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...
</div>
	
<?php include('sidebar.php'); 

	ob_end_flush(); // leert/beendet den Ausgabepuffer
?>

	<div id="footer">
		<p class="right">  Valid <a href="http://validator.w3.org/check/referer" title="This page validates as XHTML 1.0 Transitional"><abbr 

title="eXtensible HyperText Markup Language">
		XHTML</abbr></a> | Valid <a href="http://jigsaw.w3.org/css-validator/check/referer" title="CSS ist valide!"><abbr title="Cascading Style 

Sheets">
		CSS</abbr></a>&nbsp;&nbsp;
		</p>
				
		<p><a href="http://unnecessary.de">GrafixxNews</a> · <a href="http://alice-grafixx.de">
		Alice-Grafixx.de</a></p>
	</div>	
		
	
</body>
</html>


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 ...
<?php // sidebar.php

 echo "<div id=\"sidebar\">\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 "<h2>Welcome ".$_SESSION['user']."<small>";
 echo "<a href=\"?action=logout\">Logout</a></small></h2>";

 echo "<p><a href=\"post_news.php\" class=\"the_button\">Neuen Artikel verfassen</a></p>";
 
 echo "<br />";

//--------------------------------------------------------
// Letzte Kommentare
//--------------------------------------------------------

 echo "<h2>Neusten Kommentare</h2>\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 "<p>Derzeit existieren keine Kommentare...</p>";
 }
 
 echo "<ul class=\"list\">";
 
 // News ausgeben ausgeben
while($row_c = mysql_fetch_object($new_comi)){
    
    echo "<li><strong>".$row_c->id.".</strong>";
    echo substr($row_c->comment, 0, 80)." [..] <br />\n";

	echo "<div class=\"right\">\n";
    echo "<a href=\"edit_comments.php?id=".$row_c->id."\">Bearbeiten</a>  \n";
    echo "<a href=\"edit_comments.php?action=loeschen&amp;id=".$row_c->id."\">[x]</a>\n";
    echo "</div>\n ";
		
    echo "<small>".$row_c->name." &#xBB; <span class=\"green\">".$row_c->datum."</span></small>\n";
    echo "</li>\n";

} // close while

echo "</ul>";


//--------------------------------------------------------
// Logout
//--------------------------------------------------------

if($action == 'logout'){
	session_unset();			// Sessionvariable loeschen	
	session_destroy();			// Session zerstoeren

	header("Location: admin.php"); // Weiterleitung 
}

}else{ 
?>

<form action="" method="post">
	<fieldset>
	<legend><span class="blue">Grafixx</span> Login</legend>
		<label>Name</label>
		<input type="text" name="log_user" /><br /> 

		<label>Passwort</label>
		<input type="password" name="log_pass" />
		<br /><br />

		<input type="submit" value="Login" name="submit_login" class="button"/>
	</fieldset>
</form>
<?php } /* Close login */ ?>

		</div>
	</div>


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 ;)
<?php // admin.php

include('header.php');		// header einbunden

if(isset($_SESSION['login'])){ // Sofern eingeloggt

echo "<h2>NewsArtikel</h2>\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 "<p>Bisher existieren keine Newsartikel ...</p>";
	
}else{

 echo "<ul class=\"list\">";

// 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 "<li>";
	echo "<div class=\"right\">\n";
    echo "<a href=\"post_news.php?action=edit&amp;id=".$row->id."\">Bearbeiten</a>  \n";
    echo "<a href=\"post_news.php?action=loeschen&amp;id=".$row->id."\">[x]</a>\n";
    echo "</div>\n ";
    
	echo "<strong><span class=\"green\">".$row->id.".</span> ".$row->title."</strong>\n";

			echo "<p>".substr($row->news, 0, 80)." [...]</p>\n";
	
	echo "<small>".$row->datum." &#xBB; <a href=\"show_comments.php?id=".$row->id."\">".$com_num." Kommentar(e)</a>\n";
	echo "</small>\n </li>\n";

} // close while

 echo "</ul>\n<br /><br />";

// ---------------------- Seitennavigation ausgeben ------------------------------------------

// Blaetterfunktion aufrufen = > Ausgeben
get_navi($go, $total, $pfad.'?go=', true, $per_page, $p);
 
} // close Eintrage vorhanden 

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

}else{ // Sofern nicht eingeloggt ...

 echo "<h2>Zugriff verweigert ...</h2>";
 echo "<p>Du musst eingeloggt sein, um diese Seite aufrufen zu koennen ...</p>";

} // 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
<?php // post_news.php

include('header.php');		// header einbunden

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

if(isset($_GET['id'])){ // Sofern ID uebergeben wurde

 $id = clean_it($_GET['id']); // Variable definieren

	// DB Abfrage der Daten
	$abfrage = mysql_query("SELECT title, news, cat FROM news WHERE id='$id'");
	$row = mysql_fetch_object($abfrage);
}
//------------------------------------------------------------------------------
// Newseintrag loeschen
//------------------------------------------------------------------------------

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

if($action == 'loeschen'){

	// Artikel loeschen
	$delete = mysql_query("DELETE FROM news WHERE id='$id'");

	// Kommentare zu diesem Artikel loeschen
	$delete_com = mysql_query("DELETE FROM comments WHERE news_id='$id'");
	
	if($delete AND $delete_com){ // Wenn Loeschung nicht erfolgt
	
		header("Location: admin.php"); // Weiterleitung 
		
	}else{ // Wenn Eintrag nicht geloescht wurde => 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
//------------------------------------------------------------------------------
?>
<script type="text/javascript">
/* Funtionn BBCode */
var n = 1;
function add(code) {
         document.getElementById('bbcode').news.value += " " + code ;
}
</script>

<form action="" method="post" id="bbcode">
	<fieldset>
		<legend><?php echo $headline; ?></legend>
		
		<label>Titel</label>
		<input type="text" name="title" value="<?php echo $row->title; ?>" />
		<br /><br />

		<label>Kategorie</label>
<?php // wenn vorhandene - Kategorien auslesen

    $query = mysql_query("SELECT DISTINCT cat FROM news WHERE cat != ''");

    if(mysql_num_rows($query) != '0'){

		echo "<select name=\"cat\" size=\"1\">\n";
		echo "<option value=\"\">Kategorie waehlen</option>";
		echo "<option value=\"\">---------------------</option>";

        while($rows = mysql_fetch_object($query)){
            echo "<option value=\"".$rows->cat."\">".$rows->cat."</option>";
        }
        
        echo "</select><br />\n";
    }
?>  			
		<input name="new_cat" type="text" value="<?php echo $row->cat;?>"/> <small>Neue Kategorie erstellen</small>
		<br /><br />

		<?php get_bbcode('admin'); /* BBCode ausgeben */ ?>
		
		<textarea rows="10" cols="85" name="news"><?php echo $row->news;?></textarea>
		<br /><br />

		<input type="submit" value="Eintragen" name="submit" class="button"/>
	</fieldset>
</form>

<?php
 include('footer.php');
?>


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
<?php // show_comments.php

include('header.php');		// header einbinden

if(isset($_GET['id'])){ // Wenn ID uebergeben wurde, alle Kommentare zu dieser news_ID ausgeben

	$id = clean_it($_GET['id']); // Variable definieren
	
	echo "<h2>Kommentare zu Artikel ".$id."</h2>\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."&amp;go="; // URL => Seitennavigation
	
}else{

	echo "<h2>Kommentare</h2>\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 "<p>Zur Zeit existieren keine Kommentare ...</p>";
}else{

 echo "<ul class=\"list\">";

	// 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 = "<a href=\"".$row->url."\">".$row->name."</a>";
		}
    
		echo "<li>";
		
		echo "<div class=\"right\">\n";
	    echo "<a href=\"edit_comments.php?id=".$row->id."\">Bearbeiten</a>  \n";
	    echo "<a href=\"edit_comments.php?action=loeschen&amp;id=".$row->id."\">[x]</a>\n";
	    echo "</div>\n ";
		
		
		echo "<p>".substr($row->comment, 0, 80)." [...]</p>\n";
		echo "<small>von ".$autor." - ".$row->email." am ".$row->datum." | ".$row->ip."\n";
		echo "</small>\n </li>\n";
	
	} // close while

 echo "</ul>\n<br />";

// -------------------------------------- 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
<?php // edit_comments.php

include('header.php');		// header einbunden

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

 $id = clean_it($_GET['id']); // Variable definieren

//------------------------------------------------------------------------------
// Kommentar loeschen
//------------------------------------------------------------------------------

if(($_GET['action']) == 'loeschen'){

	$delet = mysql_query("DELETE FROM comments WHERE id='$id' ");
	
	if($delet){ // Wenn Loeschung nicht erfolgt
	
		header("Location: show_comments.php"); // Weiterleitung 

	}else{ // Wenn Eintrag nicht geloescht wurde => Fehlermeldung
			echo "<div class=\"error\"><h2>Error ...</h2>\n";
			echo "<p>Der Eintrag konnte leider nicht geloescht werden! ".mysql_error()."</p>\n</div>\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 "<div class=\"error\"><h2>Error ...</h2>\n";
		echo "<p>Bitte Danke alle benoetigten Felder ausfuellen!</p>\n</div>\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 "<div class=\"error\"><h2>Error ...</h2>\n";
			echo "<p>Da lief was schief ... ".mysql_error()."</p>\n</div>\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
//------------------------------------------------------------------------------
?>
<script type="text/javascript">
/* Funtionn BBCode */
var n = 1;
function add(code) {
         document.getElementById('bbcode').comment.value += " " + code ;
}
</script>

<form action="" method="post" id="bbcode">
	<fieldset>
		<legend>Kommentar bearbeiten</legend>
		
		<label>Name</label>
		<input type="text" name="name" value="<?= $row->name; ?>" /><br />
		
		<label>Email</label>
		<input type="text" name="email" value="<?= $row->email; ?>" /><br />
		
		<label>URL</label>
		<input type="text" name="url" value="<?= $row->url; ?>" /><br />
		
		<?php get_bbcode('admin'); /* BBCode ausgeben */ ?>
		
		<textarea rows="5" cols="80" name="comment"><?= $row->comment; ?></textarea>
		<br /><br />
		
		<input type="submit" value="Speichern" name="submit" class="button" />
	</fieldset>
</form>

<?php
 include('footer.php');
?>


Step 10 - cats.php


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

include('header.php');		// header einbinden

//------------------------------------------------------------------------------
// Kategorie Bearbeiten
//------------------------------------------------------------------------------
if($_GET['action'] == 'edit'){ 

	if(isset($_POST['submit']) && !empty($_POST['cat'])){ // Sofern speichern gedrueckt
	   // DB Updaten
		$update = mysql_query("UPDATE news SET cat = '".clean_it($_POST['cat'])."' WHERE cat = '".clean_it($_GET['cat'])."' ");
		
		if($update){
				header("Location: cats.php"); // Weiterleitung 
		}
	} // close submit
?>
<form action="" method="post" id="bbcode">
	<fieldset>
		<legend>Kategorie bearbeiten</legend>
		
		<input type="text" name="cat" value="<?php echo clean_it($_GET['cat']); ?>" />
		<input type="submit" value="Speichern" name="submit" class="button"/>
	</fieldset>
</form>		

<?php
//------------------------------------------------------------------------------
// Kategorie loeschen
//------------------------------------------------------------------------------
}else if($_GET['action'] == 'delete'){ 

	// DB Updaten
	$update = mysql_query("UPDATE news SET cat = '' WHERE cat = '".clean_it($_GET['cat'])."' ");
	
	if($update){
		header("Location: cats.php"); // Weiterleitung 
	}

//------------------------------------------------------------------------------
// Kategorien auflisten
//------------------------------------------------------------------------------
}else{
	echo "<h2>Kategorien</h2>\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 "<p>Zur Zeit existieren keine Kategorien ...</p>";
	}else{

	 echo "<ul class=\"list\">";

		// Kategorien ausgeben ausgeben
		while($row = mysql_fetch_object($abfrage)){
	    
			echo "<li>";
			echo "<div class=\"right\">\n";
		    echo "<a href=\"cats.php?action=edit&amp;cat=".urlencode($row->cat)."\">Bearbeiten</a>  \n";
		    echo "<a href=\"cats.php?action=delete&amp;cat=".urlencode($row->cat)."\">[x]</a>\n";
		    echo "</div>\n ";
			echo "<p>".$row->cat."</p></li>\n";
	
		} // close while
	
	 echo "</ul>\n<br />";
 
	} // 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!
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
	<title>GrafixxNews</title>

	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
	<meta http-equiv="imagetoolbar" content="no" />
	<meta http-equiv="Content-Language" content="de" />

	<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>

	<div id="ram">
	
		<div id="header">
			<h1>GrafixxNews</h1>
		</div>
	
		
		<div id="content">
		
<?php // news.php

include('config.inc.php'); 	// DB-Verbindung einbinden

// Sofern Kategorie angegeben
if(isset($_GET['cat'])){ 

	$where = "WHERE cat = '".clean_it($_GET['cat'])."'"; 
	
	echo "<h2 class=\"blue\">Abgelegtes unter '".clean_it($_GET['cat'])."'</h2>";	

	$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 "<div class=\"news\">\n"; 
    echo "<h2>".$row->title."\n <small>verfasst von ".$row->autor." am ".$row->datum." | \n";
    
    if(!empty($row->cat)){  // sofern Kategorie angegeben
    	echo "abgelegt unter: <a href=\"news.php?cat=".urlencode($row->cat)."\">".$row->cat."</a> | \n";
    }
    echo "<a href=\"comments.php?id=".$row->id."\">Kommentare ".$com_num."</a></small>\n </h2>";

	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 "<p>".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 "<a href=\"comments.php?id=".$row->id."\" class=\"right\">read more...</a>\n";
			echo "<br style=\"clear: right;\" /></p>"; // link ausgeben
		}else{ // komplett ausgeben
			echo "<p>".bbcode($row->news)."</p>";
		}
	}else{
		echo "<p>".bbcode($row->news)."</p>";
	}
    echo "</div>\n";

} // close while

// -------------------------------------- Seitennavigation ausgeben ----------------------------

get_navi($go, $total, $pfad, true, $per_page, $p);

// -------------------------------------- Seitennavigation ende --------------------------------

?>

</div>
	
	</div>
	
	<div id="footer">
		<p class="right">Valid <a href="http://validator.w3.org/check/referer" title="This page validates as XHTML 1.0 Transitional">
		<abbr title="eXtensible HyperText Markup Language">XHTML</abbr></a> | 
		Valid <a href="http://jigsaw.w3.org/css-validator/check/referer" title="CSS ist valide!"><abbr title="Cascading Style Sheets">
		CSS</abbr></a>&nbsp;&nbsp;</p>
				
		<p><a href="http://unnecessary.de">GrafixxNews</a> · <a href="http://alice-grafixx.de">
		Alice-Grafixx.de</a></p>
	</div>	
		
	
</body>
</html>


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!
<?php // comments.php

include('config.inc.php'); 	// DB-Verbindung einbinden

 ob_start();    // startet den Ausgabepuffer 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
	<title>GrafixxNews</title>

	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
	<meta http-equiv="imagetoolbar" content="no" />
	<meta http-equiv="Content-Language" content="de" />

	<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>

	<div id="ram">
	
		<div id="header">
			<h1>GrafixxNews</h1>
		</div>
	
		
		<div id="content">
<?php

if(!isset($_GET['id'])){ // Sofern keine ID uebergeben wurde => Fehlermeldung
	
	echo "<div class=\"error\"><h2>Error ...</h2>\n";
	echo "<p>Es wurde keine ID uebermittelt ...</p>\n</div>\n";

}else{ // Wenn ID uebergeben wurde

$id = clean_it($_GET['id']); // Variable definieren
$pfad = "comments.php?id=".$id."&amp;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 "<div class=\"news\">\n"; 
	    echo "<h2>".$row->title."</h2>\n";
		echo "<p>".bbcode($row->news)."</p>";
	    echo "</div>\n";
	
	} // close while
	
	echo "<h2>Kommentare</h2>";

	// 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 "<p>Bisher sind noch keine Kommentare vorhanden ...</p>";
	}else{
	
	 echo "<ul class=\"list\">";
		
		// 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 = "<a href=\"".$row->url."\">".$row->name."</a>";
			}
			
			$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 "<li>\n";
			echo "<img src='".$grav_url."' alt='' class='go_left'/>";

	    
			echo "<p>".bbcode($row->comment)."</p>\n";
			echo "<small>schreib ".$autor." am ".$row->datum."\n";
			echo "</small>\n </li>\n";
		
		} // close while
	
	 echo "</ul>\n<br />";

// -------------------------------------- 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!<br />
									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
//------------------------------------------------------------------------------
?>
<br /><br />
<script type="text/javascript">
/* Funtionn BBCode */
var n = 1;
function add(code) {
         document.getElementById('bbcode').comment.value += " " + code ;
}
</script>

<form action="" method="post" id="bbcode">
	<fieldset>
		<legend>Kommentar hinterlassen</legend>
		
		<label>Name</label>
		<input type="text" name="name" value="<?= $name; ?>" /><br />
		
		<label>Email</label>
		<input type="text" name="email" value="<?= $email; ?>" /><br />
		
		<label>URL</label>
		<input type="text" name="url" value="<?= $url; ?>" /><br />
		
		<?php get_bbcode('comi'); /* BBCode ausgeben */ ?>

		<textarea rows="5" cols="50" name="comment"><?= $comment; ?></textarea>
		<br /><br />
		
		<label>AntiSpam</label>
		Die Summe aus 5 + 2 = <input type="text" name="math" style="width: 50px"/><br /><br />

		<input type="submit" value="Eintragen" name="submit" class="button"/>
	</fieldset>
</form>

</div>
<?php

}// close ID uebergeben

	ob_end_flush(); // leert/beendet den Ausgabepuffer
?>	
	</div>
	
	<div id="footer">			
		<p><a href="http://unnecessary.de">GrafixxNews</a> · <a href="http://alice-grafixx.de" titel="Photoshop Community">Alice-Grafixx.de</a></p>
	</div>	
		
	
</body>
</html>


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


Affiliates:   Design Grafixx  •   Chibi Graphics  •   Colorful Gfx  •   Gallery Yuri  •   Pat DG  •   The Seduction  •   Blue-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