WinFuture-Forum.de: Newssystem - Verbesserungsvorschläge Sind Erwünscht - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Newssystem - Verbesserungsvorschläge Sind Erwünscht


#1 Mitglied ist offline   Dyon 

  • Gruppe: aktive Mitglieder
  • Beiträge: 125
  • Beigetreten: 04. April 08
  • Reputation: 0

geschrieben 21. September 2008 - 19:01

Hallo zusammn
ich habe mal ein kliene Newssystem mit Kommentarfunktion geschreiben.
es gibt eine übersichtseite auf der alle news angezeigt werden und dann kann man da drauf klicken und kommt dann nochmal zu dem text, den kommentaren und ein feld wo man kommentare schreiben kann.
Bis jetzt liest es leider nur jeweils ein kommentar aus. Vllt. findet jemand den fehler.

hier die tabelle m4u_news

Zitat

id title text date name

hier die tabellem4u_newscomments

Zitat

id newsid name email ip comment date aktiv


so hier mal der code
<?
	//error_reporting(E_ALL);
	$link = mysql_connect("localhost","root","") or die ("Keine Verbindung moeglich"); 
	mysql_select_db("web120243") or die ("Die Datenbank existiert nicht");
	$action = $_GET['act'];

	if($action=="" | $action=="show") {
		$abfrage = "SELECT * FROM m4u_news"; 
		$ergebnis = mysql_query($abfrage); 
		while($row = mysql_fetch_object($ergebnis)) { 
			$title = $row->title; 
			//$date = date("d.m.Y H:i", $row->date); 
			$name = $row->name; 
			$text = $row->text;
			$id = $row->id;
			$date = $row->date;
			
			echo '<div class="gbentry">
					<div class="gbheading"><a href="?news='.$id.'&act=showcomment">'.$title.'</a></div>
					<div class="gbmain">' .$text.'</div>
					<div class="gbdate">eingetragen am: '.$date.' von '.$name.'</div></div>'; 
			} 
	}
		?><hr><?if($action=="showcomment") {
		$id=htmlentities($_GET['news']);
		$result = mysql_query("SELECT id, news FROM m4u_news");
		$sql_query = "SELECT * FROM m4u_news WHERE id LIKE '%".$id."%' ORDER BY id DESC LIMIT 1";
		$sql = mysql_query($sql_query);
		$row = mysql_fetch_object($sql);
		
		echo $row->text;
		
		?><hr><?
		$abfrage = "SELECT * FROM m4u_newscomments WHERE newsid LIKE '%".$id."%'"; 
		$ergebnis = mysql_query($abfrage); 
		while($row = mysql_fetch_object($ergebnis)) { 
			$comment = $row->comment; 
			$datum = date("d.m.Y H:i", $row->datum); 
			$name = "<b>$row->name</b>"; 
			$text = $row->text;
			$newsid = $row->newsid;
			}
			echo '<div class="gbentry">
					<div class="gbmain">' .$comment.'</div>
					<div class="gbdate">eingetragen am:'.$datum.' von '.$name.'</div></div>'; 
			
		?><hr>
			<div class="gbentry">
				<div class="gbheading">Bitte tragen Sie sich ein</div>
					<form method="POST" action="?news=<?echo $newsid;?>&act=signup">
						Name:<br/> <input name="name" /><br />
						Email:<br/> <input name="email" /><br />
						Kommentar:<br/> <textarea cols="50" rows="6" name="comment" wrap="physical"></textarea><br /><br />
						Bitte schreiben Sie das Wort "OK" in das Feld:
						<br /> <input type="text" value="" name="check" />
						<input type="submit" name="Submit" value="eintragen">
					</form>
				</div>
			<?php }
	if($action=="signup") {
			$abfrage = "SELECT * FROM m4u_newscomments WHERE newsid LIKE '%".$id."%'"; 
		$ergebnis = mysql_query($abfrage); 
		while($row = mysql_fetch_object($ergebnis)) { 
			$newsid = $row->newsid;
			}
		if($_POST['check'] !== 'OK') {
			echo '<div class="gbentry"><div class="gbheading">Bitte füllen Sie alle Felder richtig aus</div>';
			echo '<a href="java script:history.back()">zurück</a></div>';
		} else {
			$name = $_POST["name"]; 
			$email = $_POST["email"]; 
			$comment = $_POST["comment"]; 
			$date = time(); 
			$aktiv = 1; 
			if($name == "" OR $comment == "") { 
				echo '<div class="gbentry"><div class="gbheading">Bitte füllen Sie alle Felder richtig aus</div>';
				echo '<a href="java script:history.back()">zurück</a></div>'; 
				exit;
			} 
			$newsid = $id;
			$eintrag = "INSERT INTO m4u_newscomments (newsid, name, email, comment, date) VALUES ('$newsid', '$name', '$email', '$comment', '$date')"; 
			$eintragen = mysql_query($eintrag); 
			if($eintragen == true) { 
				echo '<div class="gbentry"><div class="gbheading">Ihr Eintrag wurde erfolgreich gespeichert</div></div>';
				echo '<a href="index.php?top=menu_gaestebuch&sub=ansehen">zum Gästebuch</a></div>';
			}else { 
				echo '<div class="gbentry"><div class="gbheading">Ihr Eintrag konnte nicht gespeichert werden</div>';
				echo '<a href="java script:history.back()">zurück</a></div>';  
			} 
				echo '<div class="gbentry"><div class="gbheading">Vielen Dank für Ihren Beitrag</div></div>';
				echo '<a href="index.php?top=menu_gaestebuch&sub=ansehen">zum Gästebuch</a></div>';
			}
	}
	
?>


MFG Dennis
0

Anzeige



