Ankündigung

Einklappen
Keine Ankündigung bisher.

temporäre Formularinhalte wie den POST abarbeiten für mysql-insert

Einklappen

Neue Werbung 2019

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

  • temporäre Formularinhalte wie den POST abarbeiten für mysql-insert

    Hallo,

    ich generiere mir über xml ein Formular was je nachdem bestimmte Felder besitzt.

    Wenn ich die POST-Methode dann abarbeiten möchte damit ich die werte der Formularfelder in eine mysql-db schreiben kann müsste ich ja unzählig viele Abfragen machen da ich ja nur die Werte in die DB eintragen kann die auch gesendet wurden, sonst bekomme ich ja Fehlermeldungen.

    Weiß jemand wie man das am geschicktesten abfragt ?

    Schleife ? aber wie
    stehe da gerade voll auf dem schlauch

    Grüße Jürgen

  • #2
    Über eine Map. Du musst erstmal festlegen, was alles erlaubt ist, dann kannst du die übertragenen Daten erst überprüfen.
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      Zitat von lstegelitz Beitrag anzeigen
      Über eine Map. Du musst erstmal festlegen, was alles erlaubt ist, dann kannst du die übertragenen Daten erst überprüfen.
      Hallo,

      wie meinst Du das mit einer Map?
      sorry arbeite mich noch in PHP ein

      Das was erlaubt bzw. gesendet wird wurde schon zuvor überprüft
      aber in der Tabelle sind ca. 20 Felder wovon nur eben bestimmte eingetragen werden die eben gesendet werden
      ich wollte das nicht ständig mit isset($_POST['blabla'] abfragen

      Grüße Jürgen

      Kommentar


      • #4
        TL;DR
        “Ich fange gerade mit einem für mich neuen Thema an und habe bislang wenig Ahnung davon. Daher war es für mich naheliegend mir das mal von Leuten erklären zu lassen, die sich mit diesem Thema viel besser auskennen als ich. So kann ich viel Zeit sparen, weil ich nicht erst herausfinden muss, wonach ich im Internet suchen müsste, um eine für mich verständliche Anleitung zu finden. Außerdem habe ich es natürlich eilig und brauche die Antwort am besten sofort. Ist diese Herangehensweise ok?” Nein.

        Dieses Thema wurde bereits erschöpfend gelöst und deine Frage ist viel(!) zu unspezifisch.

        Wir sind Entwickler und bieten Antworten auf Fachfragen, die nicht schon zig-mal im Internet beantwortet wurden. Niemand macht sich gerne Mühe, die sich schon viele Entwickler vorher gemacht haben. Auch ist es eine wichtige Kompetenz für einen Entwickler, Lösungen selbstständig zu recherchieren und bereits vorhandene Lösungen zu evaluieren.

        Jeder hat irgendwann bei Null angefangen. Das wissen wir auch. Viele von uns haben in einer Zeit mit der Softwareentwicklung begonnen, als es noch kein Internet gab und/oder die Hemmschwelle für die Erstellung einer banalen Frage in einem Fachforum oder einer Mailingliste noch sehr hoch lag, weswegen man sich beidseitig quantitativ und qualitativ angenehm mit dem Fragesteller beschäftigen konnte. Daher lautet die beste Empfehlung, sich zunächst mit Standardwerken (+) zum Thema Softwareentwicklung zu beschäftigen und ein starkes Maß an Eigeninitiative einzubringen. Schließlich wird man als Entwickler keinen nennenswerten Erfolg haben, wenn die Lösung aller Probleme ständig von anderen vorgelegt wird.

        Kommentar


        • #5
          ohweia,
          ich bewundere Dich das Du dir für diesen Text so viel Mühe gegeben hast und ihn nun an user wie mich versenden kannst
          aber glaube mir ich habe schon gesucht und weiss auch was arrays sind aber ich suche hier für meine Frage eine cleveren Trick ohne zig isset-abfargen machen zu müssen und den mysql-string zu verketten

          was soll da also an meiner Frage nicht ok sein?

          ausserdem wenn meine Frage schon wirklich zigfach beantwortet wurde (ich fand eine Antwort trotz Suche leider nicht ) dann könntest Du mir doch wenn Du schon weisst wo es beantwortet steht den Link senden oder ?

          ich glaube das wäre sinnvoller als solche Texte den anderen an den Kopf zu schmeissen

          Kommentar


          • #6
            "php query builder"
            Du kannst sonst die fehlenden Werte durch Defaults ersetzen. Dafür macht array_merge sinn:
            PHP-Code:
            $_POST array_merge($defaults$_POST); 

            Kommentar


            • #7
              Hallo,

              danke für den Tipp, aber mit array_merge hänge ich doch nur arrays zusammen

              ich will es mal anhand meiner Daten die gesendet werden versuchen zu beschreiben, evtl. habe ich mich falsch ausgedrückt.

              hier mein Array was die Felder in der mysql_tabelle beinhaltet (sind ja immer gleich)

              PHP-Code:
              $Hardware_Settings_Array = array("Hardware_Info_Id","Hardware_Type_Id""Container_Id","Temp_Min""Temp_Max","Temp_Ideal","Room_Id""Hour_Start""Hour_End""High""Low"  ); 
              und hier das was ich je nach Formular gesendet bekomme (das sind die Werte für die Felder in der mysql-tabelle

              Beispiel 1:
              PHP-Code:
              Array
              (
                  [
              Container_Id] => 17
                  
              [Temp_Min] => 20
                  
              [Temp_Max] => 22
                  
              [Temp_Ideal] => 3
                  
              [Room_Id] => 2
                  
              [Hardware_Info_Id] => 4
                  
              [Hardware_Type_Id] => 6
                  
              [Create_Hardwaresettings] => Create Hardwaresettings // das ist der Formular-button

              oder sie sehen so aus
              Beispiel 2:
              PHP-Code:
              Array
              (
                  [
              Container_Id] => 17
                  
              [High] => 1
                  
              [Hour_Start] => 22
                  
              [Hour_End] => 3
                  
              [Room_Id] => 2
                  
              [Hardware_Info_Id] => 4
                  
              [Hardware_Type_Id] => 6
                  
              [Create_Hardwaresettings] => Create Hardwaresettings // das ist der Formular-button

              jetzt muss ich daraus einen mysql string generieren
              für Beispiel 1:

              "Insert into hardware_settings (Container_Id, Temp_Min, Temp_Max, Temp_Ideal, Room_Id, Hardware_Info_Id, Hardware_Type_Id) Values
              ('$_POST[Container_Id]','$_POST[Temp_Min]','$_POST[Temp_Max]','$_POST[Temp_Ideal]','$_POST[Room_Id]','$_POST[Hardware_Info_Id]','$_POST[Hardware_Type_Id]');


              Da sich also die gesendeten Daten aus dem Formular ständig ändern muss ich auch den mysql-String ständig anpassen.

              Auf der einen Seite brauch ich was zum vergleichen was ich evtl. mit zwei ineinandere geschachtelte Schleifen machen könnte und dann noch was um den String zu verketten
              wobei ich dann beim String aufpassen muss das am Anfang und Ende kein Komma gesetzt wird (bei den Values)

              Viele Grüße Jürgen

              Kommentar


              • #8
                PHP-Code:
                $Hardware_Settings_Array = array("Hardware_Info_Id","Hardware_Type_Id""Container_Id","Temp_Min""Temp_Max","Temp_Ideal","Room_Id""Hour_Start""Hour_End""High""Low"  ); 
                Das ist deine Map... hier stehen die Felder drin, die erlaubt sind bzw. erwartet werden.

                Mittels einer Schleife kannst du drüber rutschen und gezielt auf diese POST Felder abfragen.
                Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                Kommentar


                • #9
                  PHP-Code:
                  $_POST['Container_Id'] = 123;
                  $_POST['Temp_Min'] = 23;
                  $_POST['Temp_Max'] = 42;

                  $defaults = [
                      
                  'Container_Id' => null,
                      
                  'Temp_Min' => null,
                      
                  'Temp_Max' => null,
                      
                  'Temp_Ideal' => null,
                      
                  'Room_Id' => null,
                      
                  'Hardware_Info_Id' => null,
                      
                  'Hardware_Type_Id' => null
                  ];

                  $_POST array_merge($defaults$_POST);

                  $insert->into('hardware_settings')
                  ->
                  add('Container_Id'$_POST['Container_Id'])
                  ->
                  add('Temp_Min'$_POST['Temp_Min'])
                  ->
                  add('Temp_Max'$_POST['Temp_Max'])
                  ->
                  add('Temp_Ideal'$_POST['Temp_Ideal'])
                  ->
                  add('Room_Id'$_POST['Room_Id'])
                  ->
                  add('Hardware_Info_Id'$_POST['Hardware_Info_Id'])
                  ->
                  add('Hardware_Type_Id'$_POST['Hardware_Type_Id'])
                  ->
                  run(); 
                  PHP-Code:
                  INSERT INTO
                      hardware_settings
                  SET
                      
                  `Container_Id`='123',
                      `
                  Temp_Min`='23',
                      `
                  Temp_Max`='42',
                      `
                  Temp_Ideal`=NULL,
                      `
                  Room_Id`=NULL,
                      `
                  Hardware_Info_Id`=NULL,
                      `
                  Hardware_Type_Id`=NULL

                  Kommentar


                  • #10
                    Hallo,
                    ja wie ich Werte vergleiche in einer Schleife weiss ich bzw. hab ich auch schon unzählig viele Beispiele gesehen

                    ich muss jedoch Werte aus array1 mit den Indexnamen aus array2 vergleichen

                    Beispiel:



                    Das array1 sieht ja z.B. so aus

                    [0] ===> Hardware_Info_Id ;
                    [1] ===> Hardware_Type_Id;
                    [2] ===> Temp_Min;
                    usw.
                    insgsamt ca 30 Einträge die eigentlich die Namen der Tabellenfelder in der DB sind.

                    Beim array2 was ich durch das Formular bekomme sind die Indexnamen = einer der Namen die im array1 als werte vorkommen.

                    Ich kann also nicht Werte mit Werte vergleichen (dafür fand ich unzählig viele beispiele im Netz)
                    ich muss hier jedoch Werte aus array1 mit den Indexnamen aus array2 vergeleichen und wenn dieser dann gleich ist ist normal auch ein Wert drin wobei ich dies ja dann noch abfragen kann.


                    Grüße Jürgen

                    Kommentar


                    • #11
                      Oder als Abwandlung zu Beitrag #9:

                      PHP-Code:
                      $insert->into('hardware_settings');
                      foreach(
                      array_keys($defaults) as $key) {
                          
                      $insert->add($key$_POST[$key]);

                      Kommentar


                      • #12
                        Zitat von rkr Beitrag anzeigen
                        PHP-Code:
                        $_POST['Container_Id'] = 123;
                        $_POST['Temp_Min'] = 23;
                        $_POST['Temp_Max'] = 42;

                        $defaults = [
                            
                        'Container_Id' => null,
                            
                        'Temp_Min' => null,
                            
                        'Temp_Max' => null,
                            
                        'Temp_Ideal' => null,
                            
                        'Room_Id' => null,
                            
                        'Hardware_Info_Id' => null,
                            
                        'Hardware_Type_Id' => null
                        ]; 
                        Hallo,

                        aha, ich glaub ich hab jetzt meinen Fehler gesehen.
                        ich habe mein default-array falsch gefüttert ich hätte die indexnamen so verwenden müssen wie im gesendeten array, anstatt dies nummerieren zu lassen. So ist es halt im Standard auf NULL gesetzt.

                        Ok das habe ich begriffen.

                        Aber:
                        Ich weiss wenn ich wenn ich das Folgende so verwende
                        PHP-Code:
                        $insert->into('hardware_settings'
                        ->
                        add('Container_Id'$_POST['Container_Id']) 
                        ->
                        add('Temp_Min'$_POST['Temp_Min']) 
                        ->
                        add('Temp_Max'$_POST['Temp_Max']) 
                        ->
                        add('Temp_Ideal'$_POST['Temp_Ideal']) 
                        ->
                        add('Room_Id'$_POST['Room_Id']) 
                        ->
                        add('Hardware_Info_Id'$_POST['Hardware_Info_Id']) 
                        ->
                        add('Hardware_Type_Id'$_POST['Hardware_Type_Id']) 
                        ->
                        run(); 
                        ob ich dann nicht Felermeldungen bekomme da ja nicht gewährleistet ist das ich z.B. auch $_POST['Temp_Ideal'] gesendet bekomme.
                        Und ich glaube wenn ich auf einen Indexname eines arrays zugreife der gar nicht existiert dann kracht es oder?

                        Deswegen meine Frage nach dem Vergleich.

                        Aber wenn ich das default-array nun umschreibe so wie empfohlen bzw. in Deinem beispiel, dann glaube ich haut es auch sauber mit dem Vergleichen in der Schleife hin

                        Grüße Jürgen

                        Und Danke!

                        Kommentar


                        • #13
                          Zitat von selfmade01 Beitrag anzeigen
                          ob ich dann nicht Felermeldungen bekomme da ja nicht gewährleistet ist das ich z.B. auch $_POST['Temp_Ideal'] gesendet bekomme.
                          Und ich glaube wenn ich auf einen Indexname eines arrays zugreife der gar nicht existiert dann kracht es oder?
                          Deswegen ja das [man]array_merge[/man]

                          Kommentar


                          • #14
                            Hallo,

                            das mit dem merge habe ich nun auch kapiert und es funktioniert auch.

                            sorry muss nochmal ganz dumm fragen

                            ich benutze hier
                            mysqli und meine querys habe ich mir selbst immer zusammengeschustert
                            mit

                            $mysqli->query($sql);

                            Die Vorgehensweise mit dem
                            $insert->into('hardware_settings')
                            ->add('Container_Id', $_POST['Container_Id'])
                            .
                            .
                            ->run();

                            oder
                            $insert->into('hardware_settings');
                            foreach(array_keys($defaults) as $key) {
                            $insert->add($key, $_POST[$key]);
                            }
                            zeigen mir das es wohl viel simpler geht, aber dazu fehlt mir die Function oder?

                            habt ihr dazu einen Link wo ich mir das rauslesen kann.
                            Diese Vorgehensweise scheint mir viel eleganter und cleverer zu sein

                            Grüße Jürgen

                            Kommentar


                            • #15
                              Sowas kann php aus dem Stand nicht. Es gibt viele frei verfügbare query-builder. Beispielsweise von Doctrine, RedBean oder NotORM. Da stellt sich natuerlich schnell die Frage, ob bei deinem Fall sowas wie Doctrine oder RedBean nicht eleganter waere. Das von mir gezeigte beispiel ist mit meinem (noch experimentellen) QueryBuilder gemacht worden. Es gibt einen ähnlichen von Aura.
                              Die bekommst du dann relativ schmerzfrei mit Composer.

                              Kommentar

                              Lädt...
                              X