Ankündigung

Einklappen
Keine Ankündigung bisher.

Variable auf einmal leer

Einklappen

Neue Werbung 2019

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

  • Variable auf einmal leer

    Hallo,
    liebe Forenmitglieder!

    Ich habe folgendes Problem, ich habe eigentlich auf einer Seite nur ein kleines Formular, und will dieses mit php überprüfen.
    Dazu habe ich mir folgenden Code geschrieben:
    PHP-Code:
    <?php
    $error 
    = array(); // false = Wert ist vorhanden
    $formdata = array();
    if(
    $_SERVER['REQUEST_METHOD']=='POST') {
        
        function 
    checkForm($fields$required) {
            foreach(
    $fields as $value) {
                if(isset(
    $_POST[$value]) && $_POST[$value]!="") {
                    
    $error[$value] = false;
                    
    $temp $_POST[$value];
                    
    $temp clean($temp);
                    
    $formdata[$value] = $temp;
                }
                elseif(!(
    in_array($value$required))) {
                    
    $error[$value] = false;
                }
                else {
                    
    $error[$value] = true;
                }
            }
        
            if(!(
    in_array(true$error))) {
                
    //Mail#
                //redirect
            
    }
            
            
            
    //DEBUG
            
    echo "DEBUG in Funktion </br>";
            
    var_dump($error);
            echo 
    "</br>";
        }
        
        function 
    clean($wert) {
            
    $cleaned htmlentities($wert);
            
    //Mehr Überprüfung notwendig?!
        
    }
        
        
    checkForm($felder=["vorname""nachname""email""telefon""nachricht"],$benoetigt=["vorname""nachname""email"]);
        
    //DEBUG
        
    echo "DEBUG nach Aufruf </br>";
        
    var_dump($error);
    }
    ?>
    Das Problem ist, dass die Variable
    PHP-Code:
    $error 
    nach dem
    PHP-Code:
    checkForm() 
    durchgelaufen ist, leer ist. Die beiden "Debuging" Stellen geben folgendes wieder:
    PHP-Code:
    DEBUG in Funktion
    array(5) { ["vorname"]=> bool(true) ["nachname"]=> bool(false) ["email"]=> bool(false) ["telefon"]=> bool(false) ["nachricht"]=> bool(false) }
    DEBUG nach Aufruf
    array(0) { } 
    Es geht mir jetzt erst mal nur um den Fehler, das noch z.B. eine genauere Überprüfung fehlt ist jetzt gerade egal.
    Außer jemand sagt, mein Ansatz ist komplett schwachsinnig, aber ich wollte halt nicht jedes Feld mit if-else abfragen, deshalb die übergebenen Werte.
    Ich wette ist ist irgendein total dämlicher Denkfehler, aber ich komme einfach gerade nicht frauf. Ich hoffe ihr könnt mir helfen.
    MfG,
    Robin


  • #2
    Les dich mal zum Thema gültigkeitsbereich von Variablen ein
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Super, vielen Dank, habe mit php bisher noch nicht viel mit Funktionen zu tun gehabt.

      Kommentar


      • #4
        Eine Frage hätte ich jetzt noch, ist das hier eine saubere Lösung, also wenn ich die Variablen als Array zurückgebe und daraus jeweils die globalen Variablen setze.
        PHP-Code:
        <?php
        $error 
        = array(); // false = Wert ist vorhanden
        $formdata = array();
        if(
        $_SERVER['REQUEST_METHOD']=='POST') {
            
            function 
        checkForm($fields$required) {
                
        //...wie eben
                
        return $werte = array($error$formdata);
            
            }
            
            
            
        $tempdata checkForm($felder=["vorname""nachname""email""telefon""nachricht"],$benoetigt=["vorname""nachname""email"]);
            
        $error $tempdata[0];
            
        $formdata $tempdata[1];
            
        }
        ?>

        Kommentar


        • #5
          bist du dir sicher, dass du funktionen in abhängigkeiten deffinieren willst,
          also dass es die function check_form() nur gibt, wenn du ein POST request hast?

          Kommentar


          • #6
            Zitat von moma Beitrag anzeigen
            bist du dir sicher, dass du funktionen in abhängigkeiten deffinieren willst,
            also dass es die function check_form() nur gibt, wenn du ein POST request hast?
            Ja, also es ist ja ein ganz einfaches HTML-Kontakt-Formular, so, wenn es keinen Post-request gibt, wurde das Formular nicht abgeschickt und somit muss auch nicht geguckt werden, ob alle Felder ausgefüllt sind, oder ob die Daten nicht HTML/Java-Script enthalten.

            Wenn ein Get-Request kommen sollte, hieße das ja, dass irgendwer probiert, Daten unterschieben wollte, wenn dann gar nichts passiert, ist das ja auch ok.

            Oder habe ich da einen Denkfehler?

            Kommentar


            • #7
              unterscheide bitte function deffinition und functions aufruf.
              also:
              PHP-Code:
               <?php
              $error 
              = array(); // false = Wert ist vorhanden
              $formdata = array();

              // hier wird die function nur deffiniert

              function checkForm($fields$required) {
                     
              //...wie eben
                  
              return $werte = array($error$formdata);
                  
              }

              if(
              $_SERVER['REQUEST_METHOD']=='POST') {
               
              // hier wird sie aufgerufen   
                  
              $tempdata checkForm($felder=["vorname""nachname""email""telefon""nachricht"],$benoetigt=["vorname""nachname""email"]);
                  
              $error $tempdata[0];
                  
              $formdata $tempdata[1];
               
              }
              ?>
              würde das selbe machen.

              zum thema form , http://php-de.github.io/#form

              eine rückgabe doie fehler und daten enthält halte ich übrigens nicht für so klug.

              Kommentar


              • #8
                Also, dass man die vorher definieren kann, ist mir klar, aber gibt es in dem konkreten Beispiel irgendwas was dagegen spräche die Funktion erst bei einem Post-request zu definieren?
                Ist eine ernstgemeinte Frage, ich kenne mich bei php nicht so gut aus, und lerne gerne dazu.

                Und zu dem error in der Funktion zurückgeben, ist das einfach unsauber, oder birgt das ein Sicherheitsrisiko?
                Und wie gestaltet man das effizienter, oder soll ich meinen Aufbau gleich ganz vergessen?
                Wenn das zu viel Umfang für ne Forumsantwort hat, ist auch ok.
                Aber vielen Dank für die Antwort und den Link, werde ich mir auf jeden Fall durchlesen!
                Mit freundlichen Grüßen,
                Robin

                Kommentar


                • #9
                  die wartbarkeit und wiederverwendbarkeit des codes steigt dadurch eindeutig nicht.
                  wenn du beispielsweise der validirungen übergebenen variablen einbauen willst, wird es echt stressig, irgendwann.


                  wenn es fehler gibt, die eine weitere auswerung der daten verhindern, genügt es diese zurückzugeben. formdata value brauchst du nicht, da du auf POST zurückgreifen kannst.

                  Kommentar


                  • #10
                    Zitat von a47ae Beitrag anzeigen
                    PHP-Code:
                        checkForm($felder=["vorname""nachname""email""telefon""nachricht"],$benoetigt=["vorname""nachname""email"]); 
                    So ein Aufruf ist nicht unbedingt ideal.
                    1. Benötigst du die Zuweisung zu den Variablen $felder und $benoetigt nicht. Innerhalb der Funktion werden die Werte ohnehin den Paramtern $fields und $required zugewiesen, und außerhalb der Funktion greifst du darauf nie zu.
                    2. Eine Zeile, eine Sache. Wenn du die Variablen tatsächlich benötigst, wäre die saubere Variante so:
                    PHP-Code:
                    $felder=["vorname""nachname""email""telefon""nachricht"];
                    $benoetigt=["vorname""nachname""email"];
                    checkForm($felder,$benoetig); 
                    Funktionen abhängig definieren? Hab ich glaube ich noch nie gemacht. Warum? Weil du Programmlogik rund um die Funktion bastelst, die da nicht hingehört. Was wenn du die gleiche Funktion anderswo verwenden willst, wo ein GET-Formular ist? Funktionsdefinitionen kosten 0 Performance, diesbezüglich brauchst du dir also auch keine Sorgen machen.

                    Kommentar


                    • #11
                      Okay, das mit der Wiederverwendung usw. Ist ein guter Punkt.
                      Ich hatte mir tatsächlich Sorgen um die Performance gemacht, weil ich dachte, ich könnte so verhindern, dass die Funktionen geparst werden, obwohl ich sie noch nicht brauche, aber anscheinend wird ja eh alles PHP immer geparst?!

                      Zu $formdata, meiner Meinung brauche ich die schon, später soll aus $formdata ja eine Email generiert werden, wenn ich nur $_Post verwende, wird ja der rohe Input verarbeitet und jeder kann z.B. JavaScript einschleusen, oder habe ich dich falsch verstanden?

                      Kommentar


                      • #12
                        entweder es hat geklappt, oder es gibt fehler.
                        beides geht mE. nicht.
                        und zu dem felder <-> nötig problem:
                        PHP-Code:
                        $inputList = array(
                           
                        'name'  => 'required'
                           
                        'vorname' =>'optional',
                           
                        'email'  => 'fail'
                        ); 
                        so könnte man es auch machen.
                        notwendige felder, optionale felder, felder welche nicht eingetragen sein dürfen.

                        Kommentar


                        • #13
                          Hinweis:

                          Der schließende Tag eines PHP-Blocks am Ende einer Datei ist optional. In einigen Fällen ist das Weglassen hilfreich:
                          - Es können ungewollte Whitespaces am Ende einer Datei auftreten, durch die ein späteres setzen von headern be-/verhindert werden kann.
                          - Außerdem verhindert dies, dass beim Output Buffering Whitespaces am Ende eines durch die eingebundenen Dateien erzeugten Parts.
                          - Im Zend Framework ist laut Coding Guideline das ?> sogar ausdrücklich verboten, wenn in einer Datei ausschliesslich PHP verwendet wird.
                          Standards - Best Practices - AwesomePHP - Guideline für WebApps

                          Kommentar


                          • #14
                            Im Zend Framework ist laut Coding Guideline das ?> sogar ausdrücklich verboten, wenn in einer Datei ausschliesslich PHP verwendet wird.
                            Nicht nur im Zend Framework, das ist im PSR-2 so geregelt (https://github.com/php-fig/fig-stand...style-guide.md) und folglich auch in Symfony und vielen anderen Projekten so.

                            LG
                            https://github.com/Ma27
                            Javascript Logic is funny:
                            [] + [] => "", [] + {} => object, {} + [] => 0, {} + {} => NaN

                            Kommentar


                            • #15
                              Stimmt, danke.
                              Standards - Best Practices - AwesomePHP - Guideline für WebApps

                              Kommentar

                              Lädt...
                              X