Newssystem ...

P

P_F

Hey, ich habe ein Newsskript geschrieben:

Hier das Kernstück und danach eine kurze erläuterung in Worten.
Vorerst: es funktioniert alles :D

PHP:
<?
// FUNKTION FÜR NEUE NEWS
function NewNews() {
	global $tpl;
	// Cookie setzen zum eindeutigen identifizieren DIESER News
	if(!empty($_COOKIE['newnewsid'])) {
		$query = mysql_query('SELECT ID FROM news WHERE ID = '.$_COOKIE['newnewsid'].' AND tmp = 1');
		if(mysql_num_rows($query) != 1) {
		  mysql_query('INSERT INTO news (active,tmp) VALUES (0,1)');
		  setcookie('newnewsid',mysql_insert_id());
		}
	}
	else {
		mysql_query('INSERT INTO news (active,tmp) VALUES (0,1)');
		setcookie('newnewsid',mysql_insert_id());
	}
	
	$newnewsid = $_COOKIE['newnewsid'];
	$topic     = $_POST['newstopic'];
	$title     = strip_tags($_POST['newstitle']);
	$comments  = $_POST['comments'];
	$newsintro = strip_tags($_POST['newsintro']);
	$newstext  = strip_tags($_POST['newstext']);
	
  $newsimg = GetNewsImg($newnewsid);
	if(!empty($newsimg)) {
		$tpl->assign('NewsImgPath', GetModConf('News','NewsImgFolder'));
		$tpl->assign('img', 't_'.$newsimg);	
	}
	
	
	$tpl->assign('title',$title);
	$tpl->assign('newsintro',$newsintro);	
	$tpl->assign('newstext',$newstext);
	
	// Kommentare
	$tpl->assign('comments_1','checked');
	if($_POST['comments'] == 1)
		$tpl->assign('comments_1','checked');
	if($_POST['comments'] == 'x')
		$tpl->assign('comments_0','checked');	
		
	
	
	// News speichern
	if($_POST['save_news']) {
		// Titel
		if(empty($title)) {
			$tpl->assign('title_err','Sie müssen einen Newstitel eingeben');
		  $err = 1;
		}
		// Aufmachertext
		if(empty($newsintro)) {
			$tpl->assign('newsintro_err','Sie müssen einen Aufmachertext eingeben');
			$err = 1;
		}
	}
	
	// Bild speichern
	if($_POST['add_img']) {
		if(!empty($_FILES['file'])) {
			DeleteNewsImg($newnewsid);
			$uniid = md5(uniqid (rand()));
			$img = upload_resize_thumb_image($_FILES['file'],GetModConf('News','NewsImgFolder'),600,100,$uniid.'_'.$newnewsid,'t_'.$uniid.'_'.$newnewsid,GetModConf('News','AllowedImgFormat'),700000);
			if(!empty($img['err']))
				$tpl->assign('img_err',$img['err']);		
			else {
				$tpl->assign('NewsImgPath', GetModConf('News','NewsImgFolder'));
			  $tpl->assign('img', 't_'.$uniid.'_'.$newnewsid.'.'.$img['imgext']);
			  mysql_query('UPDATE news SET newsimg = 1');
			  mysql_query('UPDATE news SET imgpath = "'.$uniid.'_'.$newnewsid.'.'.$img['imgext'].'" WHERE ID = '.$newnewsid);
			}
		} 		
	}
	
	// Bild löschen
	if($_POST['del_img']) {
		DeleteNewsImg($newnewsid);	
		$tpl->assign('img','');	
	}
	
	// Morelinks speichern
	if($_POST['add_morelink']) 
	  SaveMorelink($newnewsid,$_POST['morelink_text'],$_POST['morelink_url']);
	  
	// Morelinks löschen
	if($_POST['delete_selected']) 
	  DeleteSelected($newnewsid);
	  
	if(!empty($newnewsid))
		$tpl->assign('MorelinkList',MorelinkList($newnewsid));
		
	subline('Neue News verfassen');
	$tpl->display(TPL.'Admin/NewNews.html');
}

?>

So:
- Zu Beginn dieser Funktion wird geschaut, ob schon ein Cookie existiert mit Namen newnewsid.
- Wenn nicht, wird in der Tabelle news eine neue Zeile angelegt und die insert_id als cookie newnewsid gespeichert.
- nun sind alle nachfolgenden aktionen z.b. bildvorschau und weiterführene Links an diese eine ID gebunden.

Nun zu meinem Problem ...

Wenn nun der Newsautor die News nicht zuende schreibt oder abbricht, dann sammeln sich in der tabelle von zeit zu zeit leere zeilen an.

Wie kann ich dies verhindern.
 
Du könntest z.B. die leeren Zeilen von Zeit zu Zeit löschen ;) Oder schauen ob es schon eine leere Zeile gibt die älter ist als x Stunden/Tage/Jahre und dann diese verwenden anstatt eine neue anzulegen.
 
Ja, das ahbe ich auch schon überlegt, aber das Newsskript wird in einem CMS verwendet. Also es kann passieren, dass mehrere User gleichzeitig News schreiben. Dann könnte es zu komplikationen kommen ...
 
Du kannst ja einfach die Zeit und das Datum mitspeichern, und dann nur die Datensätze löschen die älter als z.b. eine Woche sind ;) Ich denke nicht das ein User eine Woche braucht um einen Artikel zu verfassen ;)
 
stimmt, das würde gehen. Und bei jedem Aufruf des newsskriptes die einträge löschen, wo z.B. temp = 1 und das datum älter als eine woche ist -> das geht. Danke
 
Zurück