Beiträge und Comments

Guten Morgen euch allen,

hab da meine eine Frage. Ich habe auf meiner Seite ein paar Beiträge so über Musik und Kino und so. Das trage ich über eine Formular in eine Datenbank ein und lass es dann auch wieder ausgeben. Das geht alles ohne wenn und aber. Aber jetzt will ich noch folgendes machen.

Ein Beitrag so ist ja echt langweilig. Ich möchte dass jeder Besucher der will auch ein Kommentar unter dem Beitrag verfassen kann ob er das auch so sieht oder wie auch immer.

Meine Frage an euch ist nun, wie kann ich das machen und wie muss dann meine Datenbank aussehen usw....

Ich hoffe mal, dass mir da jemand helfen kann......

Liebe Grüße,
Claudia
 
An sich ist das ganz einfach.
Zu jedem Beitrag hast du ja sicherlich eine eindeutige ID(Primärschlüssel mit auto_increment).
Du baust dir noch eine zweite Tabelle wo du die Komments den Beiträgen zuordnest.
Nun baust du dir darunter ein Formular in dem du die ID des Beitrages und den Komment an ein script schickst.

bsp.

Code:
Tabelle der Beiträge
  id
  name
  beitrag

neue Tabelle Komments
  id
  parent_id
  kommentar

Du liest also die ID von dem Beitrag ein und übergibst es dem Komment Script.
In diesem Script trägst du diese ID in die Spalte Parent_ID ein. Somit hast du eine genaue zuordnung der Kommentare zu den Beiträgen. Auslesen kannst du das ganze dann in etwa so

PHP:
<? 
  $result = mysql_query('SELECT * FROM beitrag WHERE id = "12" ')
  $data = mysql_fetch_assoc($result);

  echo $data['beitrag'];

  $result_2 = mysql_query('SELECT * FROM kommentar WHERE parent_id = "'.$data['id'].'"');
  for($i=0;$komment[$i]=mysql_fetch_assoc($result_2);$i++){
    echo $komment[$i]['kommentar'];
  }
?>
 
Hallo Kerwin,

Sorry dass es so lange gedauert hat bis ich mich melde. Aber ich musste erst noch ein paar andere Sachen machen. Also ich habe jetzt mal das ganze Online gestellt dann ist das wohl auch besser zu erklären und man kann sich das auch gleich ansehen :-)

Hier ist mal der Link dazu:

Meine WebSeite

So die Index.php Seite sieht so aus:

PHP:
<?php 
     //Konfigurations Datei einbinden
     include "../includes/config.php";
     ?>
     
     <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     <html>
     <head>
     <title>Kinoberichte</title>
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
     <style type="text/css">
     <!--
     .Stil1 {
     	color: #999999;
     	font-weight: bold;
     	font-size: 24px;
     }
     -->
     </style>
     </head>
     
     <body>
     <table width="50%"  border="0" align="center">
       <tr>
 	<td bgcolor="#CCCCCC"><div align="center" class="Stil1">Kinoberichte von Claudia </div></td>
       </tr>
     </table>
 <p>&nbsp;					
 					<?php 
 					$sql = "SELECT
 		 		 		titel,
 		 		 		text
 					 FROM
 		 		 		claudia
    					  ";
 		 		$return = mysql_query($sql) OR die(mysql_error());
     					
 					?>
     				
 					<?php
 		 		while($_data = mysql_fetch_assoc($return))
     					{
 						?>
     </p>
     <table width="50%"  border="0" align="center">
       <tr>
 	<td height="29"><strong></a><?php echo $_data[titel]; ?></strong></td>
       </tr>
       <tr>
     	<td height="26"></a><?php echo $_data[text]; ?></td>
       </tr>
       <tr>
     	<td height="26">&nbsp;</td>
       </tr>
       <tr>
 	<td height="26"><div align="right"><a href="#">&gt;&gt;&gt; ab zu den Comments</a> </div></td>
       </tr>
       <tr>
     	<td height="26">&nbsp;</td>
       </tr>
     
 					<?php
     					}
 					?>
     					
     </table>
     <p>&nbsp;</p>
     </body>
     </html>