#2 Mitglied ist offline   K050V4 

  • Gruppe: aktive Mitglieder
  • Beiträge: 788
  • Beigetreten: 13. August 04
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Stuttgart
  • Interessen:(X)HTML<br />CSS2+<br />PHP 4/5<br />MySQL 5<br />Symfony 1.2+<br />JavaScript / AJAX<br />jQuery<br />C++<br />C#<br />Java<br />...

geschrieben 26. September 2008 - 16:51

Ja logisch. Die Ausgabe muss in der While-Schleife erfolgen.
Du speicherst die Werte in Variablen, doch beim nächsten Durchlauf werden die letzten Werte von den Variablen einfach durch die Neuen überschrieben: Somit werden nach der While-Schleife die letzteingetrageben Werte der Variablen ausgegeben.

Capisci? :(

Dieser Beitrag wurde von K050V4 bearbeitet: 26. September 2008 - 16:51

Zitat

"In der Welt des Erkennbaren ist die Idee des Guten die höchste." - Platon

Spritify! Easy CSS-Sprite-Generator | Albanisch Deutsch Wörterbuch
0

#3 Mitglied ist offline   Dyon 

  • Gruppe: aktive Mitglieder
  • Beiträge: 125
  • Beigetreten: 04. April 08
  • Reputation: 0

geschrieben 26. September 2008 - 23:13

oh danke
fehler gefunden;-)

sonst irgendwelche vorschläge wie ich das ganze leichter oder so schreiben kann?^^

Ich habe noch ein Problem und zwar wenn zu einem thema noch kein kommentar in der datenbank vorhanden ist, und ich dann einen kommentar schreibe kriegt der immer die newsid = 0
wenn aber schon ein thema mit der newsid = id vom thema , in der datenbank steht dann wird es richtig gespiechert.
hat da jemand ne idee woran das liegen könnte?


MFG

Dieser Beitrag wurde von Dyon bearbeitet: 27. September 2008 - 12:35

0

#4 Mitglied ist offline   asko 

  • Gruppe: aktive Mitglieder
  • Beiträge: 144
  • Beigetreten: 17. November 02
  • Reputation: 0

geschrieben 27. September 2008 - 23:08

Hallo Dyon,

in deinem Script sind diverse Sachen, die man so nicht machen sollte. ;)

* Dein Problem mit der 0. Dafür macht man eine Abfrage und prüft mit mysql_num_rows ob überhaupt ein (oder mehrere) Datensätze ausgelesen wurden.

* Einträge werden weder validiert noch escaped in die DB geschrieben. Sichwort mysql_real_escape_string

* Beim Auslesen ist dir die ID des Beitrags bekannt, wieso also mit LIKE auslesen? Das führt u.U. zu mehreren Treffern obwohl Du nur einen DS möchtest.

* Diese Zeile ...
$eintragen = mysql_query($eintrag);
... ist absolut sinnfrei bei einem INSERT. Der Rückgabewert hier ist true und besagt nur, dass das Statement an die DB geschickt wurde, nicht aber ob auch in der DB tatsächlich etwas passierte. Um das zu prüfen benutzt man mysql_affected_rows.

* Statt der Funktion time() besser $_SERVER['REQUEST_TIME'] verwenden, falls PHP 5.1.0 oder höher verfügbar ist. Beides liefert den Timestamp des Zugriffs zurück. Letzteres liest es allerdings aus einer Variable aus und muß nicht extra durch die time() Funktion errechnet werden. Es ist also performanter und schont Ressourcen.


Gruß Andreas
0

#5 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 28. September 2008 - 09:42

Außerdem würde ich die Attribute die einem Wert aus deiner DB zugewiesen sind noch mit htmlentities(); in HTML Code umeandeln.

Gruß,
Toasterfraktion
0

#6 Mitglied ist offline   sibbl 

  • Gruppe: aktive Mitglieder
  • Beiträge: 377
  • Beigetreten: 30. Dezember 06
  • Reputation: 3
  • Wohnort:localhost

geschrieben 28. September 2008 - 10:09

du machst mir angst o_O die selbe tabellenstruktur mit selben tabellennamen hab ich auch auf ner seite verwendet
0

#7 Mitglied ist offline   ps915 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.119
  • Beigetreten: 17. Mai 07
  • Reputation: 0
  • Geschlecht:Männlich

geschrieben 28. September 2008 - 10:21

Ich frag mich auch was denn
<div class="gbentry">
				<div class="gbheading">
in einem Newssystem zu suchen hat! ^^

Dieser Beitrag wurde von Toasterfraktion bearbeitet: 28. September 2008 - 10:21

0

#8 Mitglied ist offline   Dyon 

  • Gruppe: aktive Mitglieder
  • Beiträge: 125
  • Beigetreten: 04. April 08
  • Reputation: 0

geschrieben 28. September 2008 - 16:10

ehm des is jetzt komsich dass ich die selbe tabellenstruktur wie sibbl hab?

Naja ich werde jetzt alle Ratschläge noch befolgen und verbessern

@toasterfraktion
des war nur zum probieren und da hab ich halt kurz den style meines gästebuchs genommen;-)
0

#9 Mitglied ist offline   Dyon 

  • Gruppe: aktive Mitglieder
  • Beiträge: 125
  • Beigetreten: 04. April 08
  • Reputation: 0

geschrieben 30. September 2008 - 15:55

Noch eine Frage
und zwar

Ich habe ien Problem und zwar wenn man einen Kommentar schreiben will, wird der erste geschriebene kommentar zu einer news immer mit der newsid 0 in die datenbank abgelegt.
wenn aber zu der news schon ein kommentar mit der richtigen newsid vorhanden ist, wird der neugeschreibene kommentar mti der richtigen newsid gespeichert.
Weiß jemand woran das liegen könnte?

MFG
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0