Wer findet den Fehler ;(

Ich hab mich nach etwas lägerer Zeit mal wieder an PHP heran getraut und gleich ein nicht ganz funktionierendes Script produziert.

http://nopaste.info/22478e98f7.html

Der Wert submitusername wird irgendwie nicht übermittelt und ich komm einfach nicht drauf wieso :unamused:

Hoffe mal ihr könnt mir da auf die Sprünge helfen :slight_smile:

Wieso verwendest du eine while-Schleife, wenn du nur einen einzigen Datensatz abfragst?

Wieso enthalten deine Datenbankoperationen nicht mal ansatzweise eine Fehlerbehandlung?

Wieso enthältst du uns komplett vor, was deine Überprüfung des ausgegebenen HTML-Dokumentes ergeben hat?

Was sollte die Überprüfung des ausgegebenen HTMLs denn bringen?

Na was wohl?

Ob das evtl. Fehler enthält, so dass gar nicht erst die Werte übermittelt werden können, die du erwartest.

Habe ich bereits getan.

Wieso fragst du dann erst …?

Na ja, dann zu den restlichen Punkten.

Ganz allgemein ist mal vernünftiges Debugging angesagt.

Ich, habe gefragt weil ich es für selbstverständlich halte und mich deine Frage deshalb ein wenig verwirrt hat.

Zum Debuggin ich habe mir den Code inzwischen 2 Stunden lang angeguckt und habe keine Tippfehler gefunden. Verstehst du das unter Debugging?

Wieso so aggresiv? :unamused:

agressiv? :stress: :stress:

Das halte ich auch für selbstverständlich - aber wenn die Problembeschreibung nicht über “wird irgendwie nicht übermittelt” hinausgeht, dann gehe ich davon aus, dass sowas wie eine halbwegs sinnvolle Debugstrategie kaum vorhanden ist, und dann muss auch erst mal nach solchen Basics gefragt werden.

Nö - du etwa?

“Tippfehler”, die die Funktionsweise des Scriptes beeinträchtigen, sollte im Normalfall error_reporting E_ALL schon ans Licht bringen (bspw. falsch geschriebene Variablennamen, Zugriff auf nicht vorhandene Werte, etc.)

Und vom “ankucken” wird sich der Code vermutlich nicht selbst korrigieren …
Also muss man da mit ein bisschen Strategie und Logik an die Sache rangehen.

Dass bedeutet erst mal, das Ansprechen der Datenbank um eine vernünftige Erfolgskontrolle und ggf. Fehlerbehandlung zu ergänzen - zeig bitte, wie weit du da inzwischen nachgebessert hast.

Und dann sind auch Kontrollausgaben essentiell, um zu kontrollieren, ob die vermuteten Variableninhalte auch der Realität entsprechen.

P.S.; Weitere Code-Beispiele bitte hier im Thread posten. Das “Auslagern” an externe Quellen, die irgendwann ggf. nicht mehr verfügbar sind, macht solche Diskussionen für die Nachwelt nämlich wertlos.

so damit ihr euch wieder lieb habt hab ich ma fix ne lösung gemacht :smiley:
hoffe ich zumindest

if(logged_in())
{ 
	echo '
  <div class="commentbox"> 
    <form method="post">'; 

	$sql= "SELECT UserName,UserId FROM users WHERE UserSession='".session_id()."' LIMIT 1"; 
	$query = mysql_query($sql); 
	$row = mysql_fetch_object($query);
	if(is_object($row))
	{ 
		echo '
      <input type="hidden" name="submitusername" value="'.$row->UserName.'">
      <input type="hidden" name="submituserid" value="'.$row->UserId.'">
      <input type="text" name="title" class="commenttitle"><br />
	  <textarea class="comment" name="comment"></textarea><br />
	  <input type="submit" value="Post" name="send">
	  <input type="reset" value="Reset"> ';
	}
	else echo 'Es ist ein unerwarteter Fehler aufgetreten oder so ;)';
	
	echo '
    </form> 
  </div>'; 
} 

if(isset($_POST['send']))
{ 

	$sqlcom = sprintf(
		"INSERT INTO comment (ref, reftype, title, comment, author, authorid, date) VALUES ('%d','%s','%s','%s','%s','%d',NOW())", 
		mysql_real_escape_string($_GET['article']), 
		mysql_real_escape_string($_GET['section']), 
		mysql_real_escape_string($_POST['title']), 
		mysql_real_escape_string($_POST['comment']), 
		mysql_real_escape_string($_POST['submitusername']), 
		mysql_real_escape_string($_POST['submituserid'])
	); 
	
	//MySQL Query nicht ausführen sondern zum Test ausgeben lassen...
	#mysql_query($sqlcom); 
	echo $sqlcom;
	
	//Wofür machst du diese ausgabe und nach einer Sekunde eine weiterleitung ?
	//leite doch direkt weiter mit: header("location: PFAD");
	//um die Ausgabe der Query anzuzeigen wird die weiterleitung erstmal auskommentiert...
	
	echo '  <div class="error">Comment posted.</div>'; 
	#echo '  <meta http-equiv="refresh" content="1">'; 
}

Wie im Quelltext markiert verstehe ich den Sinn der Weiterleitung nicht…
der Text “Comment posted” wird unter dem wieder angezeigten Formular stehen und
dann kommt eine Weiterleitung auf das selbe Formular, mit dem einzigen Unterschied
das nicht mehr “Comment posted” drunter steht :smiley: … naja^^

Eigentlich sollte das aber so funktionieren wie du es hattest…
Wenn die Ausgabe korrekt angezeigt wird, kann es noch sein das die Struktur deiner Tabelle falsch ist und beim einfügen evtl was verloren geht, aber normalerweise kommt dann eine Fehlermeldung.

error_reporting hast du hoffentl. nicht deaktiviert ?

grüße

Also nochmal Neuanfang:
Mein Ziel: Die Werte sumbmitusername (ein name -> Text) und submituserid(Ziffer) die folgendermaßen im Code vorhanden sind:

[quote]’;

$sql= “SELECT UserName,UserId FROM users
WHERE UserSession=’”.session_id()."’ LIMIT 1";
$query = mysql_query($sql);
while($row = mysql_fetch_object($query)){
echo ‘’;
echo ‘’;
}
echo ’


[/quote] in die Db zu übertragen, was folgendermaßen passiert: [quote]if(isset($_POST['send'])){ $sqlcom = sprintf("INSERT INTO comment (ref, reftype, title, comment, author, authorid, date) VALUES ('%d','%s','%s','%s','%s','%d',NOW())", mysql_real_escape_string($_GET['article']), mysql_real_escape_string($_GET['section']), mysql_real_escape_string($_POST['title']), mysql_real_escape_string($_POST['comment']), [color=#40FF00]mysql_real_escape_string($_POST['submitusername']),[/color] [color=#FF0000]mysql_real_escape_string($_POST['submituserid']));[/color]

$querycom = mysql_query($sqlcom);
echo ‘

Comment posted.
’;
echo ‘’;
}[/quote]

Das Problem:
Es wird nur submituserid, also die Ziffer in die DB übertragen.

[quote=“pumba1111”]Also nochmal Neuanfang:
Mein Ziel: [/quote]
Dein Ziel ist klar - das brauchst du nicht wiederholen.

Aber die Hinweise, die du jetzt schon mehrfach bekommen hast - die setze jetzt bitte langsam mal um!

Da sind keine “Werte vorhanden”, das ist PHP-Code - und der interessiert den Client herzlich wenig.
Das, was den Client interessiert, hast du laut eigener Aussage ja bereits geprüft … das mal wortwörtlich per Copy&Paste zu sehen zu bekommen, wäre für die Problemanalyse wesentlich interessanter, als die Wiederholung deiner Beschreibung, was du mit dem Script erreichen willst.

Chris bitte halte dich aus dem Thread hier raus, sofern du nichts hilfreiches zu sagen hast … Danke.

Und damit du dich auch noch ein wenig freuen kannst hier nochmal die Ausgabe:

[quote]
[/quote]

Ich habe dir bereits einiges an Hilfreichem gesagt - aber du ignorierst das bisher grösstenteils.

Und ganz davon abgesehen wäre dann auch noch interessant, wieso du überhaupt Nutzername und -ID beim Kommentar mit abspeichern willst.
Wenn ein beliebiger, freier Name verwendet kann - dann brauchst du nur diesen zu speichern.
Wenn der Nutzername jedoch festgelegt ist (durch ein darum befindliches System) - dann ist es unsinnig, ihn als Klartext per Formular zu übergeben, denn dann kann ich ihn ohne weiteres ändern, und dann passt er nicht mehr zur ID. Diese Zusammengehörigkeit müsste also auch noch abgeprüft werden.
Besser wäre es dann natürlich, nur die ID abzuspeichern, und bei der Ausgabe aus der Datenbank den Namen hinzuzulesen.

[quote]
Dass bedeutet erst mal, das Ansprechen der Datenbank um eine vernünftige Erfolgskontrolle und ggf. Fehlerbehandlung zu ergänzen - zeig bitte, wie weit du da inzwischen nachgebessert hast.[/quote]

Fällt weg, da ja ein Wert übermittelt wird.

s.o.

In dem Punkt stimme ich dir zu, aber mich wurmt es, dass das Script nicht vollständig funktioniert und ich nicht weiß warum.

Nein, deshalb fällt eine vernünftige Fehlerbehandlung noch lange nicht weg.

Dein Script gibt nach dem Versuch(!), die Daten in die Datenbank einzutragen, “Comment posted” aus - ohne dass du das auch nur im geringsten überprüft hast. Ob irgendein Fehler aufgetreten ist, der dafür sorgte, dass der Kommentar eben doch nicht eingetragen werden konnte, interessiert dich also kein bisschen …?

s.o.[/quote]
Ich weiss nicht, wie du auf diese Art das Problem lösen willst …

Na und jetzt …?

Wie soll sich an diesem Zustand etwas ändern, wenn du nicht bereit bist, auf die Vorschläge, die dir gemacht werden, einzugehen?

Einer der beiden Werte wird in die Datenbank eingetragen und da beide Werte mit einer Anfrage behandelt werden, dürften die beiden Punkte ja wegfallen.

Gut, wenn du eh alles besser zu wissen meinst, dann fällt mein Interesse an der Sache jetzt hiermit auch weg.

warum probierst du nicht einfach mal meinen code aus und sagst was das echo ausgibt?!
ich werd hier einfach überlesen^^ :motz: