Datum über Fromularfeld eingeben

Steglich

Steglich

Aktives Mitglied
Thread Starter
Dabei seit
30.05.2003
Beiträge
206
Reaktionspunkte
0
Über ein Fromularfeld soll ein Datum eingegeben werden und dann auf eine DATE Zelle geschrieben werden. Das stelle ich mir so vor:
PHP:
<form ...> 
...
        <p>Datum:
<?php
        $zeit = time();
        $heute = getdate($zeit);
        $erstellungsdatum = $heute[year] . "-" . $heute[mon] . "-" . $heute[mday];
        echo("<input type='text' size='12' name='datum' value='$erstellungsdatum'>");
?>
...
</form>
Und später soll dann eben die Zuweisung erfolgen:
PHP:
        $sql = "INSERT INTO artikel SET
            datum = '$datum'";
aber in der Datenbank kommt nur 0000-00-00 an.
Wie macht ihr denn so eine Datumseingabe?
 
Korrektur

Ich muss mich leider korrigieren, es kommt nichts in der Datenbank an, denn ich bekomme vorher eine Fehler Meldung:
Fehler beim hinzufügen des Artikels: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'datum = '2004-6-7'' at line 12
Es liegt auch nicht daran, dass Monat und Tag einstellig sind, denn bei einer zweistelligen Darstellung bekomme ich die gleiche Fehlermeldung.
 
eleganter, bringt aber nix

und das
PHP:
<?php
        $erstellungsdatum = date("Y") . "-" . date("m") . "-" . date("d");
        echo("<input type='text' size='12' name='datum' value='$erstellungsdatum'>");
?>
ist eleganter, ändert aber auch nichts an der Fehlermeldung.
 
falscher Alarm

habe oben bei der INSERT Anweisung natürlich noch mehrere SET Zuweisungen stehen gehabt und bei einer ein Komma vergessen. Jetzt gehts. Ihr könnt also dieses Thema getrost streichen. Sorry, dass ich euch damit belästigt hab.
 
Re: eleganter, bringt aber nix

Original geschrieben von Steglich
und das
PHP:
<?php
        $erstellungsdatum = date("Y") . "-" . date("m") . "-" . date("d");
        echo("<input type='text' size='12' name='datum' value='$erstellungsdatum'>");
?>
ist eleganter, ändert aber auch nichts an der Fehlermeldung.
&nbsp;

PHP:
$erstellungsdatum = date('Y-m-d');

So ist es einfacher! ;)
 
Ansonsten in SQL einfach den Spaltentyp Timestamp mit NOW definieren…

Dann muss man in PHP nichts mehr machen und bekommt die Ergebnisse direkt in der Abfrage mitgeteilt ;)


So wie Delmar das vorschlägt ist es natürlich auch sehr einfach, da würde ich dann aber auf den DATE Typ der Spalte verzichten und stattdessen varchar(255) wählen.


Du kannst ja mal ausprobieren diese Tabelle anzulegen und dann sehen, was dir am besten gefällt.

PHP:
//SQL
CREATE TABLE `tab` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `date` date default NULL,
  `timestamp` timestamp(14) NOT NULL,
  `date_string` varchar(255) default NULL,
  `inhalt` varchar(255) default NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `timestamp` (`timestamp`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;


Jedesmal, wenn du dort etwas für $inhalt einfügst, wird direkt ein Timestamp generiert, genau zu dem Zeitpunkt, zu dem die Aktion erfolgt.


Was dir garantiert weiterhilft wäre mal ein Blick auf php.net, Funktionsreferenz date()

…und mysql.org, Dokumentation „Datum Uhrzeit Spalten Funktionen“


Liebe Grüße

Yves
 
Vielleicht nochmal Delmars Vorschlag ganz deutlich…


PHP:
<?php
require_once('config.inc.php');

if($_POST['action']=='insert')
    {
    $date=date('Y.m.d');
    mysql_db_query($db_dbase,"insert into $db_tab (date,inhalt) VALUES ('$date','$_POST[inhalt]')");
    }  
else
    {
    echo'
        <form action="'.$_SERVER['PHP_SELF'].'" method="post">
            <input type="hidden" name="action" value="insert">
            <input type="text" name="name" value="inhalt"><br>
            <input type="submit" value="Insert">
        </form>
        ';
    }
?>

Sobald du Insert klickst, wird das Script ja erneut aufgerufen und dann direkt vor der Query die Variable $date definiert, die du dann in die db einfügst.

Ich glaube das ist doch am einfachsten… ohne viel Gewurschtel… eleganter finde ich allerdings immer noch Timespamp mit NOW und dann bei der Abfrage den Timestamp in die gewünschten Angaben wandeln…

Aber was red ich mir den Mund fusselig, ist ja schon alles gesagt worden… hehe.


Yves
 
Sehr gut, kleiner Padawan! :D
 
useability

Danke Yves für deine Hinweise, aber ich wollte es so machen, dass der Benutzer im Formularfeld das aktuelle Datum vorgeschlagen bekommt und es dann aber editieren und verändern kann.
Was mir jetzt noch fehlt ist eine funktion, die überprüft, ob das vom Benutzer eingegebene Datum syntaktisch und inhaltlich richtig ist. Gibt es soetwas schon oder muss ich das selbst schreiben?
 
Zurück
Oben Unten