[PHP] Insert Fehler bei Kommentarscript! Need Fast Help!

Grave-Digger

Banned
Registriert
Juni 2005
Beiträge
253
Hiho!

Wenn ich versuche einen Kommentar der $cid mit der passenden Newsid $id einfüge klappt das nich :-( Könnnt ihr mir helfen?

PHP:
<?php
	// comments.php
	include('config.php');
	echo "<link href='style.css' rel='stylesheet' type='text/css'>";
	if(is_numeric($_GET['id'])){		
		$result = mysql_query("SELECT cid, comment, autor from comments WHERE id = $id") or die(mysql_error());
		$anzahl = mysql_num_rows($result);
		while($row = mysql_fetch_array($result)){
			$id = $row['id'];
			$cid = $row['cid'];		 
			$comment = $row['comment'];
			$autor = $row['autor'];
			
				$ausgabe1.="
		 		 	<table width='100%' border='0' cellpadding='0' cellspacing='0' class='comment'>
		 		 	<!--DWLayoutTable-->
		 		 	<tr>
		 		 	<td width='1085' height='25' valign='top' background='img/comment_header.jpg' class='Stil1'><strong><em>$cid) </em>$autor']</strong> ($date, $time) </td>
		 		 	<td width='160' valign='top' background='img/comment_header.jpg'><span class='Stil1'> Editieren | Antworten </span></td>
		 		 	</tr>
		 		 	<tr>
		 		 	<td height='25' colspan='2' valign='top' bgcolor='#F4F4F4'>$comment</td>
		 		 	</tr>
		 		 	</table>
		 	 ";	 		 			 		
				}
		 	echo $ausgabe1;	 		 			
			}
	
?>

<br>
<form method="POST" action="news.php">
  <div align="center">
	<table width="100%" border="0" cellpadding="0" cellspacing="0">
	  <!--DWLayoutTable-->
	  <tr>
		<td width="205" height="25" valign="top">Name:</td>
		<td width="1040" valign="top"><input name="name" type="text" size="131">		</td>
	  </tr>
	  <tr>
		<td height="342" valign="top">Kommentar Text: </td>
		<td valign="top"><textarea name="comment" cols="130" rows="20"></textarea>	 </td>
	  </tr>
	  <tr>
		<td height="25" valign="top">Newsid:</td>
		<td valign="top"><input name="id" type="text"></td>
	  </tr>
	</table>
	<input type="submit" name="submit" value="submit">
	</div>
</form>
<?php
	foreach($_POST as $key=>$element){
		${"c_".$key} = $element;
		}		
	
		if(isset($_POST['submit'])){		
		 mysql_query("INSERT INTO `comments` (`comment`, `autor`, `id`) VALUES ('c_id', '$c_comment', '$c_name')");
			}
?>

// news_show.php ( daher kommt auch die $id ) :D
<?php
	require('config.php');
	require('smilies.php');
	
	echo "<link href='style.css' rel='stylesheet' type='text/css'>";
	$title = "News Anzeigen von ID: $id";
	echo "<title>$title</title>";
	
	if(is_numeric($_GET['id'])){
		$result = mysql_query("SELECT id,titel,text,newsimg,autor from news WHERE id = $id")
		 or die("<div align='center'>Error</div>"); 	
		 $anzahl = mysql_num_rows($result);		 
		while($row = mysql_fetch_array($result)){
			$id = $row['id'];
			$titel = $row['titel'];
			$text = $row['text'];
		    $autor = $row['autor'];	    	
				
			$ausgabe = "
		 			<table width='100%' border='0' cellpadding='0' cellspacing='0'>
		 		 <!--DWLayoutTable-->
						<tr>
		 			<td height='25' colspan='3' valign='top'>$titel</td>
						</tr>
						<tr>
		 			<td height='25' colspan='3' valign='top'>$text</td>
						</tr>
						<tr>
		 			<td width='942' height='25'>&nbsp;</td>
		 			<td width='49' valign='top'>Autor:</td>
		 			<td width='254' valign='top'>$autor</td>
						</tr>
						</table>
						";
		 	echo $ausgabe;	 		 			
				}
				echo "
		 		<table width='100%' border='0' cellpadding='0' cellspacing='0' class='comment1'>
					<!--DWLayoutTable-->
					<tr>
		 		<td width='1245' height='23' valign='top' background='img/comment.jpg'><strong>Kommentare</strong></td>
					</tr>
					</table><br>
					";
		 	include('comments.php'); 			
		 	echo "<div align='center'><a href='news.php'>Zurück</a></div><br>";
			}
?>
 
Gibt keine! ER macht keinen INsert ;)
 
Dann mach doch mal an der Stelle:

foreach($_POST as $key=>$element){
${"c_".$key} = $element;

ein echo rein um zu sehen was überhaupt alles ankommt.

echo $key."/".$element."<br>";
 
Dein Insert Befehl sieht irgendwie komisch aus !

PHP:
		if(isset($_POST['submit'])){		
		 mysql_query("INSERT INTO `comments` (`comment`, `autor`, `id`) VALUES ('c_id', '$c_comment', '$c_name')");
			}


So wäre es besser :

PHP:
		if(isset($_POST['submit'])){		
		 mysql_query("INSERT INTO `comments` (`comment`, `autor`, `id`) VALUES ('$c_comment', '$c_name', '$c_id')");
			}

Du hattest bei c_id das Dollar Zeichen vergessen. Ausserdem musst du im INSERT Befehl erst die Felder angeben(comment, autor, id) und genau in der gleichen Reihenfolge die Werte(c_comment, c_name, c_id). Das war bei dir ebenfalls verdreht. Sollte so normalerweise funktionieren.
 
Mein Ratschlag:

Leg dir ein neues Script an wo du nur den DB-Zugriff drinnen hast und versuche mal den Insert mit vorgegebenen Werten. Lass außerdem die ' ' beim Tabellenname sowie den Spaltennamen weg:

INSERT INTO comments (comment, autor, id) VALUES ('Keiner','Hans im Glueck',12);

Desweiteren wäre die Struktur des Feldes id in der Tabelle interessant - handelt es sich um einen Primärschlüssel? Hat das Feld die Option "auto_increment" ? Wenn ja ist ein einfügen der ID dann nur mgl wenn sie eindeutig ist also noch nicht vorhanden ist bzw. wenn auto_increment aktiviert ist kann sie gar nicht eingefügt werden sondern wird automatisch hochgezählt!

Gruß bbforce
 
Also wie gesagt:

die ID ist die Newsid
DIE cid wird automatisch hochgezählt ;)

Trozdem funzt der insert nicht ;(

DIE Newsid wird nich übergeben :(

Notice: Undefined index: id in /www/htdocs/v140449/news/comments.php on line 9

Notice: Undefined variable: date in /www/htdocs/v140449/news/comments.php on line 18

Notice: Undefined variable: time in /www/htdocs/v140449/news/comments.php on line 22

Notice: Undefined variable: ausgabe1 in /www/htdocs/v140449/news/comments.php on line 14

Notice: Undefined index: id in /www/htdocs/v140449/news/comments.php on line 9

Notice: Undefined variable: date in /www/htdocs/v140449/news/comments.php on line 18

Notice: Undefined variable: time in /www/htdocs/v140449/news/comments.php on line 22
 

Anhänge

  • phpmyadminbug.jpg
    phpmyadminbug.jpg
    42,2 KB · Aufrufe: 256
Zuletzt bearbeitet:
PHP:
		if(isset($_POST['submit'])){		
		 mysql_query("INSERT INTO `comments` ('id', 'autor', 'comment', 'cid') VALUES ('$c_id', '$c_name', '$c_comment','')");
			}

Probier mal das. Ach und noch was. Ich würd den Primärschlüssel immer an erster Stelle in der Tabelle packen. Ist übersichtlicher.

So, nochwas! Ich würde $c_id umbennen in $news_id, da das ja nicht die comment id ist (die wird ja noch erzeugt), sondern die ID vom Newsbeitrag zu dem der Comment gehört.
 
Zuletzt bearbeitet:
Danke Merf :)

ich werds austesten!
 
Aber achtung, wenn du die Tabelle nun anders anordnest (also cid an erste Stelle), dann muss der Query dementsprechend auch wieder geändert werden. Aber so wie er da steht und mit der Anordnung deiner Tabelle auf dem Screenshot sollte das ganz klappen.

Gruß
 
Also langsam komm ich mir verarscht vor! DA TUT SICH NIX ABER ECHT GAR NIX!!!!!!


Hier nochmal der Code:

PHP:
// news_show.php
<?php
	require('config.php');
	require('smilies.php');
	
	echo "<link href='style.css' rel='stylesheet' type='text/css'>";
	$title = "News Anzeigen von ID: $id";
	echo "<title>$title</title>";
	
	if(is_numeric($_GET['id'])){
		$result = mysql_query("SELECT id,titel,text,newsimg,autor from news WHERE id = $id")
		 or die (mysql_error());		
		   $anzahl = mysql_num_rows($result);		 
		while($row = mysql_fetch_array($result)){
			$id = $row['id'];
			$titel = $row['titel'];
			$text = $row['text'];
		    $autor = $row['autor'];	    	
				
			$ausgabe = "
		    			<table width='100%' border='0' cellpadding='0' cellspacing='0'>
		    		    <!--DWLayoutTable-->
						<tr>
		    			<td height='25' colspan='3' valign='top'>$titel</td>
						</tr>
						<tr>
		    			<td height='25' colspan='3' valign='top'>$text</td>
						</tr>
						<tr>
		    			<td width='942' height='25'>&nbsp;</td>
		    			<td width='49' valign='top'>Autor:</td>
		    			<td width='254' valign='top'>$autor</td>
						</tr>
						</table>
						";
		    	echo $ausgabe;	    		    			
				}
				echo "
		    		<table width='100%' border='0' cellpadding='0' cellspacing='0' class='comment1'>
					<!--DWLayoutTable-->
					<tr>
		    		<td width='1245' height='23' valign='top' background='img/comment.jpg'><strong>Kommentare</strong></td>
					</tr>
					</table><br>
					";
		    	include('comments.php');    			
		    	echo "<div align='center'><a href='news.php'>Zurück</a></div><br>";
			}
?>
//comments.php

<?php
	error_reporting(E_ALL);
	include('config.php');
	echo "<link href='style.css' rel='stylesheet' type='text/css'>";
	if(is_numeric($_GET['id'])){		
		$result = mysql_query("SELECT cid, comment, autor from comments WHERE newsid = $id") or die(mysql_error());
		$anzahl = mysql_num_rows($result);
		while($row = mysql_fetch_array($result)){
			$newsid = $row['id'];
			$cid = $row['cid'];		    
			$comment = $row['comment'];
			$autor = $row['autor'];
			
				$ausgabe1.="
<br>
<table width='100%' border='0' cellpadding='0' cellspacing='0' class='comment'>
<!--DWLayoutTable-->
<tr>
<td width='1085' height='25' valign='top' background='img/comment_header.jpg' class='Stil1'><strong><em>$cid) </em>$autor']</strong> ($date, $time) </td>
<td width='160' valign='top' background='img/comment_header.jpg'><span class='Stil1'> Editieren | Antworten </span></td>
</tr>
<tr>
<td height='25' colspan='2' valign='top' bgcolor='#F4F4F4'>$comment</td>
</tr>
</table>
		    	 ";	    		    			   		
				}
				echo $ausgabe1;	
				}
