Datum aus Formular in mysql schreiben

  • Hallo, ich hoffe jemand kann mir weiterhelfen.


    Versuche ein Datum aus einem Formular in die SQL Datenbank zu schreiben.


    Funktioniert leider nur richtig, wohl Probleme mit den Variablen.


    So sieht das aus....


    PHP
    if ( $_POST['staffel1']) { 
    $tag = $_POST[ 'tag' ]; 
    $monat = $_POST[ 'monat' ]; 
    $jahr = $_POST[ 'jahr' ]; 
    $datum= $jahr.'-'.$monat.'-'.$tag; 
    $sql="INSERT INTO `datum` (`geburtsdatum`) VALUES ('".$datum."')"; 
    $ergebnis = mysql_query($sql); 
    }


    Wer kann helfen? ?(

  • das Problem ist wirklich so blöd, das man es kaum beschreiben kann.


    Das Datum wird richtig in SQL eingetragen, nur wenn ich im Formular


    Monatsangabe die Werte verändere wird das Datum nicht mehr eingetragen, da kommen


    dann nur noch Nullen in das Date Format.


    Ich hoffe, da hat irgendjemand eine Idee, ich bin mit meinem Latein


    am Ende..... :huh:

  • Schätze ´geburtsdatum´ ist vom Typ DATE. Dann wird der Wert, den Du reinschickst, ein falsches Format haben und somit bekommst Du 0000-00-00.


    Lass Dir mal die Query ausgeben:

  • danke für die schnelle Antwort, war gestern Abend leider unterwegs.


    @ lauras.... Fehlermeldung bekomme ich nicht, da mindestens Nullen eingeschrieben werden.


    @ Cotton..... geburtsdatum ist vom Typ DATE, das muss glaube ich auch so sein, da ich mir im weiteren Verlauf das Lebensalter


    berechnen lasse. Das klappt auch, nur wenn ich den Monat im Formular verändere kommen nur Nullen an.


    Das mit den Nullen kenne ich von früher aus der Disko, aber das ist eine andere Geschichte :) .


    Spaß beiseite....


    Hier die php-befehle:



    Das ist die Ausgabe:


    PHP
    Array 
    ( 
    [id] => 36 
    [geburtsdatum] => 2001-01-31 
    ) 
    Array 
    ( 
    [id] => 37 
    [geburtsdatum] => 0000-00-00     .....das kommt raus wenn ich Monat 2 eingebe....
    )




    Das ist das Formular:





    HILFE..... ;(

  • Hab auch gerade was gelernt :D
    => INSERT INTO `datum` (`geburtsdatum`) VALUES ('2001-09-30) == fuktioniert
    => INSERT INTO `datum` (`geburtsdatum`) VALUES ('2001-09-31') == funktioniert NICHT


    denn der Tag '2001-09-31' existiert nicht =)


    Zitat von http://dev.mysql.com/doc/refman/5.1/de/using-date.html


    Wenn Sie den SQL-Modus ALLOW_INVALID_DATES eingestellt haben, gestattet MySQL Ihnen die Speicherung von Datumswerten bei nur rudimentärer Überprüfung: MySQL verlangt lediglich, dass der Tag im Bereich von 1 bis 31 und der Monat im Bereich von 1 bis 12 liegt.


    'ALLOW_INVALID_DATES' ist wohl on default NICHT deaktiviert. Sql prüft also, ob der Tag existiert. Wenn nicht, dann werden 0000-00-00 gespeichert.
    Es wird auch eine Warning ausgegeben:

    Zitat


    1 row(s) affected, 1 warning(s): 1265 Data truncated for column 'geburtsdatum' at row 1


    Da es allerdings kein Fehler ist, wird die Query ausgeführt.


    Fazit: sogesehen eine schöne Sache. Denn Du bekommst nur echte Daten in die db. Nur muss jetzt entweder eine Daten-Prüfung per JS(im Browser vor Absenden)/PHP(nach Absenden und vor Sql Query --empfohlen) her.
    Könnte mir auch vorstellen, dass man Sql "vertraut" und einfach prüft, ob das DATE denn richtig gespeichert werden konnte.
    (Muss ich selbst auch noch mal reingucken =)


    EDIT:
    einfache prüfung via PHP:

    PHP
    if(checkdate($_POST['monat'],$_POST['tag'],$_POST['jahr'])===true){
        $sql="INSERT INTO `datum` (`geburtsdatum`) VALUES ('".mysql_real_escape_string($datum)."')"; 
    }else{
        # error msg
    }
  • Hallo,


    bei mir ist ein neues Problem aufgetaucht...


    Versuche den INSERT INTO durch UPDATE zu ersetzen.


    Leider werden die Werte nicht übernommen. Kann mir da jemand weiterhelfen? z,B. Cotton?


    Hier mein Code....



    Das gleiche wird ausgegeben var_dump beim INSERT INTO Befehl.
    Danke für eure Hilfe.... :)
    Kirsten

  • Klammern wech, und WHERE mit rein =)

    PHP
    $sql="UPDATE `datum` SET `geburtsdatum` = '".$datum."' WHERE ´id´ = ".$id."";


    Und (sobald die Seite online erreichbar ist) denk an filtern des Benutzer-Inputs mit zB mysql_real_escape_string() in der query, und zb auch checkdate($_POST['monat'],$_POST['tag'],$_POST['jahr']).

  • Naja klar, Du musst bestimmen wo dieser neue Wert (das Datum) geändert werden soll.


    Du hast ja bestimmt mehr als nur das ´geburtsdatum´ in einer Zeile in der Datenbank.
    In der Regel nutzt man IDs, zB fortlaufene IDs (AUTO_INCREMENT).


    Somit heisst:
    $sql="UPDATE `datum` SET `geburtsdatum` = '".$datum."' WHERE ´id´ = ".$id."";


    in etwa: UPDATE db "datum" und SET (setze) ´geburtsdatum´ zu $datum WHERE (wo) ´id´ gleich $id


    Was steht da noch alles in der db in einer Zeile? Gibts eine ID ?

  • Ja da steht noch zusätzlich eine id (int) AUTO_INCREMENT.


    Die Datenbank heißt vergleich, die Tabelle datum .


    In der Tabelle gibt es zwei Felder, 1x id , 1x geburtsdatum .


    Eigentlich doch alles richtig..... ?(


    So sieht es aus.....



    Dann müsste es ja eigentlich UPDATE vergleich, datum heißen,


    funktioniert aber auch nicht...


    Schau bitte noch mal nach.... ;)

  • Also hast Du in tabelle ´datum´ eine fortlaufende ID und die Spalte ´geburtsdatum´ - ok.


    Wenn Du nun das Formular ausgibts, also dem Benutzer anzeigst, dann muss Dir (dem PHP script) klar sein, wer gerade dieses Formular vor sich hat.
    zB wenn der Benutzer eingeloggt ist, dann kennst Du (also das PHP script) die ID.
    Und anhand der ID kannst Du beim UPDATE das ´geburtsdatum´ dem richtigen Benutzer zuweisen.


    Du musst also bei einem UPDATE erstmal dafür sorgen, dass der Benutzer, der das Script/die Seite/das Formular aufruft, auch identifizierbar ist.

  • Ok, verstehe ich, jeder der ein neues Datum eingibt soll eine neue id bekommen.


    Ich habe versucht es mit einer Session zu lösen:





    Die id ist ja so zugewiesen worden, funktioniert aber nicht. ?(

  • Nein, nicht irgenteine ID vergeben =)


    Von vorn:


    (angenommen) Du hast eine momentan leere Datenbank mit
    - Tabelle "benutzer" mit Spalten "ID" (fortlaufend), "name", ect
    - Tabelle "datum" mit Spalten "ID", "geburtsdatum", ect


    Wenn sich jetzt ein Benutzer registriert, dann erstellst Du in Tabelle "benutzer" einen Neuen Benutzer
    zb;
    "INSERT INTO ´benutzer´SET ´name´ = ".$_POST['name']." "
    Dabei wird die ID vom SQL-Server fortlaufend erstellt -- hier zB "1".


    Damit hast Du in Tabelle "benutzer" eine Zeile (Datensatz) mit:
    ID: 1
    name: soundso


    und in Tabelle datum steht noch nichts drin.



    Jetzt hat sich der Benutzer soundso eingeloggt und Du hast anhand des Logins Seine ID -- im Bsp "1".
    Du "zeigst" dem Benutzer das Formular zum angeben des Geburtsdaturms. Der füllt es aus und schickt es ab.
    Dadurch weißt Du, dass Benutzer mit ID "1" das datum "$datum" angegeben hat und speicherst es in der Datebbank -- in etwa so:
    "INSERT INTO ´datum´ SET ´geburtsdatum´ = ".$datum.", ID = ".$id." "


    Man kann das Ganze jetzt noch weiter ausbauen, wie zB:
    "INSERT INTO ´datum´ SET ´geburtsdatum´ = ".$datum.", ID = ".$id." ON DUPLICATE KEY UPDATE ´geburtsdatum´"
    -> bedeutet: wenn primärschlüssel "ID" (=>einzigartig/nur einmal vorkommend) schon vorhanden ist, dann update in diesem Datensatz nur das feld ´geburtsdatum´ mit dem neuen Wert.


    Empfehlung: http://www.php-kurs.com/mysql---datenbank-unter-php.htm

  • Danke erst mal für deine Hilfe....


    Der UPDATE Befehl will irgendwie nicht so richtig in mein


    (zu kleines Gehirn) rein... :pinch:


    Ich werde jetzt erst mal die http://www.php-kurs.com/mysql---datenbank-unter-php.htm


    Sachen durchgehen . Alternativ kann man das ja vielleicht auch mit dem normalen INSERT INTO Befehl in einer


    WHILE Schleife lösen und dann mit DELETE einzelne Bereiche wieder löschen. Es funktioniert ja auch sonst alles, auch


    das Alter wird richtig ausgegeben.


    So ist jetzt mein Code...das Formular habe ich erweitert


    HTML
    <input type="hidden" name="neuergast" value=""/> 
    <input type="submit" name="staffel1" value=" speichern"/>





    Sobald ich mit UPDATE anfange wird nichts eingetragen.


    Falls die noch was einfällt, bin dankbar für jeden Rat...


    Vielen Dank bis hierher für deine Hilfe. :thumbup:

  • sorry, hab " = ".$datum."" vergessen:


    PHP
    $sql="INSERT INTO ´datum´ SET ´geburtsdatum´ = ".$datum.", id = ".$id." ON DUPLICATE KEY UPDATE ´geburtsdatum´ = ".$datum."  ";


    Wieso eigl "gast" ? So wie ich das sehe speicherst Du jetzt alle Einträge mit id "" (leer).
    Die Tabelle sähe dann in etwa so aus:

    PHP
    zeile	id		geburtsdatum
    1				11.11.2011
    2				22.02.2001
    3				10.12.2011


    Somit kannst Du keinen Beutzer identifizieren.


    btw: checkDate() => http://www.php.net/manual/en/function.checkdate.php

    PHP
    if ( checkdate($_POST['monat'],$_POST['tag'],$_POST['jahr']) === true )
    {
     # datum ok
    }
    else
    {
     # datum nicht ok
    }
  • Ja stimmt, neuergast war beim letzten Mal leer. Ich hatte es auch schon mal mit


    einem Wert versucht, klappt auch. Der Wert in dem Beispiel Nr. 4 wird als einmalige id


    im die Datenbank geschrieben. Der UPDATE Befehl klappt aber trotzdem nicht.


    Auch der geänderte leider nicht.


    HTML
    <input type="hidden" name="neuergast" value="4"/> 
    <input type="submit" name="staffel1" value=" speichern"/>





    Scheint doch in Ordnung zu sein, so wird die id einmal vergeben per INSERT INTO.

  • Was machst Du denn?

    PHP
    if ( checkdate($_POST['monat'],$_POST['tag'],$_POST['jahr']) === true ) 
    { 
    echo "Datum ok"; // Ausgabe Datum ok 
    } 
    else 
    { 
    echo "Datum nicht richtig" ; 
    }


    Du sollst es doch nicht ausgeben lassen :D
    Es soll doch als Prüfung dienen:

    PHP
    if ( checkdate($_POST['monat'],$_POST['tag'],$_POST['jahr']) === true ) 
    { 
     # hier schreibst Du weiter. Also ab hier kannst Du die POST Daten nutzen, um sie in die db zu schreiben.
    } 
    else 
    { 
     # hier kommt die Fehlerbehandlung rein (zB Meldung an den Benutzer)
    }


    Guck am besten hier mal rein; http://www.php-kurs.com/beispi…eren-in-php-und-mysql.htm
    =)

  • Es ist vollbracht.....


    Ich sollte doch im Zweifelsfall mal mehr lesen als probieren.


    Einen Datensatz habe ich jetzt in der Tabelle angelegt, der wird nun auch geändert.


    PHP
    $sql="UPDATE datum SET `geburtsdatum` =('".$datum."')"; // funktioniert 
    //$sql="INSERT INTO ´datum´ SET ´geburtsdatum´ = ".$datum.", id = ".$id." ON DUPLICATE KEY UPDATE ´geburtsdatum´ = ".$datum." "; // geht nicht....


    Vielen Dank für deine Hilfe Cottton, :thumbup:


    da kommen bestimmt noch mehr Fragen......

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!