Ankündigung

Einklappen
Keine Ankündigung bisher.

Name einer Variable als string...

Einklappen

Neue Werbung 2019

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

  • Name einer Variable als string...

    Hallo,
    ich möchte mit einer Funktion den namen einer Variable als string ausgeben können.

    Funktion:
    PHP-Code:
    <?php

    function varname(&$var) {
        return ...;
    }

    echo 
    varname($_POST["email"]);

    ?>
    Erwünschte ausgabe wäre $_POST["email"] als string. Ist das irgendwie machbar?
    Tutorials zum Thema Technik:
    https://pilabor.com
    https://www.fynder.de

  • #2
    In der Form nicht.
    Es gibt variable Variablen (Im Handbuch nachschlagen). Bei Feldern müsstest Du dann Variablennamen und Elementnamen getrennt angeben.

    Kommentar


    • #3
      variable Variablen kenne ich. Wichtig wäre, dass ich eben per Referenz den Namen der Gewünschten Variable herausbekomme, also so, dass ich es in einer Funktion verwenden kann.
      Tutorials zum Thema Technik:
      https://pilabor.com
      https://www.fynder.de

      Kommentar


      • #4
        Ist so nicht möglich.
        Du kannst den >Namen der Variablen als String übergeben und darüber (sofern die Sichtbarkeitsregeln beachtet werden) auf die Variable zugreifen (eben variable Variablen). Aber nicht umgekehrt.

        Kommentar


        • #5
          Ok, vielleicht gibts nen anderen weg, das zu erreichen was ich machen möchte. Ich bin dabei eine Formularklasse zu basteln.
          Diese soll per übergebener Referenz, einem REGEX und einer Fehlermeldung testen, ob die Formularvariable dem REGEX entspricht und sonst die Fehlermeldung ausgeben und das Formularfeld rot einfärben. Und hier liegt das Problem. Ich zeigs mal mit Code, dann ist es leichter zu verstehen:

          PHP-Code:
          <?php
          $oForm 
          = new form();
          $oForm->check($_POST["text"], "/^[a-z]$/i""Der eingegebene Text enthält ungültige Zeichen");?>

          <form action="$_SERVER["PHP_SELF"]" method=post>
          <span<?=$oForm->isfalse($_POST["text"], 'style="color:red;"')?>>Text:</span> <input type=text name=text value="">
          <input type=submit value="absenden">
          </form>
          Die $oForm->check()-Methode soll nun folgendes tun:
          -Testen ob $_POST["text"] überhaupt gesetzt ist
          -Wenn gesetzt, dann den Regex auf das Feld anwenden
          -Wenn Regex nicht zutrifft, Fehlermeldung in einem array speichern und sich die Variable $_POST["text"] als fehlerhaft merken.

          Die $oForm->isfalse()-Methode soll tun:
          -Wenn die übergebene Variable als fehlerhaft vorgemerkt ist, gebe den übergebenen style aus, sonst mache nichts.

          Ich finde aber keine Möglichkeit, die Referenz auf die Variable $_POST["text"] eindeutig als fehlerhaft zu speichern, außer mit dem Namen der Variable, denn gibt es mehrere Formularfelder mit dem gleichen Inhalt, würde er diese dann alle als fehlerhaft markieren. Das will ich eben nicht. Fällt einem sonst ne Möglichkeit ein?
          Tutorials zum Thema Technik:
          https://pilabor.com
          https://www.fynder.de

          Kommentar


          • #6
            Testen ob $_POST["text"] überhaupt gesetzt ist
            An dieser Stelle hast Du eigentlich schon ein Problem. Wenn Du eine Variable übergibst, ist sie gesetzt - egal ob sie es vorher war oder nicht. Was soll sonst übergeben worden sein?
            -Wenn gesetzt, dann den Regex auf das Feld anwenden
            Das kannst Du tun, egal ob die Variable leer ist oder nicht (gesetzt ist sie ja auf jeden Fall).
            Wenn Regex nicht zutrifft, Fehlermeldung in einem array speichern und sich die Variable $_POST["text"] als fehlerhaft merken.
            Wozu brauchst Du dafür die Variable? Was willst Du auf "fehlerhaft" setzen? Für wen oder was? Und wie (also was soll der Effekt sein)?

            Kennst Du PEAR::Quickform? http://pear.php.net/ (im Moment connection timeout von hier aus)

            Kommentar


            • #7
              An dieser Stelle hast Du eigentlich schon ein Problem. Wenn Du eine Variable übergibst, ist sie gesetzt - egal ob sie es vorher war oder nicht. Was soll sonst übergeben worden sein?
              Lösung:
              PHP-Code:
              <?php
              function getVar(&$post) {
                  if(isset(
              $post))
                      return 
              $post;
              }

              echo 
              getVar($_POST["text"]);
              ?>
              Das kannst Du tun, egal ob die Variable leer ist oder nicht (gesetzt ist sie ja auf jeden Fall).
              Ist sie das auch, wenn ich die Seite mit dem Formular zum ersten mal aufrufe? Ich glaube nämlich die $_POST["text"] ist solange nicht gesetzt, bis ich das Formular zum ersten mal absende. Die Prüfung mit isset(); ist ja grade das was ich in die Klasse übertragen wollte.

              Wenn die Eingabe für den Text fehlerhaft war, also nicht dem Regex-Muster entspricht, dann möchte ich die Variable $_POST["text"] irgendwie markieren, so dass man mit der funktion/methode isfalse() prüfen kann: war der eingegebene Text fehlerhaft. Wenn ja: Mach den Text rot und breche das Formular ab. Sonst ist alles ok.

              Das Problem ist jetzt die Verknüpfung zwischen $oForm->check() und $oForm->isfalse(). Die Funktion isfalse muss ja wissen, was die funktion check() als fehlerhaft markiert hat. Dafür müsste die Funktion check() den fehler zwischenspeichern.
              Und wie ich diese Variable (also genaue Identifikation der Variable und nicht den INHALT) zwischenspeichere, weiß ich nicht.

              Ist etwas schwer zu erklären. Ich hoffe du kannst es verstehen.
              Tutorials zum Thema Technik:
              https://pilabor.com
              https://www.fynder.de

              Kommentar


              • #8
                ist sie das auch, wenn ich die Seite mit dem Formular zum ersten mal aufrufe?
                Ja, ist sie. Sobald Du sie in die Funktion übergibst, ist sie gesetzt. Existiert die Variable vorher nicht, setzt sie php auf NULL. is_set() liefert auch dann false, wenn eine Variable NULL ist.
                PHP-Code:
                <?php
                $irgendwas 
                NULL;
                echo isset(
                $irgendwas) ? 'ja':'nein';
                ?>
                Deshalb hat das praktisch für Dich wohl keine Bedeutung; sieh es einfach als Spitzfindigkeit meinerseits

                Übergib doch einfach $oForm->check() den Namen des Elements.
                oForm kann dann intern selbst wieder ein Feld, das die Zuordnung Name->isfalse speichert, pflegen.
                Also in stark vereinfachter Form (und ungetestet, nur eine Idee, edit: jetzt doch getestet )
                PHP-Code:
                <?php
                class Feldtest
                {
                    var 
                $feld;
                    var 
                $checked;
                    
                    
                // php4 oder php5? Ich benutze mal php4
                    
                function Feldtest(&$feld)
                    {
                        
                $this->feld = &$feld;
                    }
                    
                    function 
                check($element$regex)
                    {
                        
                $this->checked[$element] = preg_match($regex$this->feld[$element]);
                        return 
                $this->checked[$element];
                    }
                    
                    function 
                isfalse($element)
                    {
                        return !(
                $this->checked[$element]);
                    }
                }


                // Beispiel, statt $_POST
                $feld = array( 'feld1'=>'abc''feld2'=>'abc',);

                $oForm = new Feldtest($feld);
                $oForm->check('feld1''/^[a-z]+$/');
                $oForm->check('feld2''/^[0-9]+$/');

                echo 
                'feld1 '$oForm->isfalse('feld1') ? 'isfalse' 'ok''
                '
                ;
                echo 
                'feld2 '$oForm->isfalse('feld2') ? 'isfalse' 'ok';
                ?>
                Und wenn Du das noch weiter kapselst, indem Du vorher angibst, woraus Dein Formular besteht und die Bedingungen automatisch geprüft werden, dann kommst Du langsam aber sicher bei PEAR::Quickform an. Das übernimmt dann auch die Darstellung. Einmal definieren und Dreierlei erhalten: Darstellung, Aufbereitung, Plausi.

                Kommentar


                • #9
                  So eine Formularklasse besitze ich schon. Nur so kann ich keine 2-Dimensionalen Arrays im Request prüfen. Dahin wollte ich eigentlich. Außerdem musst du in deiner Klasse vorher alle Felder Definieren ($feld) und im Konstruktor initialisieren.

                  Wäre meine Methode möglich, müsste man das nicht. Dort wäre mit der Funktion check(); alles abgearbeitet. Und es wären unendlich dimensionierte arrays machbar.

                  Aber du hast mich auf was gebracht. Ich kasper mir das mal aus. Danke jedenfalls
                  Tutorials zum Thema Technik:
                  https://pilabor.com
                  https://www.fynder.de

                  Kommentar


                  • #10
                    Außerdem musst du in deiner Klasse vorher alle Felder Definieren ($feld) und im Konstruktor initialisieren.
                    Das ist doch nur ein Beispiel einer Vorgehensweise. Aus wievielen Feldern beziehst Du Deine Formulardaten?
                    Ich sehe immer noch nichts, was gegen Quickform spricht.

                    Kommentar


                    • #11
                      Code:
                      <input type="text" name="zutat[1][]" value="">
                      
                      <input type="text" name="zutat[1][]" value="">
                      
                      <input type="text" name="zutat[1][]" value=""> 
                      
                      <input type="text" name="zutat[2][]" value="">
                      
                      <input type="text" name="zutat[2][]" value="">
                      
                      <input type="text" name="zutat[2][]" value="">
                      Das zu behandeln, dürfte schwer werden...
                      Um solche Sachverhalte gings mir. Ich schau mir das PEAR dingen bei gelegenheit mal an.
                      Tutorials zum Thema Technik:
                      https://pilabor.com
                      https://www.fynder.de

                      Kommentar

                      Lädt...
                      X