Dann die eintragen.php sieht so aus:

PHP:
<?php
     //Konfigurations Datei einbinden
     include "../includes/config.php";
     
     if(!empty($_POST))
     {
     	//Wenn $_POST nicht leer ist, also wenn
     	//$_POST Daten enthält:
     	$titel = trim($_POST['titel']);
     	$text = trim($_POST['text']);
     	
     	if(empty($titel))
     	{
     		//Wenn die Variable frmMsg in $_POST leer ist:
     		echo "HeHe du hast vergessen einen Titel einzugeben!";
     	}
     	elseif(empty($text))
     	{
     		echo "Hey du hast vergessen einen Text einzugeben!";
     	}
     	else
     	{
     		//Wenn in der Variable frmMsg etwas drin steht:
     		$sql = "INSERT INTO claudia 
     				(
  					titel,
     					text
     				)
     				VALUES
     				(
 		 		'" . addslashes($_POST["titel"]) . "',
 		 		'" . addslashes($_POST["text"]) . "'
     				)
     				";
     		mysql_query($sql) OR die(mysql_error());
     		
     		header("Location: ".HOST_DE."/Claudia_aus_NRW/index.php");
     	}
     }
     
     ?>
     
     
     
     
     <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     <html>
     <head>
     <title>Kinoberichte eintragen</title>
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
     <style type="text/css">
     <!--
     .Stil1 {
     	color: #999999;
     	font-weight: bold;
     	font-size: 24px;
     }
     -->
     </style>
     </head>
     
     <body>
     <table width="50%"  border="0" align="center">
       <tr>
     	<td><div align="center" class="Stil1">Kinoberichte eintragen </div></td>
       </tr>
     </table>
     <p>&nbsp;</p>
     <table width="50%"  border="0" align="center">
       <tr>
     	<td><form name="form1" method="post" action="eintragen.php">
     	  <table width="100%"  border="0">
     		<tr>
 		 <td width="10%" valign="top"><strong>Titel:</strong></td>
 		 <td width="90%"><input name="titel" type="text" id="titel" size="84"></td>
     		</tr>
     		<tr>
     		  <td valign="top">&nbsp;</td>
     		  <td>&nbsp;</td>
     		</tr>
     		<tr>
     		  <td valign="top"><strong>Text:</strong></td>
 		 <td><textarea name="text" cols="80" rows="10" id="text"></textarea></td>
     		</tr>
     		<tr>
     		  <td valign="top">&nbsp;</td>
     		  <td>&nbsp;</td>
     		</tr>
     		<tr>
     		  <td valign="top">&nbsp;</td>
 		 <td><input name="absenden" type="submit" id="absenden" value="&gt;&gt; eintragen"></td>
     		</tr>
     	  </table>
     	</form></td>
       </tr>
     </table>
     <p>&nbsp;</p>
     </body>
     </html>

So dann will ich auch mal noch meine Tabelle in der Datenbank zeigen. Die sieht so aus:

