Ankündigung

Einklappen
Keine Ankündigung bisher.

Hilfe bei Timediff in datenbank schreiben

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Hilfe bei Timediff in datenbank schreiben

    hi leute,

    bin grad dabei mir selber php und mysql beizubringen und schreibe an einem eigentlich einfachen script zur Stundenberechnung bei dem ich einfach nicht weiterkomme.
    habe eine Tabelle mit drei Spalten, alle mit TIME formatiert. Man gibt nun die Anfangszeit und die Endzeit ein (in hh:mm) wird jeweils in einer TIME Spalte gespeichert das klappt alles wunderbar auch mit dem schreiben in der Datenbank.
    Nun bekomme ich aber die Ausgabe der berechneten Stunden nicht hin.
    Sobald ich die Funktion TIMEDIFF einfüge kommt nur noch Murks heraus
    Realisiere das ganze mit timediff(endzeit,anfangszeit)
    Wäre suuper wenn mit da jemand helfen könnte

    grüße nighthawk

    hier das script:
    PHP-Code:
    if (isset( $_POST['eintragen'] ))
    {
        
    // Inhalte der Felder aus POST holen
        
    $zeit_start $_POST['startzeit'];
        
    $zeit_ende $_POST['endzeit'];
        

    // Sind alle Eingaben durch die Validierung gekommen werden sie in die DB geschrieben
    // Verbindung oeffnen und Datenbank ausweahlen
        
    $conID mysql_connect$db_host$db_user$db_pass ) or die( "Die Datenbank konnte nicht erreicht werden!" );
        if (
    $conID)
        {
            
    mysql_select_db$db_name$conID );
        }

    $result_timediff "SELECT TIMEDIFF(`uhrzeit_ende`,`uhrzeit_start`)FROM `stundenberechnung`";  


    // Anfrage zusammenstellen der an die DB geschickt werden soll
        
    $sql "INSERT INTO `stundenberechnung`
                    (`uhrzeit_start`, `uhrzeit_ende`, `uhrzeit_differenz`)
                VALUES(
                '"
    .zeiterfassung_start($zeit_start)."',
                '"
    .zeiterfassung_ende($zeit_ende)."',
                " 
    .$result_timediff"
                    )"
    ;          
                      
                      
        
    // Schickt die Anfrage an die DB und schreibt die Daten in die Tabelle
        
    mysql_query$sql); 


  • #2
    Code:
    mysql> SELECT TIME_FORMAT(TIMEDIFF("13:52:25", "09:05:54"), "%H:%i:%s");
    +-----------------------------------------------------------+
    | TIME_FORMAT(TIMEDIFF("13:52:25", "09:05:54"), "%H:%i:%s") |
    +-----------------------------------------------------------+
    | 04:46:31                                                  |
    +-----------------------------------------------------------+
    1 row in set (0.08 sec)
    P.S.: Wenn du die Uhrzeit des Ende speicherst wirst du Probleme haben. Sobald es über die 0 Uhr Grenze hinaus geht oder die Veranstaltung länger als 24 Stunden geht, dann wird die Berechnung nicht mehr stimmen. Du solltest daher eher die Dauer der Veranstaltung als das Ende speichern.

    Kommentar


    • #3
      erstmal Danke für den Hinweis mir geht es aber erstmal um die Grundlage wie ich einen errechneten Wert der nicht durch eingabe stattfindet in eine tabelle schreiben kann und dass will noch nicht.

      wenn ich deine zahlenwerte durch meine variablen ersetzte dann gehts leider immer noch nicht
      PHP-Code:
      $result_timediff "SELECT TIME_FORMAT(TIMEDIFF(`uhrzeit_ende`, `uhrzeit_start`), "%H%i%s")" 
      hast du das "FROM tablename" mit Absicht weggelassen?

      ich bin mit auch nicht sicher ob ich bei der Angabe der timediff Werte meine Variablen oder die spaltenamen angeben muss

      und muss das TIME_FORMAT immer in der TIMEDIFF Funktion enthalten sein da ich die korrekte Eingabe und speicherung der eingabezeiten in einer Funktion realisiert habe (hh:mm:00)

      Kommentar


      • #4
        Du solltest dich mit den Grundlagen der Sprache SQL befassen. Man kann mit SQL viel mehr machen, als nur von einer Tabelle Datensätze auslesen. Schließlich ist es ja eine eigenständige Sprache. Daher muss auch nicht immer FROM in einem Select-Statement stehen.

        Funktionen kannst du einsetzen, wo und wie du möchtest. Du kannst Werte einsetzen (Manuell oder via PHP), kannst aber auch auf Feldnamen zurückgreifen. Hier wird dann ein FROM benötigt, da du von Feldern einer bestimmten Tabelle Gebrauch machst.

        Den Quellcode, den du dort oben gepostet hast, funktioniert so nicht.
        • Entweder stimmt der Name der Variable nicht, oder du hast noch nicht komplett inne, wie man einen Query absendet und das entsprechende Resultat herbeiführt.
        • Dein Query funktioniert so nicht, denn woher stammen die Feldnamen? Dir fehlt ein Bezug zu einer Tabelle, wenn du von Feldern Gebrauch machen möchtest. Und warum sendest du zwei Queries statt lediglich einem?

        Ein Vorschlag:

        PHP-Code:
        $sql 'INSERT INTO `stundenberechnung` (`uhrzeit_start`, `uhrzeit_ende`, `uhrzeit_differenz`)
                VALUES("' 
        $begin '", "' $end "', TIME_FORMAT(TIMEDIFF("' . $end. '", "' . $begin . '"));'; 
        P.S.: Die MySQL API, die du verwendest, ist als deprecated eingestuft und dies schon seit Ewigkeiten. Mache dich mit mysqli und/oder PDO vertraut.

        Kommentar


        • #5
          Zitat von nighthawk66 Beitrag anzeigen
          hi leute,

          bin grad dabei mir selber php und mysql beizubringen und ...
          ... machst einiges falsch. Zum einen brauchst man Dinge, die aus Spalten berechenbar sind, nicht extra zu speichern. Also, Start und Ende ist okay, aber in einer dritten Spalte die berechnete Differenz davon zu speichern ist Unfug.

          Du willst den Wert in der dritten Spalte speichern, machst aber ein INSERT. Das erzeugt eine neuen Record, Du willst aber einen bestehenden UPDATEn.

          Du hast keinerlei Eingabeprüfung, SQL-Injection ist so möglich.

          Du verwendest eine alte API, die deprecated ist.

          Und auch wenn einige das nicht gerne hören: zum SQL-lernen ist MySQL schlecht, weil es sich nicht an die SQL-Normen hält und weil es SQL nur ansatzweise richtig macht.
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar


          • #6
            Zitat von Chris. Beitrag anzeigen
            Du solltest dich mit den Grundlagen der Sprache SQL befassen. Man kann mit SQL viel mehr machen, als nur von einer Tabelle Datensätze auslesen. Schließlich ist es ja eine eigenständige Sprache. Daher muss auch nicht immer FROM in einem Select-Statement stehen.

            Funktionen kannst du einsetzen, wo und wie du möchtest. Du kannst Werte einsetzen (Manuell oder via PHP), kannst aber auch auf Feldnamen zurückgreifen. Hier wird dann ein FROM benötigt, da du von Feldern einer bestimmten Tabelle Gebrauch machst.

            Den Quellcode, den du dort oben gepostet hast, funktioniert so nicht.
            • Entweder stimmt der Name der Variable nicht, oder du hast noch nicht komplett inne, wie man einen Query absendet und das entsprechende Resultat herbeiführt.
            • Dein Query funktioniert so nicht, denn woher stammen die Feldnamen? Dir fehlt ein Bezug zu einer Tabelle, wenn du von Feldern Gebrauch machen möchtest. Und warum sendest du zwei Queries statt lediglich einem?

            Ein Vorschlag:

            PHP-Code:
            $sql 'INSERT INTO `stundenberechnung` (`uhrzeit_start`, `uhrzeit_ende`, `uhrzeit_differenz`)
                    VALUES("' 
            $begin '", "' $end "', TIME_FORMAT(TIMEDIFF("' . $end. '", "' . $begin . '"));'; 
            P.S.: Die MySQL API, die du verwendest, ist als deprecated eingestuft und dies schon seit Ewigkeiten. Mache dich mit mysqli und/oder PDO vertraut.
            Danke für die Tipps das mit den zwei sql befehlen hab ich für mich fürs bessere Verständinis gemacht.
            Ich bekomme die Ergebnisse des timediffs leider immer noch nicht gespeichert.

            zum Verständnis:
            es werden über ein Formular zwei Zeiten eingegeben die jeweils in einer TIME Tabelle gespeichert werden:
            Anfangszeit ist Variable $zeit_start,
            Endzeit ist Variable $zeit_ende.
            Die Tabelle heist "stundenberechnung" und die jeweiligen spalten "uhrzeit_start", "uhrzeit_ende" und "uhrzeit_differenz"
            Das klappt bis dahin wunderbar und sieht dann bei mir in php so aus:
            PHP-Code:
            $sql "INSERT INTO `stundenberechnung`
                            (`uhrzeit_start`, `uhrzeit_ende` )
                        VALUES(
                        '"
            .zeiterfassung_start($zeit_start)."',
                        '"
            .zeiterfassung_ende($zeit_ende)."'
                              )"

            wenn ich jetzt den php befehl für die berechnung des timediffs einfüge schreibt er einfach nichts in die spalte "uhrzeit differenz" hinein??
            PHP-Code:
            $sql2 "INSERT INTO `stundenberechnung` (`uhrzeit_differenz`)
                    VALUES( TIME_FORMAT(TIMEDIFF(`uhrzeit_ende`, `uhrzeit_start`)))"

            ich bekomms einfach nicht hin wie ichs dreh und wende. Ich denke es wird kleine ursache grosse wirkung sein
            hatt jemand noch nen tipp für mich was ich machen könnte

            Kommentar


            • #7
              Das ergibt ja auch keinen Sinn was du da machst. uhrzeit_start und uhrzeit_ende existieren ja bei einem INSERT nicht, die Query würde so nur bei einem UPDATE sinn ergeben.
              Zitat von nikosch
              Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

              Kommentar


              • #8
                akretschmer hat schon den richtigen hinweis gegeben:
                Zitat von akretschmer Beitrag anzeigen
                Du willst den Wert in der dritten Spalte speichern, machst aber ein INSERT. Das erzeugt eine neuen Record, Du willst aber einen bestehenden UPDATEn.
                beachte allerdings auch
                ... machst einiges falsch. Zum einen brauchst man Dinge, die aus Spalten berechenbar sind, nicht extra zu speichern. Also, Start und Ende ist okay, aber in einer dritten Spalte die berechnete Differenz davon zu speichern ist Unfug.
                es reicht eigentlich entweder anfang + ende zu speichern oder anfang + differenz
                liebe Grüße
                Fräulein Dingsda

                Kommentar


                • #9
                  vielen Dank für die Tipps leute. Habe mit dem INSERT Befehl wohl einen Denkfehler in meinen code reingehauen. Werd ich gleich mal ändern.
                  Danke noch mal an alle für eure hilfreichen Tipps

                  Kommentar

                  Lädt...
                  X