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

  • nighthawk66
    hat ein Thema erstellt Hilfe bei Timediff in datenbank schreiben.

    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); 

  • nighthawk66
    antwortet
    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

    Einen Kommentar schreiben:


  • dingsda
    antwortet
    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

    Einen Kommentar schreiben:


  • tkausl
    antwortet
    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.

    Einen Kommentar schreiben:


  • nighthawk66
    antwortet
    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

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    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.

    Einen Kommentar schreiben:


  • Chris.
    antwortet
    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.

    Einen Kommentar schreiben:


  • nighthawk66
    antwortet
    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)

    Einen Kommentar schreiben:


  • Chris.
    antwortet
    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.

    Einen Kommentar schreiben:

Lädt...
X