INSERT INTO klappt nicht

lifehunter

Erfahrenes Mitglied
also ich habe das gleich Script genommen das ich auch früher benutzt habe um Nachrichten zu verschicken. Irgendwie klappt es trotzdem nicht. Sieht jemand den fehler?
PHP:
<? if($flag==1){
if($titel=="Betreff")$fehler.="Betreff fehlt!<br>";
if($text=="Nachricht")$fehler.="Nachricht fehlt!<br>";
if($fehler){
$meldung=$fehler;
unset($flag);}
else
{$titel=trim($titel);
$text=trim($text);

$betreff=strip_tags($betreff);
$text=strip_tags($text);
$date=date("d.m.y, H:i");
mysql_query("INSERT INTO `inbox` (from, to, betreff, text) values ('$from', '$to', '$titel', '$text')");
mysql_query("INSERT INTO `outbox` (from, to, betreff, text) values('$from', '$to', '$titel', '$text')");
$meldung="Die Nachricht wurde gesendet.<br>";}

echo $meldung;}
if(!$flag){
if(!$meldung)
{$titel="Betreff";
$text="Nachricht";}
echo $meldung; ?>
<form action='<? echo $PHP_SELF."?mailbox&mail"; ?>' method='post'>
<input type='hidden' name='flag' value='1'>
<input type='hidden' name='from' value='<? echo $_SESSION['ID']; ?>'>
<input type='hidden' name='to' value='<? echo $nid; ?>'>
<input type='text' name='titel' value='<? echo $titel; ?>'><br>
<textarea rows='10' cols='40' name='text'><? echo $text; ?></textarea><br>
<input type='submit' value='abschicken'></form><? } ?>
danke im vorraus!
MfG
 
Was genau funktioniert denn nicht so wie es sollte? Gibt es eine Fehlermeldung?
Bitte liefere doch ein paar mehr Informationen.
 
Code:
mysql_query("INSERT INTO `inbox` (from, to, betreff, text) values ('$from', '$to', '$titel', '$text')");

Ich glob eher das der Syntax falsch ist :rtfm: ! Probier mal:

Code:
mysql_query("INSERT INTO `inbox` SET(from, to, betreff, text) VALUES ('$from', '$to', '$titel', '$text')");

Und füge mal diese Zeile hinzu:

Code:
echo mysql_error();

Dann sagste uns was die Fehlermeldung ist ;)!
 
Wie mir scheint, geht es darum, Text in eine Datenbank einzufügen. Um danach eine Bestätigung, ob es geklappt hat, auszugeben, sollten eigentlich folgende Zeilen genügen:
PHP:
if (mysql_query('...')) {
    echo 'Die Nachricht wurde gesendet.';
} else {
    echo 'Es ist ein Fehler aufgetreten.';
}
Übrigens würde ich dir dringend empfehlen, deinen Code etwas besser zu strukturieren, sprich: Einrückungen bei if-Abfragen (und anderen Sprachkonstrukten, die dies erfordern) vorzunehmen.

Userbeck: SET verwendet man afaik nur bei UPDATE-Querys.
 
@SilentWarrior

Naja, meisten schaue ich lieber in mein SQL Standard Book und schon weiße ich was ich falsch mache bei SQL Codes ;)


MySQL Documentation

INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tabelle [(spalten_name,...)]
VALUES (ausdruck,...),(...),...
oder INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tabelle [(spalten_name,...)]
SELECT ...
oder INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tabelle
SET spalten_name=ausdruck, spalten_name=ausdruck, ...


Beispiel:

mysql> INSERT INTO tabelle (spalte1,spalte2) VALUES(15,spalte1*2);
 
Zuletzt bearbeitet:
Probier es mal so:
PHP:
mysql_query("INSERT INTO `inbox` (from, to, betreff, text) VALUES ('".$from."', '".$to."', '".$titel."', '".$text."')");

Weiß nicht, ob es dein Problem beseitigt.
mb fanste
 
Ok, analysieren wir die ganze Geschichte mal:
  1. Die Begriffe from, to sowie text gehören zu den von MySQL reservierten Wörtern und dürfen als Datenbank-, Tabellen-, Index-, Spalten- oder Alias-Namen nur mit expliziter Kennzeichnung als solche mit so genannten Backticks (U+0060) verwendet werden.
  2. Benutzereingaben jeglicher Art sollten ohne vorherige Validierung niemals verarbeitet werden, besonders nicht in Datenbankabfragen. Deshalb solltest du die Daten vorher beispielsweise mit der mysql_real_escape_string()-Funktion „entschärfen“. Siehe dazu auch das Thema „Sicherheit?“ und ähnliche Themen in diesem Forum.
  3. Desweiteren solltest du auch die register_globals-Konfigurationseinstellung auf off stellen und mit den vordefinierten Variablen $_GET, $_POST, $_SERVER etc. arbeiten. Weitere Informationen findest du in dem Kapitel „Verwendung von Register Globals“.
  4. Zuletzt wäre eine Fehlerbehandlung sicherlich nicht nachteilig.
Alles in allem könnten die Abfragen wie folgt aussehen:
PHP:
<?php

	…
	$query = "
		INSERT INTO
		        `inbox`
		  SET
		        `from`    = '".mysql_real_escape_string($_POST['from'])."',
		        `to`      = '".mysql_real_escape_string($_POST['to'])."',
		        `betreff` = '".mysql_real_escape_string($_POST['betreff'])."',
		        `text`    = '".mysql_real_escape_string($_POST['text'])."'
		";
	mysql_query($query) or die(htmlentities(mysql_error()).'<pre>'.htmlentities($query).'</pre>');

	$query = "
		INSERT INTO
		        `outbox`
		  SET
		        `from`    = '".mysql_real_escape_string($_POST['from'])."',
		        `to`      = '".mysql_real_escape_string($_POST['to'])."',
		        `betreff` = '".mysql_real_escape_string($_POST['betreff'])."',
		        `text`    = '".mysql_real_escape_string($_POST['text'])."'
		";
	mysql_query($query) or die(htmlentities(mysql_error()).'<pre>'.htmlentities($query).'</pre>');
	…

?>
 
Zuletzt bearbeitet:
@Gumbo

3. Desweiteren solltest du auch die register_globals-Konfigurationseinstellung auf off stellen und mit den vordefinierten Variablen $_GET, $_POST, $_SERVER etc. arbeiten. Weitere Informationen findest du in dem Kapitel „Verwendung von Register Globals“.

Da muss ich dir wiedersprechen, auch bei aktiven register_global sind diese vordefinierten $Variablen aktiv!
 
Da muss ich dir wiedersprechen, auch bei aktiven register_global sind diese vordefinierten $Variablen aktiv!
Habe ich das Gegenteil behauptet? Habe ich behauptet, die vordefinierten Variablen werden erst bei bestimmter Einstellung definiert? Ich glaube nicht.
 
Zurück