PHP Date und Time werden nicht korrekt gespeichert

JDF1976

Mitglied
Hallo Leute,

ich habe 2 Felder die wie folgt gefüllt sind:

Datum: 08.04.2008
Zeit: 09:00

diese speicher ich mit folgendem SQL string in meine DB:

PHP:
$sql = 'INSERT INTO stunden
					(Name, Datum, zeit, status)
				VALUES
					(\''.$name.'\',\''.date("d.m.Y",$datum).'\',\''.date("H:m",$zeit).'\',\''.$status.'\')';

die felder haben in der DB jeweils Date und Time als format.

nun specihert er mir immer folgendes ab

Datum: 0000-00-00
zeit: 01:01:00

ausgeben lass ich es dann mit
PHP:
$sql = 'SELECT * FROM stunden';

$result = mysql_query($sql) or die(mysql_error());
?>




<table cellpadding="5px" cellspacing="0" border="1">

<?
while($row = mysql_fetch_assoc($result))
	{
		echo 	"<tr>";
		echo	"<td>".$row['Name']."</td>";
		echo	"<td>".date("d.m.Y",$row['Datum'])."</td>";
		echo	"<td>".time("H:m",$row['zeit'])."</td>";
		echo	"<td>".$row['status']."</td></tr>";
	}


?></table>
da steht dann
datum: 01.01.1970
zeit: 1207658855

Hoffe mir kann da einer meinen Kopf wieder richten. Hatte das vor langer zeit schon gelöst nur weis ich nemme wie? :-(

Danke an alle die sich hir mühe geben.

Gruß
Jörg
 
Probiers mal so :
PHP:
$sql = 'INSERT INTO stunden 
                    (Name, Datum, zeit, status) 
                VALUES 
                    (\''.$name.'\',\''.date("d-m-Y",$datum).'\',\''.date("H:m:s",$zeit).'\',\''.$status.'\')';
 
Das Datum wird in MySQL immer im amerikanischen Format "yyyy-mm-dd" gespeichert, dementsprechend musst du das bei der date()-Funktion anpassen. Du willst das ganze im deutschen Format abspeichern, was nicht möglich ist.

Die Uhrzeit wird im Format "hh:mm:ss" abgespeichert, du willst das aber ohne Sekunden abspeichern.

€dit: Da war einer schneller als ich :/
 
Wohl wahr! Aber mir fällt grad auf, dass ich auch einen Fehler gemacht habe...
PHP:
$sql = 'INSERT INTO stunden 
                    (Name, Datum, zeit, status) 
                VALUES 
                    (\''.$name.'\',\''.date("Y-m-d",$datum).'\',\''.date("H:m:s",$zeit).'\',\''.$status.'\')';

So sollte es gehn...
 
Hey Danke erst mal für die verdammt schnelle Antwort.
Habe meinen SQL String durch deinen ersetzt nur leider gibts keine Änderung. :-(

ich post mal den code der betroffenen Seite.
Diese wird durch ein Formular aufgerufen.
PHP:
<?
if(isset($_POST['a_kommen']) && $_POST['a_kommen'] == "KOMMEN")
	{
		//Arbeitszeit kommen
		$name = $_POST['name'];
		$status = "Arbeitszeit kommen";
		$datum = date("d.m.Y");
		$zeit = date("H:m");
	}

if(isset($_POST['a_gehen']) && $_POST['a_gehen'] == "GEHEN")
	{
		//Arbeitszeit gehen
		$name = $_POST['name'];
		$status = "Arbeitszeit gehen";
		$datum = date("d.m.Y");
		$zeit = date("H:m");
	}

if(isset($_POST['p_kommen']) && $_POST['p_kommen'] == "KOMMEN")
	{
		//pause kommen
		$name = $_POST['name'];
		$status = "Pause kommen";
		$datum = date("d.m.Y");
		$zeit = date("H:m");
	}

if(isset($_POST['p_gehen']) && $_POST['p_gehen'] == "GEHEN")
	{
		//pause gehen
		$name = $_POST['name'];
		$status = "Pause gehen";
		$datum = date("d.m.Y");
		$zeit = date("H:m");
	}
	
if(isset($_POST['absenden']) && $_POST['absenden'] == "Senden")
	{
		//manuelle eingabe
		$name = $_POST['name'];
		$status = $_POST['art'];
		$datum = $_POST['datum'];
		$zeit = $_POST['zeit'];
		if(!isset($_POST['art'])) 
			{
				$error = "Bitte noch die art ausw&auml;hlen!<br><i>(kommen, gehen, Arbeitszeit, pause)</i>";
			}
	}
	
	
if(isset($_POST['yes']) && $_POST['yes'] == "JA KORREKT")
	{
		//in DB schreiben
		$sql = 'INSERT INTO stunden 
                    (Name, Datum, zeit, status) 
                VALUES 
                    (\''.$name.'\',\''.date("d-m-Y",$datum).'\',\''.date("H:m:s",$zeit).'\',\''.$status.'\')';
		$result = mysql_query($sql) or die(mysql_error());
		header('Location: http://www.sa-holding.de/stunden/index.php?section=uebersicht');
	}


if($error != "")
	{
		die($error);
	}

?>

<form name="pruefung" method="post" action="<? $_SERVER['PHP_SELF']; ?>">
    <table cellpadding="5px" border="0" cellspacing="0">
        <tr>
            <td colspan="2">
                Sind die Daten korreckt?
            </td>
        </tr>
        <tr>
            <td>
                Mitarbeiter:
            </td>
            <td>
                <h2><? echo $name; ?></h2>
                <input type="hidden" name="name" value="<? echo $name; ?>">
            </td>
        </tr>
        <tr>
            <td>
                Setzt den Status:
            </td>
            <td>
                <h2><? echo $status; ?></h2>
                <input type="hidden" name="status" value="<? echo $status; ?>">
            </td>
        </tr>
        <tr>
            <td>
                an dem:
            </td>
            <td>
                <h2><? echo $datum; ?></h2>
                 <input type="hidden" name="datum" value="<? echo $datum; ?>">
            </td>
        </tr>
        <tr>
            <td>
                zu der Zeit:
            </td>
            <td>
                <h2><? echo $zeit; ?></h2>
                <input type="hidden" name="zeit" value="<? echo $zeit; ?>">
            </td>
        </tr>
        <tr>
        	<td>
            	<input type="submit" name="yes" value="JA KORREKT" />
            </td>
            <td>
            	<input type="button" value="Zur&uuml;ck" onClick="history.back();">
            </td>
        </tr>
    </table>
</form>
 
PHP:
if(isset($_POST['a_gehen']) && $_POST['a_gehen'] == "GEHEN")

kannst auch so abkürzen:

PHP:
if($_POST['a_gehen'] == "GEHEN")

Die Variable muss schon gesetzt sein, damit sie einen Wert haben kann. Du brauchst also nur den Wert überprüfen.

[EDIT 1]
Und wegen deinem Problem:

Die Funktion date() braucht einen Unixtimestamp und wandelt diesen in das entsprechende Format um. Bei dir gibt der Benutzer allerdings schon ein Datum an, keinen Timestamp.

Also solltest du das ganze so schreiben:
PHP:
$datum=@explode(".",$_POST['datum']);  // Zerlegt Eingabe in ein Array
$zeit=@explode(":",$_POST['zeit']);
$datum=mktime($zeit[0],$zeit[1],0,$datum[1], $datum[0], $datum[2]);  // Macht einen Unixtimestamp

// weiter im Text bis zur query
$sql = 'INSERT INTO stunden 
                    (Name, Datum, zeit, status) 
                VALUES 
                    (\''.$name.'\',\''.date("d-m-Y",$datum).'\',\''.date("H:m:s",$datum).'\',\''.$status.'\')';

Das @ vor dem explode dient dazu, falss der Benutzer falsche Eingaben gemacht hat, dass PHP keine Fehlermeldung ausgibt, sondern ignoriert.

Dann sollte die date() Funktion in der SQL-Query kein Problem mehr haben. Bei der Query musst du dann bei der Date()-Funktion beide Male die Variable $datum einsetzen, da diese nun das Daum und die Zeit enthält.

[EDIT 2]

Ausserdem musst du die Dateums- / Zeitabfrage aus den POST Daten nicht bei jedem IF extra machen. Schreibs einmal am Anfang, und das einzige was du in den IF überall anderst machst, nur das kommt in das IF.

PHP:
$datum=explode(".",$_POST['datum']);  // Zerlegt Eingabe in ein Array
$zeit=explode(":",$_POST['zeit']);
$datum=mktime($zeit[0],$zeit[1],0,$datum[1], $datum[0], $datum[2]);  // Macht einen Unixtimestamp
$name=$_POST['name'];

if($_POST['a_kommen'] == "KOMMEN")
    {
        //Arbeitszeit kommen
        $status = "Arbeitszeit kommen";
    }

if($_POST['a_gehen'] == "GEHEN")
    {
        //Arbeitszeit gehen
        $status = "Arbeitszeit gehen";
    }

Und so weiter ;)
 
Zuletzt bearbeitet:
Auszug aus dem PHP Manual
PHP:
<?php
// Angenommen heute ist March 10th, 2001, 5:16:18 pm

$today = date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
$today = date("m.d.y");                         // 03.10.01
$today = date("j, n, Y");                       // 10, 3, 2001
$today = date("Ymd");                           // 20010310
$today = date('h-i-s, j-m-y, it is w Day z ');  // 05-16-17, 10-03-01, 1631 1618 6 Fripm01
$today = date('\i\t \i\s \t\h\e jS \d\a\y.');   // It is the 10th day.
$today = date("D M j G:i:s T Y");               // Sat Mar 10 15:16:08 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:17 m is month
$today = date("H:i:s");                         // 17:16:17
?>

Dort wird es auch mit "." und nicht mit "-" getrennt.
ist das bei der Date Funktion nicht egal? gibt ja "nur" das format an. und in dem SQL string der übergeben wird steht ja der "-" drin.
PHP:
INSERT INTO stunden (Name, Datum, zeit, status) VALUES ('Hans Muster','01-01-1970','01:01:15','Arbeitszeit gehen')
wie ich hier sehe ist mein fehler schon früher. nun werd ich mal alles zurückverfolgen.
 
Tip: Lass dir bevor du die SQL-Anweisung ausführst mal die Variablen "$datum" und "$zeit" ausgeben und schau dir den Inhalt an. Ich denke, dass dein Fehler beim ersten "Aufruf" der Variable sitzt.
 
@Bratkartoffel

Danke für deinen Tipp hab ihn gleich mal umgesetzt nur leider :-( *schnief* du ahnst es schon.

so mein SQL string schaut nach deiner bearbeitung nun so aus

Code:
INSERT INTO stunden (Name, Datum, zeit, status) VALUES ('max muster','08-04-2008','15:04:00','Arbeitszeit gehen')

in die DB schreibt er

Code:
11  	max muster  	0000-00-00  	15:04:00  	Arbeitszeit gehen
 
Habe einen haufen Edits gemacht, bitte nochmal meinen Post lesen. Bin z.Z. leider nicht ganz fit... Hat ganze 10 min gedauert, den post zu machen ;)
 
Zurück