zwei Fragen Formular und GET/POST

  • Hallo,


    ich hoffe jemand könnte mir helfen ich erstelle gerade ein Formular welches Informationen in eine Datenbank schreibt die ich dann weiter verarbeiten kann.


    Das Formular funktioniert und alles wird beim Absenden in die Datenbank geschrieben.

    Das Problem ist sobald man die Seite aufruft wird ein leerer Datensatz in die Datenbank geschrieben das bei jedem Aufruf der Site.

    Weiß jemand wie ich das verhinder kann und nur beim Submit Daten dann auch in die Datenbank geschickt werden?

    Ich hab als Problemlösung schon versucht ein required einzubauen welches auch Funktioniert und man nur etwas abschicken kann wenn die Felder ausgefühlt sind trotzdem werden beim aufruf der Site immer ein leerer Datensatz in die Datenbank geschrieben.


    Mein zweites Problem ist sobald ich mit POST arbeite stürzt mir die Site ab und kann nicht angezeigt werden.

    Wenn ich alles auf GET stelle Funktioniert die Site das Formular alles.

    Ich bin noch Anfänger und bin mir nicht sicher welche Infos noch helfen würden.

  • Das Problem ist sobald man die Seite aufruft wird ein leerer Datensatz in die Datenbank geschrieben das bei jedem Aufruf der Site.

    Dir fehlt ein Formularprüfung. Wenn du die Werte, die in die Datenbank geschrieben werden sollen validierst, kann das nicht passieren, denn leere Werte sollten zumindest für bestimmte Werte als fehlerhaft validiert werden.

    In dem Fall einfach keine Daten an die Datenbank senden.


    Vermutlich prüfst Du GET und POST auch nicht beim Aufruf der Seite, weshalb es überhaupt zu den leeren Werten beim initialen Aufruf der Seite kommt.


    EDIT:

    Ja, wie vermutet, keine Validierung von GET oder POST, geschweige denn der Werte => SQL Injection Gefahr!

  • Das mit dem Injection hab ich schon gelesen.


    Nur so weit bin ich mit dem Wissen überhaupt noch nicht.


    Ich habe das schon versucht in dem ich das alles auf issets umbaue und mit Values (?) arbeite aber da bekomme ich nur fehler.


    Ich habe mir als Vorlage einfach unsere Stundenlisten von der Frima das Formular genommen und versuche mir das im Eigenstudium selbst nachzubauen.

    Und mir das alles selbst beizubringen.


    Nun sehe ich eben das ich ein Problem habe und versuche das zu lösen und dann mich weiter zu Arbeiten und zu Verstehen warum was nicht geht und wie es geht.


    Das mit dem Validieren ist schon ein sehr guter Hinweiß für mich und nun werde ich mal suchen wie ich das am besten mache.


    Danke für die Zeit und Hilfe.

  • Ich habe das schon versucht in dem ich das alles auf issets umbaue und mit Values (?) arbeite aber da bekomme ich nur fehler.

    Dann gilt es, die Fehler zu beheben. Du gibst eine richtigen Weg auf, weil Du Fehler bekommst... Klingt nicht clever.


    Ich habe mir als Vorlage einfach unsere Stundenlisten von der Frima das Formular genommen und versuche mir das im Eigenstudium selbst nachzubauen.

    Und mir das alles selbst beizubringen.

    Das ist doch gut, sagt ja keiner was gegen. Deshalb bekommst Du hier ja auch Tipps, wie Du selbstständig weiter kommst ;)


    Glaub mir, Leute mit Deiner Einstellung sind mir 1000mal lieber, wie die, die Seiten lang immer nur antworten: "klappt bei mir immer noch nicht", bis jemand das für sie gelöst hat, aber sie selber weder etwas verstanden noch sich selbst ausreichend weitergebildet haben!

  • Wie ich schon vermutet hatte, handelt es sich um ein sogenanntes Affenformular, d. h. das PHP für die Verarbeitung befindet sich auf der selben Seite wie das Formular selber. In dem Fall wird das PHP auch beim ersten Aufruf der Seite ausgeführt, wenn der Benutzer noch gar nichts eingegeben und auch nicht Submit betätigt hat.

    Gängige Lösung: Gib dem Submit-Button einen Namen, z. B. name="submit" , dann kannst Du diesen im PHP prüfen und die Prüfung und Verarbeitung nur ausführen, wenn der entspr. POST-/GET-Parameter gesetzt ist:

    Code
    1. if (isset($_GET['submit'])) {
    2. // das Formular wurde abgeschickt
    3. // pruefen und verarbeiten
    4. }
  • Super danke für die Hilfestellungen.


    Ich werde mir das gleich mal genauer mit dem Submit-Button anssehen.


    vorher hatte ich es so versucht:



    hab aber mit dem Post bzw. mit den

    Code
    1. siiiiiiiss

    nur Probleme weil ich den Typ von TIME nicht bestimmen konnte und das POST sofort die Seite lahmlegt.

  • Das Ding ist das PHP, HTML CSS usw. einfach unglaubliche Zeitfresser sind wenn man es sich beibringt. Ein Tag ist nichts und die Bücher stapeln sich am Tisch und am Ende des Tages hat man es geschafft einen Button so zu machen das man damit zu frieden ist aber er immer noch nicht Funktioniert :).


    Aber es macht Spass :)

  • So hab mich nun einwenig mit:


    Code
    1. if (isset($_GET['submit'])) {
    2. // das Formular wurde abgeschickt
    3. // pruefen und verarbeiten
    4. }

    beschäftigt.


    Ich hätte das in meinem DB.php eingefügt.

    Und wollte es noch um eine Formularvalidierung erweitert. ($ok = false; if (isset($_GET["submit"])) { $Ok = true; .... usw.)

    Nur bleibt meine Formularseite nun komplett leer und mein Formular wird überhaupt nicht mehr angezeigt.

    Auch wenn ich nur den Code von oben benutze (

    Code
    1. if (isset($_GET['submit'])) {

    ). Ohne zusätzliche Validierung.


    Ich denke er geht bis zu dem isset und hängt sich dann dort auf und zeigt das Formular gar nicht mehr an.

    ich hätte auch versucht mit echo zu arbeiten damit ich einen Rückmeldung bekomme bzw. mit else wenn es nicht abgeschickt ist und dort auch ein echo wenn doch.

    Aber das Formular bleibt tot.


    Sollte ich in das isset nach den " { " das Formular einbinden. oder es nach einem else komplett einbinden?

    Oder bin ich jetzt ganz am falschen Fuß.


    Oder fehlt mir einfach noch komplett was anderes.

  • Ja hab submit einen Namen gegeben.


    Hab das jetzt so umgebaut:


    Das Formular geht jetzt wieder und es setzt keinen Eintrag mehr wenn auf die Site gegangen wird oder wenn Sie aktualisiert wird.


    Außer natürlich es wird der Mitarbeiter eingetragen und Versendet.


    Wenn danach wieder die Site aktualisiert wird schreibt er es einfach in die Datenbank egal ob man den Button drückt oder nicht.

    Ich denke da liegt aber der Fehler bei mir weil ich mit GET arbeite und nicht mit POST und nach dem ersten Absenden ja die URL sich ändert und ich dann in der Schleife hänge und er immer wieder einen Eintrag macht.


    Ich denke wenn ich es schaffe alles auf POST umzustellen sollte das auch weg sein.

  • Öhm... Reloadsperre schön und gut, aber man sollte schon Datenbank seitig abfangen, dass doppelte Werte nicht zulässig sind.

    Ein Mitarbeiter sollte z.B. keine zwei Einträge für dasselbe Datum und dieselbe Uhrzeit eintragen können.


    Bei den Reloadsperre-Varianten aus dem Link sind tlw. einige Dinge nicht bedacht.

    Ich würde eine Session verwenden und eine angepasste Token-Variante. Alternativ wäre die Weiterleitung-Variante noch im Spiel, hier aber auch mit Session erweitert.

  • So dank eurer sehr guten Tipps hab ich nun mein Formular einmal soweit fertig das es funktioniert.


    Nun können quasi Mitarbeiter Ihren Namen und Daten eingeben und es wird an die Msql Datenbank verschickt und eingetragen.

    Soweit so gut.

    Jetzt möchte ich einen schritt weitergehen denn derzeit wird alles in eine Tabelle in der Datenbank geschrieben sprich verschiedenste Mitarbeiter mit Ihren Daten.

    Dies ist zum auslesen und bearbeiten ziemlich unübersichtlich.


    Mein Ansatz ist nun das ich für jeden Mitarbeiter eine eigene Tabelle habe und es dadurch einfacher ist diese weiter zu verarbeiten.


    Mein Denk Ansatz ist nun für jeden Mitarbeiter eine eigene Tabelle im Msql anzulegen.

    Dann ein Dropdown auswahlmenü zu erstellen welches die Namen anzeigt von den Tabellen im Msql.


    Dann im PHP das INSERT INTO so umstellen das der Wert genommen wird (Dropdown Name Mitarbeiter) welcher ausgewählt wurde und dort dann beim Absenden des Formulars dieses nun in die Tabelle schreibt welches zuvor im Dropdown ausgewählt wurde.


    Daraus würde jeder Mitarbeiter einfacher zu bearbeiten sein als wenn alle Mitarbeiter mit Ihren Werten in einer Tabelle stehen.


    Meine Frage ist nun ist mein Denkansatz überhaupt richtig und macht man das so?

  • Zitat

    Meine Frage ist nun ist mein Denkansatz überhaupt richtig und macht man das so?

    Definitiv nein. Stell dir nur mal vor, Du willst alle Mitarbeiter auslesen, die älter als 50 sind. Oder in xyz wohnen. Sind alle Mitarbeiter in einer Tabelle ist das SQL ein Einzeiler. Aber wenn es für jeden Mitarbeiter eine getrennte Tabelle gibt?

  • Hmmm... OK.


    Das Problem was ich habe mit nur einer Tabelle für alle Mitarbeiter ist das sie den Namen eingeben über den ich gerne dann gerne auswerten würde.

    Soweit so gut aber nach dem alle nicht immer gleich den Namen eingeben (beispiel: Max MaxK MaxL) und ich nun Max auslesen möchte kommen schon hier 3 Max in frage. Darum wollte ich sie über ein Dropdown dazu bringen immer den selben Namen auszuwählen und diesen dann nur für Ihren Namen in die Tabelle zu schreiben.

    Aber wie soll ich nun in einer Tabelle den Namen schon hinterlegen wenn ich die Zeiten die sie schreiben noch nicht weiß?