Was ist an diesem SQL-Query falsch?

FactorX

Mitglied
Ich programmiere gerade ein Forum auf PHP und MySQL Basis. Zum Management der Threads hab ich eine Tabelle angelegt. Die Felder könnt ihr unten ja sehen.
Aber was bitte ist an diesem Query falsch? Der Thread wird einfach nicht in die DB eingefügt und MySQL liefert auch keinen Fehler zurück :(

PHP:
$sql = "INSERT INTO ".$prefix."_threads (forumid,topic,lastedit,startname,startdate,memberid)
          VALUES ('".$forumid."','".$topic."','".time()."','".$logname."','".date("Y-m-d H:i")."','".$memberid."');";


Ich bin schon fast am verzweifeln, weil ich den Fehler nicht finde...

$prefix ist eine globale Variable
$forumid ist ein "hidden" Formularfeld
$topic ist ein Formularfeld
time() ist die aktuelle Zeit seit der UNIX-Epoche
$logname kommt aus einem cookie
date("Y-m-d H:i") erstellt nen Timestamp
und $memberid kommt ebenfalls aus nem cookie.

Kann mir bitte, bitte jemand Helfen? :rolleyes:
 
Hm... dass kein Fehler angezeigt wird, heißt nicht zwingend, dass nichts schief gelaufen ist ;) Hast du dir schon mal per mysql_errno und mysql_error die MySQL-Fehlermeldung ausgeben lassen? Würde ich mal probieren. Dein Query ist nämlich soweit ich das jetzt sehe formal korrekt.


reima
 
Hm... wenn dein Feld für das Datum vom Typ DATETIME ist, sollte es dann nicht "Y-m-d H:i:s" heißen? Hm... bei genauerer Überlegung glaub ich allerdings kaum, dass das die Eintragung verhindert... Tja... Kannst du vielleicht mal einen Dump der Tabellenstruktur hier reinstellen?


reima
 
CREATE TABLE fxf_threads (
threadid int(10) NOT NULL auto_increment,
forumid int(10) NOT NULL default '1',
topic char(30) NOT NULL default '',
lastedit char(20) NOT NULL default '',
startname char(20) NOT NULL default '',
startdate char(16) NOT NULL default '0000-00-00 00:00',
memberid int(11) NOT NULL default '0',
replys int(10) NOT NULL default '0',
PRIMARY KEY (threadid)
) TYPE=MyISAM;

Wie du siehst, ist das Feld vom Typ CHAR.
Allerdings würde MySQL auch bestimmt nen Fehler zurückgeben, wenn ich versuchen würde einen (offensichtlich) anderen Datentyp zu benutzen.
In soweit sollte es da keine Probleme geben - trotzdem ist die ganze Sache haariger als sie auf den ersten Blick aussieht :(
 
Hm... :confused:
Hast du auch schon mal den Query ausgegeben und dann mit phpMyAdmin ausgeführt? Schön langsam werd ich ratlos... die Tabellen-Struktur scheint jedenfalls korrekt zu sein.


reima
 
Dann würd ich jetzt mal ausschließen, dass es am Query liegt. Check mal die anderen Sachen im Script, z.B. ob auch sicher eine Verbindung zur Datenbank besteht, ob mysql_query() die richtigen Parameter übergeben bekommt etc.


reima
 
Natürlich hab ich ne Verbindung. Der andere Query in der Variable wird ja auch ausgeführt, und alle anderem in dem Script auch. Dann kann es auch nicht am mysql_query() oder an der Verbindung liegen.

Ich poste hier mal den kompletten Code der Datei:

PHP:
<?php
/**********************************
 * fxForum - a php bulletin board *
 * ------------------------------ *
 * developed since march 2002     *
 * by Thomas Schmitz              *
 * ------------------------------ *
 * webmaster@rewler.de            *
 * http://www.rewler.de           *
 **********************************/
if(!isset($action)) { ?>
<form action="<? echo $PHP_SELF."?category=newthread&action=post&forumid=".$forumid; ?>" method="post">
<table align="center" border="0" cellpadding="0" cellspacing="0" width="50%">
  <tr>
    <td width="15%">Topic:</td>
    <td width="85%"><input type="text" name="topic" size="30" maxlength="30"></td>
  </tr>
  <tr>
    <td width="15%" valign="top">Text:</td>
    <td width="85%"><textarea name="text" cols="60" rows="12"></textarea></td>
  </tr>
  <tr>
    <td width="15%">&nbsp;</td>
    <td width="85%"><input type="hidden" name="forumid" value="<? echo $forumid; ?>"><input type="submit" value="post">&nbsp;<input type="reset" value="clear"></td>
  </tr>
</table>
</form>
<?php
} else {
  if($mysql_port != '') {
  $conn = mysql_connect($mysql_host.":".$mysql_port,$mysql_user,$mysql_passwd);
  } else {
  $conn = mysql_connect($mysql_host,$mysql_user,$mysql_passwd);
  }
  mysql_select_db($mysql_dbase);
  $sql = "SELECT posts FROM ".$prefix."_members WHERE memberid = ".$memberid.";";
  $result = mysql_query($sql,$conn);
  while($row = mysql_fetch_array($result)) {
    $posts = $row['posts'];
  }
  mysql_free_result($result);
  $sql = "INSERT INTO ".$prefix."_threads (forumid,topic,lastedit,startname,startdate,memberid)
          VALUES ('".$forumid."','".$topic."','".time()."','".$logname."','".date("Y-m-d H:i")."','".$memberid."');
          INSERT INTO ".$prefix."_posts (threadid,memberid,membername,posts,time,text)
          VALUES ('".$threadid."','".$memberid."','".$logname."','".$posts."','".time()."','".$text."');";
  mysql_query($sql,$conn);
  $sql = "UPDATE ".$prefix."_members SET posts = posts + 1 WHERE memberid = ".$memberid;
  mysql_query($sql,$conn);
  $sql = "UPDATE ".$prefix."_forums SET threads = threads +1,replys = replys + 1 WHERE forumid = ".$forumid;
  mysql_query($sql,$conn);

  if(mysql_error() != FALSE) {
    echo "<div align=\center\">Your post was successfully submitted.<br>\n You can now return to your ";
    echo "<a href=\"".$PHP_SELF."?category=showforum&forumid=".$forumid."\">forum</a>.</div>";
  } else {
    echo "There was an error while submitting your post. Please try again!<br>\n";
    echo "If your post was too long to rewrite it, here is your text so that you can \"Copy & Paste\" it:<br>\n";
    echo "<pre style=\"font-family:courier,serif\">".$text."</pre>\n";
    echo "MySQL returns: ".mysql_errno().": ".mysql_error()."<br>\n";
    echo "PHP returns: ".$PHP_ERRORMSG;
  }
}
?>

Könnte da sonst noch was falsch sein?
 
Zuletzt bearbeitet:
Hm... vielleicht mal die zwei INSERT-Abfragen einzeln machen und jeweils in eine lange Zeile schreiben, also ohne Zeilenumbrüche in der Abfrage... glaub aber auch nicht, dass es das ist... puh, also das ist wirklich eine harte Nuss...


reima
 
Zurück