Thomas: Wie komm ich an den Namen eines Arrayfeldes?

Ja das ist eigentlich auch schon mein problem...
Ich hab ein Array und hab das $i-te Feld, jetzt will ich wissen wie das heißt. Mit der keys-function, die auf php.net steht bekomm ich alle Felder, ich will aber nur das eine haben.

Thx

Thomas

  1. Hallo Thomas,

    was genau meinst du?

    Das "$i-te Feld" hat den Index/Key "$i"..oder?

    Gruss Sven

    1. Hallo Thomas,

      was genau meinst du?

      Das "$i-te Feld" hat den Index/Key "$i"..oder?

      Ich hab jetzt meintewegen ein post-array, das die Felder
      $_POST['Benutzername']
      $_POST['Nachame']
      $_POST['Vorname']

      hat.
      Nehmen wir mal an, ich wüsste nicht, wie die einelnen Felder heissen ich will jetzt z.B. wissen, ob das $_POST[2] den Namen 'Vorname' trägt oder nicht..alsoirgendwie muss ich an den namen von dem $_POST[2]-feld kommen.

      Wie?

      1. Moin!

        Ich hab jetzt meintewegen ein post-array, das die Felder
        $_POST['Benutzername']
        $_POST['Nachame']
        $_POST['Vorname']

        hat.
        Nehmen wir mal an, ich wüsste nicht, wie die einelnen Felder heissen ich will jetzt z.B. wissen, ob das $_POST[2] den Namen 'Vorname' trägt oder nicht..alsoirgendwie muss ich an den namen von dem $_POST[2]-feld kommen.

        Ein Hash hat per Definition keine Reihenfolge, bzw. die Reihenfolge der Schlüsselwerte ist je nach Speicherung zufällig. Insofern gibt es kein "festes zweites Feld", weil das im Prinzip jedes Feld sein könnte.

        Abgesehen davon sehe ich auch die Notwendigkeit absolut nicht, einen Zugriff wie deinen durchzuführen. Vielleicht schilderst du mal deine Problemstellung genauer, denn ich bin mir fast sicher, dass du schon ein paar Schritte vorher einen Denkfehler eingebaut hast, der dann zielstrebig zu deinem jetzigen Problem führt.

        - Sven Rautenberg

        1. Also:

          Habe mehrere Formulare mit Pflichfeldern und anderen, die leer sein können. An die Funktion wird immer nur ein Formular übergeben.

          Jetzt wollte ich alle Felder per For-Schleife durchgehen und, falls Sie leer sind nachgucken, wie das Feld heißt und dann eine entsprechende Meldung ausgeben. Ich hab das in JS schon fertig, muss das jetzt aber nochmal im PHP-Script abfangen.
          Zur Verdeutlichung das JS-Script (f ist das übergebene Formular):

          for(var i=0;i<f.length;i++){
                      if(f[i].value == ""){
                         switch(f[i].name){
                             case "Benutzername": msg+= "Bitte geben Sie einen Benutzernamen ein.\n"; ok=false; break;
                             case "Name"        : msg+= "Bitte geben Sie einen Nachnamen ein.\n"; ok=false; break;
                             case "Vorname"     : msg+= "Bitte geben Sie einen Vornamen ein.\n"; ok=false; break;
                             case "EMail"       : msg+= "Bitte geben Sie eine Emailadresse ein.\n"; ok=false; break;
                             case "Confirmemail": msg+= "Bitte bestätigen Sie Ihre Emailadresse.\n"; ok=false; break;
                             case "Privlevel"   : msg+= "Bitte wählen Sie ein Privilegienlevel aus. \n"; ok=false; break;
                             default            : msg+= ""; break;
                         }//switch(f[i].name)
                      }//if(f[i].type == "text" && f[i].value == "")
                    }//for(var i=0;i<f.length;i++)

          1. Moin!

            Habe mehrere Formulare mit Pflichfeldern und anderen, die leer sein können. An die Funktion wird immer nur ein Formular übergeben.

            Aha.

            Jetzt wollte ich alle Felder per For-Schleife durchgehen und, falls Sie leer sind nachgucken, wie das Feld heißt und dann eine entsprechende Meldung ausgeben. Ich hab das in JS schon fertig, muss das jetzt aber nochmal im PHP-Script abfangen.

            Hm - gewöhnlich solltest du doch alle vorhandenen Formularfelder kennen. Was spricht dagegen, jedes einzelne der Pflichtfelder auf Ausgefülltheit zu prüfen?

            Zur Verdeutlichung das JS-Script (f ist das übergebene Formular):

            Ich weiß nicht: Irgendwie habe ich das dumme Gefühl, dass dein Javascript nicht funktioniert. Du fragst den Value-Wert eines Formulars ab - sowas gibts nicht. Du kannst nur Values von Formularfeldern im Formular abfragen. Irgendwas ist da falsch. Kann sein, dass der Internet Explorer das hinbiegt - teste mal in anderen Browsern!

            Ansonsten:

            <?php
            $msg = "";
            if ($_POST{'benutzername'} == "")
            {
              $msg .= "Bitte geben Sie einen Benutzernamen ein<br>\n";
            }
            if ($_POST{'name'} == "")
            {
              $msg .= "Bitte geben Sie einen Nachnamen ein<br>\n";
            }
            // und so weiter
            if ($msg != "")
            {
              echo $msg;
              // Fehler im Formular
            }
            else
            {
              //Formular auswerten, verarbeiten
            }

            - Sven Rautenberg

            1. Ansonsten:

              <?php
              $msg = "";
              if ($_POST{'benutzername'} == "")
              {
                $msg .= "Bitte geben Sie einen Benutzernamen ein<br>\n";
              }
              if ($_POST{'name'} == "")
              {
                $msg .= "Bitte geben Sie einen Nachnamen ein<br>\n";
              }
              // und so weiter
              if ($msg != "")
              {
                echo $msg;
                // Fehler im Formular
              }
              else
              {
                //Formular auswerten, verarbeiten
              }

              • Sven Rautenberg

              Hallo,

              warum nicht einfach so:

              foreach ($_POST as $key => $value) {
                if (!$value) {
                  echo "Bitte geben Sie einen $key ein<br>\n";
                }
              }

              • Wolfgang
              1. Moin!

                Hallo,

                warum nicht einfach so:

                foreach ($_POST as $key => $value) {
                  if (!$value) {
                    echo "Bitte geben Sie einen $key ein<br>\n";
                  }
                }

                Deine Lösung scheint verblüffend einfach. Allerdings hat sie Haken:

                1. Der Vergleich if (!$value) ist böse[tm], denn wenn in $value etwas steht, was eingegeben wurde, aber dennoch zu "false" evaluiert, löst deine Fehlermeldung fälschlicherweise aus. Dort sollte mindestens etwas wie if (empty($value)) stehen.

                2. Deine Lösung erfordert, dass die Formularfelder alle so heißen, wie ihre Beschriftung im Browser. Das verhindert, dass man die Namen der Formularfelder nach programmtechnischen Aspekten optimiert benennen kann. Außerdem kann man keine Umlaute einbauen (was ja durchaus erwünscht sein kann), und drittens: Was ist mit Checkboxen und select multiple?

                3. Deine Lösung ignoriert, dass man gewisse Felder auf Ausgefülltheit prüfen will, andere Felder aber sogar auf EInhaltung gewisser Inhaltsforderungen wie z.B. "Nur Zahlen", "Gültiges Datum" etc. Es bietet sich daher an, für jedes Pflichtfeld eine entsprechende IF-Abfrage zu gestalten, die individuell gestaltet werden kann. Es ist programmtechnisch IMHO logischer, und auch für die Benutzerführung. Es hilft dem Benutzer nichts, wenn er beim ersten Abschickversuch gesagt bekommt, dass er ein Datum eingeben soll, beim zweiten Mal, dass er es im Format TTMMJJJJ anzugeben hat, und beim dritten Mal, dass es auch existieren muss. :)

                - Sven Rautenberg