Announcement

Collapse
No announcement yet.

Datum eintragen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datum eintragen

    Hallo Miteinander

    Ich möchte mittels Formular ein Datum in die DATE Eingenschaft meiner Datenbank eintragen sodass ich es nachher soriteren kann. Die Aufstellung 0000-00-00 spielt bei mir momentan keine Rolle, kann auch so gleiben. Aber wenn ich im Formular 2011-01-01 eintrage, bleibt das gespeicherte immer 0000-00-00. Was muss ich anpassen?

    Danke für die Feedbacks!

    Meine MySQL Tabellenstruktur
    PHP Code:
    CREATE TABLE `Games` (
      `
    idint(11NOT NULL AUTO_INCREMENT,
      `
    Releasedate NOT NULL DEFAULT '0000-00-00',',
      `Hinzugefuegt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; 
    HTML Formular:
    HTML Code:
    <form action="eingetragen.php" method="POST" enctype="multipart/form-data" id="eintragen">
    
    <label for="release">Release</label>
      <input type="text" name="release" id="release" />
        
        <input type="submit" class="submit" name="submit" value="Eintragen" />
    </form>
    PHP Eintragung:
    PHP Code:
    $server "xxx";
    $user "xxx";
    $pw "xxx";
    $verdindung_server mysql_connect ("$server""$user""$pw") or die ("connection failed");
    mysql_select_db ("gamedb") or die ("no database");

    $release =  $_POST['release']; 

    mysql_query("INSERT INTO Games (Release) VALUES ('$release')"); 

  • #2
    soweit ich sehe trägst du den Inhalt aus dem Textfeld sofort in das Datumsfeld ein.
    a) Hast du die Variable vor dem Eintragen mal ausgeben lassen?
    b) Versuche mal die Variable in ein Datum zu casten und dann noch einmal ausgeben zu lassen. Vllt scheitert es daran.
    c) SQL-Injection-Gefahr!!!

    Comment


    • #3
      Originally posted by CLL View Post
      soweit ich sehe trägst du den Inhalt aus dem Textfeld sofort in das Datumsfeld ein.
      a) Hast du die Variable vor dem Eintragen mal ausgeben lassen?
      b) Versuche mal die Variable in ein Datum zu casten und dann noch einmal ausgeben zu lassen. Vllt scheitert es daran.
      c) SQL-Injection-Gefahr!!!
      Hallo. Danke für die Antwort.
      Und sorry für meine späte Antwort .

      Genau. Wie soll ich es dann machen?
      a) Ja es wird genau das ausgegeben was man eingetragen hat.
      b) Das funktionierte auch, sofern ich dich richtig verstanden habe:

      Das hier ..
      PHP Code:
      $release date("M-d-Y"mktime(00004201989)); 
      .. gibt das aus. ..

      HTML Code:
      Apr-20-1989
      Aber mit diesem Code um die Eintragung zu testen ..

      PHP Code:
      mysql_query("INSERT INTO Games (Release) VALUES ('$release')"); 
      .. wird das Datum nicht in die Datenbank eingetragen. Es wird nicht mal ein leerer Datensatz erstellt.

      Wenn ich aber alles andere eintragen will, funktioniert dieser mysql_query Script. Die Daten werden in die Datenbank eingetragen:

      PHP Code:
      mysql_query("INSERT INTO Games (Cover, Titel, Genre, Release, Durchgespielt, Plattform, Kinect, Region, Sprache, Kommentar) VALUES ('$cover', '$titel', '$genre', '$release', '$durchgespielt', '$plattform', '$kinect', '$region', '$sprache', '$kommentar')"); 
      c) Danke für den Hinweis.

      Ich bin ein PHP Anfänger.

      Bei folgenden Links bin ich auch nicht schlauer geworden als mein skript oben:

      http://dev.mysql.com/doc/refman/5.1/de/using-date.html
      http://php.net/manual/de/function.date.php
      http://www.php.net/manual/de/function.mktime.php

      Comment


      • #4
        mysql_query...

        Warum nutzt du nicht die Möglichkeiten der Fehleranalyse und Ausgabe
        von Fehlern? Die Methode gibt ein Ergebnis zurück, Variablen wie
        mysql_error stehen zur Verfügung

        Christian

        Comment


        • #5
          Hallo,
          auch wenn Du PHP-Anfänger bist (wer war das nicht!?), dann wirst Du hier DATE-Spaltenformat
          das gelesen haben:
          Das Format eines DATE-Werts ist 'YYYY-MM-DD'. Im Standard-SQL ist kein anderes Format erlaubt
          Weiter heisst es:
          ...zwischen den einzelnen Teilen jedes Interpunktionszeichen als Trennzeichen zulässig ist. So sind zum Beispiel '2004-08-15' und '2004#08#15' äquivalent...
          Daraus schliesst, dass
          Code:
          $release = date("M-d-Y", mktime(0, 0, 0, 04, 20, 1989));
          und somit Apr-20-1989 im UPDATE nicht funktionieren kann.

          PHP Code:
          mysql_query("INSERT INTO Games (Release) VALUES ('$release')"); 
          .. wird das Datum nicht in die Datenbank eingetragen. Es wird nicht mal ein leerer Datensatz erstellt.
          Ist auch richtig, da das Format für die DATE-Spalte falsch ist

          Wenn ich aber alles andere eintragen will, funktioniert dieser mysql_query Script. Die Daten werden in die Datenbank eingetragen:

          PHP Code:
          mysql_query("INSERT INTO Games (Cover, Titel, Genre, Release, Durchgespielt, Plattform, Kinect, Region, Sprache, Kommentar) VALUES ('$cover', '$titel', '$genre', '$release', '$durchgespielt', '$plattform', '$kinect', '$region', '$sprache', '$kommentar')"); 
          ABER-->> Die DATE-Spalte bleibt nach wie vor auf '0000-00-00'

          Comment


          • #6
            Ist auch richtig, da das Format für die DATE-Spalte falsch ist
            ....was er mit entsprechender Fehlerbehandlung rausgefunden hätte....
            Christian

            Comment


            • #7
              Originally posted by Christian Marquardt View Post
              ....was er mit entsprechender Fehlerbehandlung rausgefunden hätte....
              dacor ... und spätestens hier
              Apr-20-1989
              gestolpert sein müsste...

              Comment


              • #8
                Hier steht http://dev.mysql.com/doc/refman/5.1/de/using-date.html das DATE in UPDATE ausdrücken muss, funktioniert es also nicht mit INSERT?

                Originally posted by raiguen View Post
                Hallo,
                auch wenn Du PHP-Anfänger bist (wer war das nicht!?), dann wirst Du hier DATE-Spaltenformat
                das gelesen haben:
                Weiter heisst es:

                Daraus schliesst, dass
                Code:
                $release = date("M-d-Y", mktime(0, 0, 0, 04, 20, 1989));
                und somit Apr-20-1989 im UPDATE nicht funktionieren kann.

                Ist auch richtig, da das Format für die DATE-Spalte falsch ist


                ABER-->> Die DATE-Spalte bleibt nach wie vor auf '0000-00-00'
                Jetzt hab ich gemerkt dass ich eigentlich Y-m-d schreiben muss. Oder?

                Bei diesem jetzigen Code..

                PHP Code:
                <?php

                $release 
                =  date('Y-m-d');

                echo 
                $release;

                mysql_query("INSERT INTO Games (Release) VALUES ('$release')");

                echo 
                mysql_errno() . ": " mysql_error() . "\n";
                ?>;
                .. wird nun das ausgegeben:
                Code:
                2011-10-151064: 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 'Release) VALUES ('2011-10-15')' at line 1
                Das Datum wird ja jetzt im richtigen Format ausgegeben oder? '2011-10-15'

                Aber es erscheint diese Fehlermeldung

                Comment


                • #9
                  Sorry wegen Doppelpost.

                  Ich habs jetzt hin bekommen nach zahlreichen Schritt für Schritt Tests.
                  Schlussendlich habe ich entschieden genau den Code zu testen das in phpmyadmin angezeigt wird wenn ich ein Datensatz mit Datum einfüge.

                  Ich bin zum Schluss gekommen dass das Problem nur noch an den Anführungszeichen lag..

                  Diese Dateneinbindung funktionierte ohne Datumseintragung:

                  PHP Code:
                  mysql_query("INSERT INTO Games (Cover, Titel, Genre, Durchgespielt, Plattform, Kinect, Region, Sprache, Kommentar) VALUES ('$cover', '$titel', '$genre', '$durchgespielt', '$plattform', '$kinect', '$region', '$sprache', '$kommentar')"); 
                  Mit Datums Eintragung wäre ja nur release dazu gekommen, kam aber ständig Syntax Fehlermeldung wie oben:

                  PHP Code:
                  mysql_query("INSERT INTO Games (Cover, Titel, Genre, Release, Durchgespielt, Plattform, Kinect, Region, Sprache, Kommentar) VALUES ('$cover', '$titel', '$genre', '$release', '$durchgespielt', '$plattform', '$kinect', '$region', '$sprache', '$kommentar')"); 
                  Als ich den Code im phpmyadmin vergleichte, waren nur die komischen Anführungszeichen beim Tabellen und Staltenname anders. Als ich das in meiner PHP Datei auch so anpasste, funktionierte die Eintragung plötzlich:

                  PHP Code:
                  mysql_query("INSERT INTO `Games` (Cover, Titel, Genre, `Release`, Durchgespielt, Plattform, Kinect, Region, Sprache, Kommentar) VALUES ('$cover', '$titel', '$genre', '$release', '$durchgespielt', '$plattform', '$kinect', '$region', '$sprache', '$kommentar')"); 
                  $release selber habe ich nun so definiert:

                  PHP Code:
                  $jahr =  $_POST['release_jahr']; 
                  $monat =  $_POST['release_monat']; 
                  $tag =  $_POST['release_tag'];
                  $release $jahr.'-'.$monat.'-'.$tag// Für YYYY-MM-DD 

                  Comment


                  • #10
                    Hallo,

                    RELEASE ist ein reserviertes Wort in MySQL! Wenn du es als Bezeichner verwendest, dann muss es MySQL-typisch mit ` maskiert werden.

                    Gruß Falk
                    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                    Comment


                    • #11
                      Originally posted by Falk Prüfer View Post
                      Hallo,

                      RELEASE ist ein reserviertes Wort in MySQL! Wenn du es als Bezeichner verwendest, dann muss es MySQL-typisch mit ` maskiert werden.

                      Gruß Falk
                      Achso, interessant. Ich werde mir dann RELEASE im Online Handbuch genauer anschauen.

                      Empfiehlst du mir vielleicht alle Bezeichner mir den ' Zeichen zu umschliessen? Falls man zb. wieder ein Bezeichner wählt der eigentlich als Wort schon reserviert ist.

                      Danke für das Feedback!

                      Comment


                      • #12
                        http://dev.mysql.com/doc/refman/5.5/...ved-words.html
                        Christian

                        Comment


                        • #13
                          Hallo,
                          Originally posted by Publisher View Post
                          Empfiehlst du mir vielleicht alle Bezeichner mir den ' Zeichen zu umschliessen? Falls man zb. wieder ein Bezeichner wählt der eigentlich als Wort schon reserviert ist.
                          Nein!
                          1. Ist ein SQM (Single Quotation Mark - Einzelnes Anführungszeichen) nicht für die Maskierung von Identifiern vorgesehen und
                          2. Führt die Verwendung von reservierten Worten als Bezeichner regelmässig zu Problemen - wie du gerade gesehen hast. Deshalb würde ich eher dazu raten, konsequent auf die Verwendung von reservierten Worten als Bezeichner zu verzichten, dann kann man auch auf die Backticks verzichten.

                          Hinweis: Das Maskierungszeichen für Identifier ist und bleibet das Backtick "`"! Bei aktiviertem ANSI_QUOTES SQL Mode ist zusätzlich noch der Doppelte Anführungsstrich zulässig, was jedoch wieder zur Verwechslung mit Literalen führen kann.

                          Gruß Falk
                          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                          Comment


                          • #14
                            Originally posted by Falk Prüfer View Post
                            Hallo,


                            Nein!
                            1. Ist ein SQM (Single Quotation Mark - Einzelnes Anführungszeichen) nicht für die Maskierung von Identifiern vorgesehen und
                            2. Führt die Verwendung von reservierten Worten als Bezeichner regelmässig zu Problemen - wie du gerade gesehen hast. Deshalb würde ich eher dazu raten, konsequent auf die Verwendung von reservierten Worten als Bezeichner zu verzichten, dann kann man auch auf die Backticks verzichten.

                            Hinweis: Das Maskierungszeichen für Identifier ist und bleibet das Backtick "`"! Bei aktiviertem ANSI_QUOTES SQL Mode ist zusätzlich noch der Doppelte Anführungsstrich zulässig, was jedoch wieder zur Verwechslung mit Literalen führen kann.

                            Gruß Falk
                            Super, vielen herzlichen Dank!

                            Comment

                            Working...
                            X