CREATE TABLE `claudia` (
`id` int(6) NOT NULL auto_increment,
`titel` varchar(255) NOT NULL default '',
`text` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=9 ;

So nun aber mal wieder auf das Problem zu sprechen zu kommen. Wenn du auf der Index Seite bist dann siehst du ja dass da schon zwei Berichte stehen. Darunter steht dann auch immer >>> ab zu den Comments. Wenn man dann darauf klickt, dann soll ein PopUp auf gehen und da soll dann oben ein Formular wieder kommen das dann so aussieht:

PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     <html>
     <head>
     <title>Comment</title>
     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
     <style type="text/css">
     <!--
     .Stil1 {
     	font-size: 18px;
     	font-weight: bold;
     	color: #999999;
     }
     -->
     </style>
     </head>
     
     <body>
     <table width="50%"  border="0" align="center">
       <tr>
     	<td><div align="center" class="Stil1">Comments von ( Beitrag ) </div></td>
       </tr>
     </table>
     <p>&nbsp;</p>
     <table width="50%"  border="0" align="center">
       <tr>
     	<td><div align="center">
     	  <table width="100%"  border="0">
     		<tr>
     		  <td colspan="3">&nbsp;</td>
     		  </tr>
     		<tr>
     		  <td colspan="3">&nbsp;</td>
     		</tr>
     		<tr>
     		  <td><strong>Name:</strong></td>
     		  <td><strong>Homepage:</strong></td>
     		  <td><strong>Mail:</strong></td>
     		</tr>
     	  </table>
     	</div></td>
       </tr>
     </table>
     <p>&nbsp;</p>
     <table width="50%"  border="0" align="center">
       <tr>
     	<td><form name="form1" method="post" action="">
     		<table width="100%"  border="0">
     		  <tr>
     			<td width="25%" height="29">Name:</td>
     			<td width="75%">&nbsp;</td>
     		  </tr>
     		  <tr>
     			<td height="26">Mail:</td>
     			<td>&nbsp;</td>
     		  </tr>
     		  <tr>
     			<td height="26">Homepage:</td>
     			<td>&nbsp;</td>
     		  </tr>
     		  <tr>
     			<td height="26">Comment:</td>
     			<td>&nbsp;</td>
     		  </tr>
     		  <tr>
     			<td height="26">&nbsp;</td>
     			<td>&nbsp;</td>
     		  </tr>
     		  <tr>
     			<td height="26">&nbsp;</td>
 		 <td><input type="submit" name="Submit" value="&gt;&gt;&gt; eintragen"></td>
     		  </tr>
     		</table>
     	</form></td>
       </tr>
     </table>
     <p>&nbsp;</p>
     </body>
     </html>

So was für ein Code muss da jetzt rein? da komme ich dann einfach nicht weiter. Und da wo steht:

<td><div align="center" class="Stil1">Comments von ( Beitrag ) </div></td>

Da soll dann bei ( Beitrag ) auch immer der Aktuelle Filmtitel stehen. Geht das denn auch noch ?

So nun hoffe ich, dass mir da noch jemand helfen kann, dass ich das dann auch noch hin bekomme.

Liebe Grüße,
Claudia

 
Zuletzt bearbeitet:
Also der Link geht erst einmal nicht den du gepostet hast, aber ich glaube dir dennoch helfen zu können ;)

Änderungen in der index.php
Zu aller erst fügst du das mit ein direkt nach dem Head.
PHP:
  <script type="text/javascript">
  <!--
  function popup(additional_params) {
    Fensterchen = window.open("popup.php?"+additional_params, "Zweitfenster", "width=900,height=675, menubar=no, toolbar=no, resizable=yes, scrollbars=yes");
    Fensterchen.focus();
  }
  </script>

Den Link gestalltest du in etwa so
PHP:
<A href="javascript:popup('parent_id=<?=$_data['id']?>')">ab zu den comments</A>


Dann machst du dir eine popup.php in der du natürlich wieder eine Verbindung zu DB herstellst.
PHP:
<?
  include'mysql_verbindung.php';

  if(isset($_POST['send'])){
    if($_POST['aktion']=='neu_comment'){
      // musst du dann noch erweitern mit name etc, jenachdem wie du das willst
      mysql_query('INSERT INTO comments(parent_id, comment) VALUES("'.$_POST['parent_id'].'", "'.$_POST['text'].'")');
    }
  }
  
  // Den groben Aufbau der Tabelle comments hab ich ja oben schon erwähnt
  $result=mysql_query('SELECT * FROM comment WHERE parent_id ="'.$_GET['parent_id'].'"');
?>
  <table cellpadding="1" cellspacing="1">
  <?for($i=0;$data[$i]=mysql_fetch_assoc($result);$i++){?>
    <tr>
      <td><?=$data[$i]['comment']?></td>
     </tr>
   <?}?>
  </table>

  // Formular für neuen Comment
  <form action="popup.php" method="POST">
    <input type="hidden" name="aktion" value="neu_comment">
    <input type="hidden" name="parent_id" value="<?=$_GET['parent_id']?>">
    // rest wie name, text .........
    <input type="submit" name="send" value="eintragen">
  </form>

Ich glaube den Rest solltest du selber hinbekommen. Das hier ist nur ein grobes und ungetestes beispiel :)

Hoffe geholfen zu haben
 
