Ausgabe MySQL-Tab (Post) Ergänzung aller Datensätze (GEMEINSAM) dann neu schreiben

  • Hallo liebes Forum,

    ich habe mal wieder ein Problem, das ich ohne Eure Hilfe nicht lösen kann.
    Die besondere Problematik besteht darin, dass ich die Server/Client-Problematik auszuhebeln versuche, was natürlich nicht geht.
    Ich habe eine Mitarbeiter-Tabelle (mySQL). Alle Mitarbeiter sollen in Tabellenform ausgegeben werden. In die Ausgabe möchte ich drei weitere Datenfelder einfügen, die ich dann über die Datensatzgrenzen hinweg mit Zeiteingaben füllen möchte. Nach vollständiger Eingabe möchte ich die Daten in einer Schleife in eine neue Tabelle: Zeitmeldungen (mySQL) schreiben.

    Eine Lösung für jeden einzelnen Mitarbeiter habe ich, das ist mir aber zu umständlich.

    So wie ich mir das vorstelle geht es nicht, vielleicht hat jemand einen kreativen Lösungsansatz, der die Problematik löst?

    Nachtrag von mir:
    Heute morgen ist mir eingefallen, dass die Problematik vermutlich ganz einfach durch EXCEL zu lösen ist.
    Ein Upload einer CSV-Datei in die MySQL-DB sollte dann die Lösung sein.
    Ich werde mich jetzt mal an die EXCEL-Lösung machen. Trotzdem bin mal gespannt, ob jemand eine Lösung mit PHP und MySQL finden wird.

    Danke für Eure Hilfe.

    Script-1:


    Script-2:

    Hier noch eine grafische Darstellung:

  • PHP-Quellcode bitte zwischen [noparse]

    PHP
    Quellcode

    [/noparse]

    Ehrlich gesagt verstehe ich dein Problem nicht. Wo kommst du nicht weiter? Wenn es an

    PHP
    if(isset($_POST['gesendet']))


    dann solltest du dem Button auch den Namen "gesendet" verpassen.

    Dies mal lesen: http://home.mengelke.de/html-php-mysql…sql-select.html

    Tipp: Richtig debuggen


    • Man bemerkt, dass ein Skript nicht das tut, was es soll.
    • Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
    • Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    • Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    • An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...:( mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    • Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    • Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    • Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    • Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

    Einmal editiert, zuletzt von Bandit (29. Oktober 2017 um 11:28)

    • Offizieller Beitrag

    Um ehrlich zu sein, habe ich auch nicht so recht verstanden, wo Dein Problem ist.
    Du willst Mitarbeiter in einer Tabelle ausgeben, drei Felder dazufügen und diese wieder in die DB schreiben?!
    Aber das nicht für jeden Mitarbeiter einzeln? Dann gruppiere halt oder erkläre nochmal detailliert, was Du genau vor hast.

    [MOD: PHP-tags korrigiert in #1]

  • ich habe dem Button einen Namen gegeben - und ich komme rüber in das Script-2
    <p><input type="submit" name="gesendet" value="gesendet"/></p>

    - - - Aktualisiert - - -

    Ich habe keine Ahnung, wie ich die 3 nachträglich eingefügten Datenfelder im Script-2 ansprechen soll.

    - - - Aktualisiert - - -

    hallo Arne,

    ich möchte, wie in einem EXCEL-Arbeitsblatt zu den Stammdaten (Mitarbeiter) - hier die Ausgabe von Script-1) die Zeitmeldungen nacheinander in die Ausgabe von Script-1 direkt eintragen. Die Daten aber erst absenden, wenn ich alle Zeitmeldungen für alle Mitarbeiter eingetragen habe.
    Nach dem SUBMIT sollen das "gesamte Arbeitsblatt" wie in EXCEL abgearbeitet werden. Je ZEILE soll ein Datensatz in die MySQL-Tab geschrieben werden.

    - - - Aktualisiert - - -

    Habe mal eine EXCEL-Tabelle zur Erklärung angefügt:

    In EXCEL würde das erste Eingabefeld: "D2" heißen und hätte den Inhalt: 1700

    3 Mal editiert, zuletzt von hpuettma (29. Oktober 2017 um 19:25)

  • der Name der drei manuell nachgetragenen Felder lautet ja wohl kaum:

    "M5[$id]" aber auch nicht "$m5[$id]"

    wie würde ein echo-Befehl aussehen: echo "Inhalt erstes Datenfeld: " . $m5[$id];

    Auch der folgende Befehl erzeugt einen Syntax-Fehler.

    echo "erstes Datenfeld: " . $_POST['m5[$id'];
    echo "<br />";

    Notice: Undefined index: m5[ in C:\xampp\htdocs\zeitmeldung\zeiten\verwalten\ze_verwalten_b.php on line 18
    erstes Datenfeld:
    gesendete Daten weiterverarbeiten

    4 Mal editiert, zuletzt von hpuettma (29. Oktober 2017 um 17:49)

  • Was willst du nun? Eine PHP-Lösung mit einem Formular oder eine Verarbeitung einer CSV-Datei???

  • ich möchte eine PHP-Lösung!!!

    Wenn aber keiner einen Lösungsansatz hat, werde ich eine EXCEL-Lösung programmieren und dann eine CSV-Datei uploaden. Das ist allerdings nicht meine bevorzugte Lösung, da ich schon einige andere Scripte auch mit PHP und mySQL entwickelt habe.

    - - - Aktualisiert - - -

    ich möchte eine PHP-Lösung!!!

    Wenn aber keiner einen Lösungsansatz hat, werde ich eine EXCEL-Lösung programmieren und dann eine CSV-Datei uploaden. Das ist allerdings nicht meine bevorzugte Lösung, da ich schon einige andere Scripte auch mit PHP und mySQL entwickelt habe.

  • Ein

    PHP
    var_dump($_POST]);


    sollte dir einen Überblick verschaffen, wie die Daten in deinem Script ankommen.

  • der var_dump bringt folgenes Ergebnis:
    (die lesbaren Daten kommen aus der DB, die Namen in den anderen Beispielen sind erfunden)

    array(1) { [0]=> array(11) { ['tag']=> string(2) "29" ['monat']=> string(7) "Oktober" ['jahr']=> string(4) "2017" ['m1']=> array(3) { [6]=> string(1) "6" [7]=> string(1) "7" [5]=> string(1) "5" } ['m2']=> array(3) { [6]=> string(1) "1" [7]=> string(1) "1" [5]=> string(1) "1" } ['m3']=> array(3) { [6]=> string(5) "Admis" [7]=> string(7) "Eveline" [5]=> string(9) "Püttmann" } ['m4']=> array(3) { [6]=> string(5) "Murat" [7]=> string(3) "Pal" [5]=> string(11) "Hans-Werner" } ['m5']=> array(3) { [6]=> string(0) "" [7]=> string(0) "" [5]=> string(0) "" } ['m6']=> array(3) { [6]=> string(0) "" [7]=> string(0) "" [5]=> string(0) "" } ['m7']=> array(3) { [6]=> string(0) "" [7]=> string(0) "" [5]=> string(0) "" } ['gesendet']=> string(8) "gesendet" } }
    Notice: Undefined variable: id in C:\xampp\htdocs\zeitmeldung\zeiten\verwalten\ze_verwalten_b.php on line 19

    Notice: Undefined index: m5[ in C:\xampp\htdocs\zeitmeldung\zeiten\verwalten\ze_verwalten_b.php on line 19
    erstes Datenfeld:
    gesendete Daten weiterverarbeiten

    Hier ein Screen:

    Leider bringt mich der var_dump nicht wirklich weiter, sorry.

    Jetzt habe ich mal alle Datenfelder im Script-1 ausgefüllt, incl. der Zeiten:

    array(1) { [0]=> array(11) { ['tag']=> string(2) "29" ['monat']=> string(7) "Oktober" ['jahr']=> string(4) "2017" ['m1']=> array(3) { [6]=> string(1) "6" [7]=> string(1) "7" [5]=> string(1) "5" } ['m2']=> array(3) { [6]=> string(1) "1" [7]=> string(1) "1" [5]=> string(1) "1" } ['m3']=> array(3) { [6]=> string(5) "Admis" [7]=> string(7) "Eveline" [5]=> string(9) "Püttmann" } ['m4']=> array(3) { [6]=> string(5) "Murat" [7]=> string(3) "Pal" [5]=> string(11) "Hans-Werner" } ['m5']=> array(3) { [6]=> string(4) "1700" [7]=> string(4) "1900" [5]=> string(4) "2000" } ['m6']=> array(3) { [6]=> string(4) "1800" [7]=> string(4) "2000" [5]=> string(4) "2300" } ['m7']=> array(3) { [6]=> string(2) "15" [7]=> string(2) "30" [5]=> string(2) "30" } ['gesendet']=> string(8) "gesendet" } }
    Notice: Undefined variable: id in C:\xampp\htdocs\zeitmeldung\zeiten\verwalten\ze_verwalten_b.php on line 19

    Notice: Undefined index: m5[ in C:\xampp\htdocs\zeitmeldung\zeiten\verwalten\ze_verwalten_b.php on line 19
    erstes Datenfeld:
    gesendete Daten weiterverarbeiten

    Hier dazu ein Screenshot:

    sieht eigentlich im var_dump ganz gut aus, oder?

    Aber jetzt das leidige Problem, wie spreche ich die Zeitangabe-Datenfelder an ??

    ['m5']=> array(3) { [6]=> string(4) "1700" wie bekomme ich den Namen dieser Array-Information raus?
    das entspricht nämlich dem ersten Zeiteingabefeld im ersten Mitarbeiterstammsatz.

    2 Mal editiert, zuletzt von hpuettma (29. Oktober 2017 um 20:07)


  • Leider bringt mich der var_dump nicht wirklich weiter, sorry.


    Nicht?? :shock: :shock:
    Siehst du einen Index id oder m5[?? Ich nicht.



    Aber jetzt das leidige Problem, wie spreche ich die Zeitangabe-Datenfelder an ??

    ['tag']=> string(2) "29" ['monat']=> string(7) "Oktober" ['jahr']=> string(4) "2017"

    Sind die Indeces wirklich das, was du gerne hättest?

  • Im Script-2 hatte ich einen "Versuchs-Echo-Befehl" mit einem Index eingebaut. Den habe ich soeben gelöscht, damit es nicht noch mehr Verwirrung gibt.
    Und nein, ich will nicht das Datum aus dem Script-1 ausgegeben haben sondern die ZEITEINGABEN - von - bis - und die Pausenzeit. Deswegen habe ich im letzten Post auch die Information:

    ['m5']=> array(3) { [6]=> string(4) "1700" wie bekomme ich den Namen dieser Array-Information raus? "1700" steht für 17:00 Uhr, den Doppelpunkt will ich nicht miteingeben, den generiere ich später vor dem Speichern in die neue Tabelle.
    das entspricht nämlich dem ersten Zeiteingabefeld im ersten Mitarbeiterstammsatz.
    geschrieben.

    Jede Zeile (siehe Screenshot letzter Post) soll komplett in eine neue SQL-Tab geschrieben werden.
    Dazu brauche ich ALLE Feldbezeichnungen (inkl. der Zeitangaben von-bis und Pause). Die ersten Informationen (Name ...) bekomme ich aus den Stammdaten, die ich zuvor zur Ausgabe von Script-1
    benutzt habe.

    - - - Aktualisiert - - -

    Hallo Bandit,

    durch folgenden Befehl im Script-2 ist die Verwirrung entstanden:

    //<td><input name=//<td><input name='m5[$id]' value='" ?? . "' size='10' /></td>"' value='" ?? . "' size='10' /></td>"

    Ich hatte durch einen echo-befehl versucht die Information: name='m5[$id]' auszugeben.
    Den Befehl habe jetzt gelöscht. Es war nur ein Versuch. die NOTICE-Fehlermeldung erscheint nicht mehr.

    - - - Aktualisiert - - -

    Hier nochmal das Script-2 - eigentlich passiert hier gar nichts.

    Und hier nochmal die Ausgabe:

    array(1) { [0]=> array(11) { ['tag']=> string(2) "29" ['monat']=> string(7) "Oktober" ['jahr']=> string(4) "2017" ['m1']=> array(3) { [6]=> string(1) "6" [7]=> string(1) "7" [5]=> string(1) "5" } ['m2']=> array(3) { [6]=> string(1) "1" [7]=> string(1) "1" [5]=> string(1) "1" } ['m3']=> array(3) { [6]=> string(5) "Admis" [7]=> string(7) "Eveline" [5]=> string(9) "Püttmann" } ['m4']=> array(3) { [6]=> string(5) "Murat" [7]=> string(3) "Pal" [5]=> string(11) "Hans-Werner" } ['m5']=> array(3) { [6]=> string(0) "" [7]=> string(0) "" [5]=> string(0) "" } ['m6']=> array(3) { [6]=> string(0) "" [7]=> string(0) "" [5]=> string(0) "" } ['m7']=> array(3) { [6]=> string(0) "" [7]=> string(0) "" [5]=> string(0) "" } ['gesendet']=> string(8) "gesendet" } }
    wenn ich jetzt die Feldnamen für die Zeiteingaben hätte, könnte ich die SQL-Tab füttern
    gesendete Daten weiterverarbeiten

    4 Mal editiert, zuletzt von hpuettma (29. Oktober 2017 um 21:22)

  • PHP
    foreach ($_POST['m1'] as $key => $value)
     echo $_POST['m1'][$key] . '<br>' .
          $_POST['m2'][$key] . '<br>' .
          $_POST['m3'][$key] . '<br>' .
          $_POST['m4'][$key] . '<br>' .
          $_POST['m5'][$key] . '<br>' .
          $_POST['m6'][$key] . '<br>' .
          $_POST['m7'][$key] . '<br><br>';

    Einmal editiert, zuletzt von Bandit (29. Oktober 2017 um 21:26)

  • Bandit, du bist genial.
    Genau das brauche ich, auf einen so schrägen Befehl wäre ich nie gekommen.
    Danke vielmals. Den Rest kriege ich hoffentlich alleine hin. :lol:


    ... jetzt tut sich ein völlig neues Problem auf, das ich gar nicht auf dem Zettel hatte.

    Bitte schaut Euch mal das angehängte Bild an, dann zu meinem Problem.

    Die Spalte-1 (ID) und Spalte-2 (KZ) brauche ich eigentlich nicht in der Anzeige. Die ID ist der Schlüsselbegriff für die weitere Verarbeiteung (Schreiben in eine neue SQL-Tab), Die Spalte-2 dient nur zur Selektion der gewünschten Stammdaten (1 bedeutet aktiver Datensatz) - Die Spalten könnten also für meine Zeiteingaben eigentlich entfernt werden. Das wäre mein Problem-1.

    Die Spalten Nachname und Vorname dürfen mit dem Cursor nicht angesteuert werden und dienen nur dem Anwender als Eingabehilfe (reine Anzeige). Der Cursor soll also nur von Zeile zu Zeile von Zeit-von, Zeit-bis, Pause-Min gesteuert werden. Am besten mit der TAB-Taste oder den Pfeiltasten.

    Ich habe in den letzten zwei Tagen viel gegoogled, aber nur komplizierte Lösungen gefunden, die ich kaum nachvollziehen kann. Gibt es hier nicht auch eine einfache Lösung? Meine Idee wäre, zwei Spalten ausblenden, 2 Spalten nur reine Anzeige, der Rest ist Eingabe. Die Cursorsteuerung sollte dann eigentlich automatisch erfolgen...

    Ich befürchte, dass das ein naiver Wunsch von mir bleiben wird...

    (vielleicht sollte ich dieses Problem als komplett neuen Blog-Eintrag aufgeben?)

    3 Mal editiert, zuletzt von hpuettma (31. Oktober 2017 um 14:02)