Daten werden nicht in Tabelle übertragen

jochberger

Mitglied
Guten Morgen!
Ich bin MySQL-Neuling.
Ich habe folgendes Script geschrieben, das Daten aus einem Formular in die DB übertragen sollte.
Leider kommen in der Tabelle keine Daten an.
Würde mich sehr freuen, wenn mal jemand kurz einen Blick auf meinen Code werfen könnte.
PHP:
	if(strlen($_POST['nachricht'])>3 and $r==false and strlen($_POST['name'])>2 and $_POST['email']==$_POST['erg']){
		$antwortadresse=$_POST['mail'];
		$absenderadresse="gaestebuch@kathringsbuschenschaenke.at";
		$absendername="www.kathrinsbuschenschaenke.at";
		$trenner=":\t";
		
		require_once "Swift-4.2.1/lib/swift_required.php"; // Swift initialisieren
		$message = Swift_Message::newInstance(); // Ein Objekt für die Mailnachricht.
		
		$message
			->setFrom(array($absenderadresse => $absendername))
			->setTo(array($antwortadresse)) // alternativ existiert setCc() und setBcc()
			->setSubject("www.kathrinsbuschenschaenke.at");

		$sql = " INSERT INTO gaestebuch ";
		$sql .= " SET ";
		$sql .= " name ='". $_POST['name'] ."', ";
		$sql .= " mail ='". $_POST['mail'] ."', ";
		$sql .= " nachricht ='". $_POST['nachricht'] ."', ";
		$sql .= " status ='5', ";
		
		define ( 'MYSQL_HOST', 'localhost' );
		define ( 'MYSQL_BENUTZER', 'kathrabj' );
		define ( 'MYSQL_KENNWORT', '******' );
		define ( 'MYSQL_DATENBANK', 'usrdb_kathrabj_gantschbw' );

		$db_link = @mysql_connect (MYSQL_HOST,
									MYSQL_BENUTZER,
									MYSQL_KENNWORT);

		if ( ! $db_link ) {
			echo "Leider können momentan keine Daten abgefufen werden. Versuchen Sie es bitte etwas später noch einmal.";
		}

		$db_sel = mysql_select_db( MYSQL_DATENBANK )
		or die("Auswahl der Datenbank fehlgeschlagen");

		$db_erg = mysql_query($sql);
		$ID=mysql_insert_id();
		
		$mailtext=htmlentities("....
		
		$message->setBody($mailtext, 'text/html');
		
		$mailer = Swift_Mailer::newInstance(Swift_MailTransport::newInstance());
		$result = $mailer->send($message);

		if ($result == 0) {
			die("Mail konnte nicht versandt werden.");
		}
		
		header("Location: neu_gb_ges.html");
		exit;
	}

Noch eine kurze Frage: Kennt jemand den Grund warum ich einen Link vom Thunderbird aus nicht öffnen kann? Ich muss jedes mal den Link in den Browser kopieren.

Vielen Dank und einen schönen Tag
Gruß
jochberger
 
Zuletzt bearbeitet:
Da die diese Art von Fragen sehr oft kommt, habe ich mal ein Tutorial geschrieben wie man am besten auf Fehlersuche geht.
PHP MySQL Debug Queries
Geh es doch mal durch und falls du die Lösung nicht findest, poste mal das ausgegebe SQL-Statement ins Forum.
 
Müsste nicht soweiso ein MySQL error gemeldet werden? Dein Insert befehl ist falsch, zummindest ist mir diese Schreibweise nicht bekannt^^

ich kenn es nur so:
PHP:
$sql = "INSERT INTO `table` (`feld1`,`feld2`) VALUES(`inhalt1`, `inhalt2`)";

was du da machst ist du mischt ein Insert statement mit einem Update, musst dich schon entscheiden ;)

abgesehen davon hast du dort auch einige Anfürhungszeichen falsch gesezt und Klammern nicht geschlossen. Ich würde mich erstmal daran setzen ^^.

Dann anstatt
PHP:
 $db_erg = mysql_query($sql);

denn hier
PHP:
 $db_erg = mysql_query($sql) or die(mysql_error());

damit lässt du dir die MySQL Fehler anzeigen.
 
Mh, da kann einiges im argen sein.

Also erstens mal ist die UPDATE-Syntax so auch möglich: http://dev.mysql.com/doc/refman/5.1/de/insert.html (Das ist also NICHT der fehler)
Zweitens: ungeprüft Daten in die datenbank schreiben ist aua. real_escape_string oder ein sinnvoller typecast sind pflicht, selbst wenn die daten nicht vom uder kommen. (Denk nur mal an ' in sstrings...)
Drittens: error_reporting anschalten, query ausgeben (den fertigen, mit echo) und dann mal in PHPMA testen hat schon ift geholfen.
 
Wenn man sich mal genauer anschaut wie die SQL Anweisung am Ende aussieht fällt doch was auf:

PHP:
$sql = " INSERT INTO gaestebuch ";
$sql .= " SET ";
$sql .= " name ='". $_POST['name'] ."', ";
$sql .= " mail ='". $_POST['mail'] ."', ";
$sql .= " nachricht ='". $_POST['nachricht'] ."', ";
// hier darf am Ende kein Komma stehen
$sql .= " status ='5', ";

PHP:
// das muss doch sicher so aussehen
$sql .= " status ='5'";
 
Hi,
Sorry, dass ich so lange nicht reagiert habe. Hatte mehrrere Tage keine Netz.
Danke für dieses Tut.
Laut PHP MyAdmin stimmt folgende Anweisung.
SQL:
INSERT INTO gaestebuch SET name ='Andreas Gantschnigg', mail ='andigantschnigg@hotmail.com', nachricht ='fwwwqfqfqfqewew', status ='5'
In PHP wird mir jedoch gesagt, dass die Syntax fehlerhaft sei.

Das Problem mit den Links ist behoben. Ich muss natürlich die Mail als html deklarieren, damit Html Tags verarbeitet werden.

Müsste nicht soweiso ein MySQL error gemeldet werden? Dein Insert befehl ist falsch, zummindest ist mir diese Schreibweise nicht bekannt^^

ich kenn es nur so:
PHP:
$sql = "INSERT INTO `table` (`feld1`,`feld2`) VALUES(`inhalt1`, `inhalt2`)";

was du da machst ist du mischt ein Insert statement mit einem Update, musst dich schon entscheiden ;)
Ich hab diesen Code auch nur vom http://www.php-kurs.com/beispiel-gaestebuch-programmieren-in-php-und-mysql.htm
Vielen Dank schon mal.
Gruß
Jochberger
 
Zuletzt bearbeitet von einem Moderator:
Zurück