Zuletzt bearbeitet:
Hallo Kerwin,

danke für deine HIlfe aber es gibt noch ein Problem.

So sieht jetzt meine popup.php Datei aus:

PHP:
<?php 
 //Konfigurations Datei einbinden
 include "../includes/config.php";
 
   if(isset($_POST['send'])){
 	if($_POST['aktion']=='neu_comment'){
 	  // musst du dann noch erweitern mit name etc, jenachdem wie du das willst
 	  mysql_query('INSERT INTO Komments(parent_id, kommentar) VALUES("'.$_POST['parent_id'].'", "'.$_POST['text'].'")');
 	}
   }
   
   // Den groben Aufbau der Tabelle comments hab ich ja oben schon erwähnt
   $result=mysql_query('SELECT * FROM Komments WHERE parent_id ="'.$_GET['parent_id'].'"');
 ?>
 
   <table cellpadding="1" cellspacing="1">
   <? for($i=0;$data[$i]=mysql_fetch_assoc($result);$i++){ ?>
 	<tr>
 	  <td><?=$data[$i]['kommentar'] ?></td>
 	</tr>
    <? } ?>
   </table>
 
   
   <form action="popup.php" method="POST">
 	<p>
 	  <input type="hidden" name="aktion" value="neu_comment">
 	  <input type="hidden" name="parent_id" value="<?=$_GET['parent_id']?>">
 	</p>
 	<table width="33%"  border="0">
 	  <tr>
 		<td width="20%" valign="top"><strong>Comment:</strong></td>
 		<td width="80%"><textarea name="kommentar" cols="50" rows="10" id="kommentar"></textarea></td>
 	  </tr>
 	</table>
 	<p>
 	  <input type="submit" name="send" value="eintragen">
 	</p>
 </form>

meine Datenbank sieht so dazu aus:

CREATE TABLE `Komments` (
`id` int(6) NOT NULL auto_increment,
`parent_id` int(6) NOT NULL default '0',
`kommentar` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;

Hmm komisch ist, dass er mir nichts einträgt aber es kommt auch keine Felhermeldung :-( er macht einfach gar nichts.

Meine Index.php Datei sieht jetzt so aus:

PHP:
<?php 
 //Konfigurations Datei einbinden
 include "../includes/config.php";
 ?>
 
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 
 <script type="text/javascript">
   <!--
   function popup(additional_params) {
 	Fensterchen = window.open("popup.php?"+additional_params, "Zweitfenster", "width=900,height=675, menubar=no, toolbar=no, resizable=yes, scrollbars=yes");
 	Fensterchen.focus();
   }
   </script> 
 
 <title>Kinoberichte</title>
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 <style type="text/css">
 <!--
 .Stil1 {
 	color: #999999;
 	font-weight: bold;
 	font-size: 24px;
 }
 -->
 </style>
 </head>
 
 <body>
 <table width="50%"  border="0" align="center">
   <tr>
 	<td bgcolor="#CCCCCC"><div align="center" class="Stil1">Kinoberichte von Claudia </div></td>
   </tr>
 </table>
 <p>&nbsp;					
 					<?php 
 					$sql = "SELECT
 		    		    		titel,
 		    		    		text
 		    		    	FROM
 		    		    		claudia
 		    		    	";
 		    		$return = mysql_query($sql) OR die(mysql_error());
 					
 					?>
 				
 					<?php
 		    		while($_data = mysql_fetch_assoc($return))
 					{
 						?>
 </p>
 <table width="50%"  border="0" align="center">
   <tr>
 	<td height="29"><strong></a><?php echo $_data[titel]; ?></strong></td>
   </tr>
   <tr>
 	<td height="26"></a><?php echo $_data[text]; ?></td>
   </tr>
   <tr>
 	<td height="26">&nbsp;</td>
   </tr>
   <tr>
 	<td height="26"><div align="right"><a href="javascript:popup('parent_id=<?=$_data['id']?>')">>>> ab zu den comments</a> </div></td>
   </tr>
   <tr>
 	<td height="26">&nbsp;</td>
   </tr>
 
 					<?php
 					}
 					?>
 					
 </table>
 <p>&nbsp;</p>
 </body>
 </html>

das PopUp geht auch auf :-) aber na ja dann wie oben schon geschrieben geht dann nichts mehr weiter.

Hmm warum der Link nicht geht das weiß ich auch nicht ich schreibe den Link jetzt mal so auf

http://www.claudia-aus-nrw ( da ja wieder das ende gelöscht wird musst du das so noch einfügen: hinter der nrw muss dann noch stehen:

Punkt de punkt vu

Ich kann dir nicht sagen warum er das nicht nimmer. Na ja ich hoffe das geht jetzt so. Währe echt nett, wenn du mir nochamls helfen könntest.

Gruß Claudia
 
Das mit dem Insert liegt daran, dass du das Textarea "kommentar" nennst und einfügen willst du $_POST['text']. Ändere text einfach in Kommentar um und es sollte an sich gehen.

Wenn ich deine Adresse eingebe, dann erscheint bei mir nur eine weiße Seite.

PHP:
   if(isset($_POST['send'])){
    if($_POST['aktion']=='neu_comment'){
      // musst du dann noch erweitern mit name etc, jenachdem wie du das willst
      mysql_query('INSERT INTO Komments(parent_id, kommentar) VALUES("'.$_POST['parent_id'].'", "'.$_POST['kommentar'].'")');
    }
    $_GET['parent_id'] = $_POST['parent_id'];
   }
 
Zuletzt bearbeitet:
Hallo Kerwin,

Ok das habe ich jetzt mal geändert. Aber jetzt habe ich das Problem, dass wenn ich dann bei einem Artikel was schreibe, dass das zwar eingetragen wird, aber wenn ich dann den zweiten öffne, dann steht das auch schon so drin.

Das kann ja so dann nicht sein oder?

Hier nochmals den Link:

http://www.claudia-aus-nrw

also dahinter musst du dann wieder schreiben punkt de punkt vu wenn das nicht geht dann versuch einfach mal noch /index.php

Gruß Claudia

[ EDIT ]
wenn ich mit der Maus über den Link fahre >> ab zu den Comments da kommt dann folgendes:

javascript:popup('parent_id=')

Muss da aber nicht hinter dem = noch eine ID also ein Zahl stehen ?
 
Zuletzt bearbeitet:
Ach Claudia ;) .
Ganz einfach, du hast beim query vergessen die id mit zu "Selecten"(hab ich vorher nicht gesehen). Dann sollte das auch mit dem Eintragen/anzeigen richtig funktionieren.

PHP:
$sql = "SELECT id, titel, text FROM claudia";

// oder du machst das so

$sql = "SELECT * FROM claudia";

Nun sollte da etwas passieren ;)

Sollte es nicht gehen, kann ich dir morgen erst wieder weiterhelfen.

MfG

Kerwin
 
Zuletzt bearbeitet:
Ach Kerwin,

was wurde ich denn nur ohne dich machen :rolleyes:. Aber auf alle Fälle es geht jetzt so wie ich mir das vorgestellt habe.

Da habe ich noch eine kleine Frage am Ende bzw. nee es ist gar nicht nur eine das sind zwei.

Hier kommt mal Nummer 1

Wie kann ich jetzt auf der Index Seite auslesen lassen, wieviele Comments unter dem jeweiligen Beitrag sind:

Ich hoffe du kannst mir da auch noch helfen * das währe echt ganz lieb von dir *

Liebe Grüße,
Claudia

[ Edit ]
Kann man das auch noch so machen, dass man auch noch einen Beitrag bewerten kann also von 1 - 5
 
Zuletzt bearbeitet:
Hallo Claudia,

1. Klar kannst du dir noch die Anzahl der Komments ausgeben lassen. In etwa so
PHP:
<?
$count= mysql_fetch_assoc(mysq_query('SELECT count(id) AS anzahl FROM komments WHERE parent_id = "'.$data['id'].'"'));
?>
<a href="javascript:popup('parent_id=<?=$_data['id']?>')"> ab zu den comments (<?=$count['anzahl']?></a></td>

2. Natürlich kannst du Beiträge auch bewerten lassen was in etwa das gleiche Aufbau ist.
 
Zurück