?>

<?php
include('template/comments_add.htm');
foreach($_POST as $key=>$element){
		${"c_".$key} = $element;
		}
		
if($_GET['do']=='enter'){	    		    		
	if(isset($_POST['submit'])){		
		mysql_query("INSERT INTO comments ('newsid', 'autor', 'comment', 'cid') VALUES ('$c_newsid', '$c_name', '$c_comment','')");
			}
		}
?>
 
Du musst natürlich da c_id der Primarschlüssel ist und auf auto auto_increment gesetzt ist dieses Feld komplett beim insert befehl weglassen!

Bitte probier doch mal das was ich dir vorhin schon gesagt habe mit dem Testen mit vorgegebenen Werten, sonst findest du den Fehler ggf nie!

Hier mal der insert Befehl ohne cid! Wo der Primary Key steht ist egal..

INSERT INTO comments ('newsid', 'autor', 'comment') VALUES ('$c_newsid', '$c_name', '$c_comment')
 
@bbforce
Also den Code den ich geschrieben habe der funktioniert so auf jeden Fall. cid muss nicht komplett weggelassen werden, sondern einfach ein leerer Wert ('') übergeben werden. Dann wird auch ein neuer Eintrag erzeugt.

@GraveDigger

Die Datei comments.php hat sowieso noch einige Fehler - vielleicht solltest du die auch mal beheben.

Hier mal ein alter Schnippsel von mir zum Comment hinzufügen:

PHP:
switch($action) {
case "addcomment":
$ip = $REMOTE_ADDR; 
$benutzer = ""; // Muss natürlich noch eingetragen werden
$passwort = "";
$db = "";
$link = mysql_connect( "localhost", $benutzer, $passwort );
if ( ! $link )
	die ( "Keine Verbindung zu mySQL" );
mysql_select_db( $db )
	or die ( "Konnte Datenbank \"$db\" nicht &#65533;ffnen:
	".mysql_error() );

mysql_query("INSERT INTO mervnewscomments (cid, newsid, name, email, text, ip) VALUES ('', '$newsid', '$name', '$email', '$text', '$ip')");

mysql_close( $link ); 
break; 
}

Wird über file.php?action=addcomment aufgerufen
 
So ich hängs das script jetzt in den Anhang!! Dann könnt ihr selbst sehen...

Ich bringsn ich hinne :-( sRy mädls

Ich gib euch tipp: Net wundern wenn der code so komisch aussieht, is alles hardcoded!!
 

Anhänge

  • news.zip
    8,6 KB · Aufrufe: 251
Ich wollte es mir auch noch anschauen, hatte aber keine Zeit. Wo lag denn nun dein Fehler? Ich denke, dass ist am interessantesten.
 
Zurück
Oben