Timestamp aus Array korrekt umwandeln?

Ich habe mein Script ein wenig geändert:

Code:
$datumzeit = time();
echo date("d M Y, H:i:s",$datumzeit);

$db = @mysql_connect($host, $user, $password)
	or die ("Verbindung mit MySQL-Server fehlgeschlagen!");
@mysql_select_db($database, $db)
	or die ("Verbindung mit Datenbank fehlgeschlagen!");
$sql_insert="INSERT INTO 
            `gaestebuch` 
      SET 
            `ip` = '".$ip."',  
            `datumzeit` = '".mysql_escape_string('$datumzeit')."', 
            `vorname` = '".mysql_escape_string($vorname)."', 
            `nachname` = '".mysql_escape_string($nachname)."', 
            `email` = '".mysql_escape_string($email)."', 
            `text` = '".mysql_escape_string($text)."' 
            ";
$result = mysql_query($sql_insert, $db);
	if ($result) {
		echo "<p>Ihr Eintrag wurde soeben erfolgreich ins G&auml;stebuch eingetragen.\n</p>";
	}
	else {
		echo "<p>Bei dem Versuch den Datensatz einzuf&uuml;gen, ist ein Fehler aufgetreten.</p>\n Fehler-Nummer: <strong>".mysql_errno($db)."</strong><br />\nFehler-Ausgabe:<strong>".mysql_error($db)."</strong>";
	}
mysql_close($db);

In den ersten beiden Zeilen definiere ich für $datumzeit einen Timestamp und lasse ihn zur Kontrolle direkt ausgeben mit der Darstellung: 25 Jun 2004, 16:30:35, was auch der derzeitigen Zeit entspricht.

Die "datumzeit"-Spalte in der MySQL Datenbank (s. angehängte GIF-Datei mit Screenshot) ist als Primärschlüssel definiert.
Wenn ich also den ersten Eintrag ins Gästebuch mache, trägt er alles ohne Murren ein - den Timestamp, der zuvor per "echo" korrekt ausgegeben wird, erscheint in der Datenbank plötzlich mit dem Wert: 00000000000000!

Wenn ich nun einen zweiten Eintrag machen möchte, bekomme ich folgende Fehlermeldung raus:

Fehler-Nummer: 1062
Fehler-Ausgabe:Doppelter Eintrag '00000000000000' für Schlüssel 1.

Auch soweit klar - der Primärschlüssel darf keine zwei identischen Werte enthalten - in diesem Falle: 00000000000000.
1. Aber warum trägt er in die MySQL Datenbank diesen Wert ein und nicht den zuvor angezeigten Timestamp? :confused:
2. Warum kann ich die Spalte "datumzeit" nicht auf "Not Null" setzen?

Was habe ich übersehen?

Beste Grüße,
Preko
 
Zum Eintragen der Daten:
PHP:
<?php
  [...]
  $db = @mysql_connect($host, $user, $password)
	or die("Verbindung mit MySQL-Server fehlgeschlagen!");
  @mysql_select_db($database, $db)
	or die("Verbindung mit Datenbank fehlgeschlagen!");
  $query = "
	INSERT INTO
	        `gaestebuch`
	  SET
	        `ip` = '".$ip."',
	        `datumzeit` = NOW(),
	        `vorname` = '".mysql_escape_string($vorname)."',
	        `nachname` = '".mysql_escape_string($nachname)."',
	        `email` = '".mysql_escape_string($email)."',
	        `text` = '".mysql_escape_string($text)."'
	";

  if( $result = mysql_query($query, $db) ) {
    echo "<p>Ihr Eintrag wurde soeben erfolgreich ins Gästebuch eingetragen.\n</p>";
  } else {
    echo "<p>Bei dem Versuch den Datensatz einzufügen, ist ein Fehler aufgetreten.</p>\n Fehler-Nummer: <strong>".mysql_errno($db)."</strong><br />\nFehler-Ausgabe:<strong>".mysql_error($db)."</strong>";
  }
  mysql_close($db);
  [...]
?>
Zur Abfrage der Daten:
PHP:
<?php
  [...]
  $query = "
	SELECT
	        CONCAT(DAYOFMONTH(`datumzeit`), '. ', ELT(MONTH(`datumzeit`), 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezenber'), DATE_FORMAT(`datumzeit`, ' %Y, %h:%i:%s')) AS `datumzeit`,
	        `vorname`,
	        `nachname`,
	        `email`,
	        `text`
	  FROM
	        `gaestebuch`
	";
  if( !$result = mysql_query($query, $db) ) {
    echo "<p><strong>Fehler ".mysql_errno($db)."</strong><br />\nFehler-Ausgabe:<strong>".mysql_error($db)."</strong>";
    exit;
  }
  while( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) {
    echo '<a href="mailto:'.$row['email']'">'.$row['vorname'].' '.$satz['nachname'].'</a> hat am '.$satz['datumzeit'].' Uhr <br />folgenden Beitrag eingestellt:';
    echo '<p>'.$row['text'].'</p>';
  }
  [...]
?>
Was deine Fragen betrifft, möchte ich sie gerne beantworten:
  1. Die Spalte datumzeit in deiner Tabelle ist vom Typ TIMESTAMP, welche Werte im YYYYMMDDHHMMSS-, YYMMDDHHMMSS-, YYYYMMDD- oder YYMMDD-Format anzeigt. Der Wert, der in diese Spalte eingefügt werden soll, hat aber ein Format, das 25 Jun 2004, 16:30:35 entspricht, und ist somit inkompatibel.
  2. Versuch' mal die Eigenschaften der Tabelle mittels ALTER TABLE zu ändern:
    &nbsp;&rsaquo;&rsaquo;&nbsp;MySQL Manual | 7.5.4 ALTER TABLE-Syntax
 
@Gumbo:

es hat funktioniert :) :) :)

Dir sind jedoch beim Ausgabescript ein paar Flüchtigkeitsfehler unterlaufen, die ich jedoch gemäß nachfolgendem Code ausgemerzt habe:

Code:
$sql_query = "SELECT 
            CONCAT(DAYOFMONTH(`datumzeit`), '. ', ELT(MONTH(`datumzeit`), 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezenber'), DATE_FORMAT(`datumzeit`, ' %Y, %H:%i:%s')) AS `datumzeit`, 
            `vorname`, 
            `nachname`, 
            `email`, 
            `text` 
      FROM 
            `gaestebuch` 
    "; 
  if( !$result = mysql_query($sql_query, $db) ) { 
    echo "<p><strong>Fehler ".mysql_errno($db)."</strong><br />\nFehler-Ausgabe:<strong>".mysql_error($db)."</strong>"; 
    exit; 
  } 
  while( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) { 
    echo '<a href="mailto:'.$row['email'].'">'.$row['vorname'].' '.$row['nachname'].'</a> hat am '.$row['datumzeit'].' Uhr <br />folgenden Beitrag eingestellt:'; 
    echo '<p>'.$row['text'].'</p>'; 
  }

Super! Endlich funktioniert das Script. Deine Erklärungen habe ich soweit verstanden. Nochmals vielen, vielen Dank!

Beste Grüße,
preko
 
Zurück