Luke: Input felder auslesen?

Hallo!!

Ich habe je nach Daten in der Datenbank unbestimmt viele Inputfelder, die dann auch alle wieder zurück in die DB sollen. Jetzt meine Frage: Wie mach ich das mit möglichst Wenigaufwand?
Irgendwie mit ner Schleife, die entsprechend viele input felder erstellt bzw. http_get_vars???

Danke,

Lukas

  1. Moin!

    Hallo!!

    Ich habe je nach Daten in der Datenbank unbestimmt viele Inputfelder, die dann auch alle wieder zurück in die DB sollen. Jetzt meine Frage: Wie mach ich das mit möglichst Wenigaufwand?
    Irgendwie mit ner Schleife, die entsprechend viele input felder erstellt bzw. http_get_vars???

    benenne die Felder so <input type="..." name="input[]">

    Die Auswertung erfolgt aus dem Array $_GET['input'][$i].
    Natürlich geht das auch mit POST.

    Lukas

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix®

    --
    Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
    1. benenne die Felder so <input type="..." name="input[]">

      Die Auswertung erfolgt aus dem Array $_GET['input'][$i].

      Genau das - danke!

      Nur taucht direkt das zweite problem auf: ich habe für jeden datensatz jeweils ein select und text feld - wie mach ich das dann?

      1. Moin!

        benenne die Felder so <input type="..." name="input[]">
        Die Auswertung erfolgt aus dem Array $_GET['input'][$i].
        Genau das - danke!

        :) wusste ich es doch. Das ist meistens gemeint, wenn danach gefragt wird :))

        Nur taucht direkt das zweite problem auf: ich habe für jeden datensatz jeweils ein select und text feld - wie mach ich das dann?

        Ok. Du gibst dem Select-Feld und dem text-feld  zwei verschiedene Namen.
        <input type="text" name="input[]['text']">
        <select name="input[]['select']">
           <option value="" selected="selected">auswahl</option>
           <option value="sonstwas"</option>
        </select>

        und dann im Skript

        $i=0;
        foreach $input as $dummy
        {
           if ($_POST['input'][$i]['select'] != "")
           {
              $input[$i]=$_POST['input'][$i]['select'];
           }
           else
           {
              $input[$i]=$_POST['input'][$i]['text'];
           }
           $i++;
        }

        Oder was immer Dir dazu einfällt. Du erweiterst einfach den Array und bildest bei der Auswertung eine dir genehme Schleife und fragst in der Dir genehmen Art ab, welchen Wert Du denn gerne hättest :)

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix®

        --
        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
        1. Abend =)

          Oder was immer Dir dazu einfällt. Du erweiterst einfach den Array und bildest bei der Auswertung eine dir genehme Schleife und fragst in der Dir genehmen Art ab, welchen Wert Du denn gerne hättest :)

          MFFG (Mit freundlich- friedfertigem Grinsen)

          fastix®

          Na dann herzlichen Dank!

          1. Naja bloß das funktioniert nicht =)
            sieht jemand was da schon wieder falsch ist?

            $i=0;
            foreach ($input as $dummy)
            {
              if (($_POST['input'][$i]['vnr'] != "") || ($_POST['input'][$i]['bemerkung'] != ""))
                {

            $data="INSERT INTO tab VALUES(NULL, '".$kurse[$i][0]."','"
              .$kurse[$i][4]."','".$_POST['input'][$i]['vnr']."',1, ".$this->endwochekrank.
              ", '".$_POST['input'][$i]['bemerkung']."')";

            mysql_query($data) or die (mysql_error());

            }

            $i++;
            }

            1. Moin!

              Naja bloß das funktioniert nicht =)

              Hm. Was daran funktioniert nicht? Fehlermeldungen?

              Wenn nicht:

              Füge mal ganz oben ein: <? phpinfo(); exit; ?>

              Dann solltest Du die übliche Ausgabe von phpinfo bekommen und das Skript wird abgebrochen.
              Aber phpinfo zeigt Dir die übergebenen Variablen- auch bei Arrays. Das bringt oft eine ziemliche Erleuchtung :)

              MFFG (Mit freundlich- friedfertigem Grinsen)

              fastix®

              --
              Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
              1. Aber phpinfo zeigt Dir die übergebenen Variablen- auch bei Arrays. Das bringt oft eine ziemliche Erleuchtung :)

                [1000] => Array
                        (
                            ['bemerkung'] =>
                        )

                und was sagt mir das jetzt =)

                1. echo $begrüßung;

                  [1000] => Array
                          (
                              ['bemerkung'] =>
                          )

                  und was sagt mir das jetzt =)

                  Was es dir sagt weiß ich nicht.
                  Mir sagt es,

                  • dass du die Zelle links deines Zitates verschweigst und mindestens die erste und letzte Zeile der rechten Zelle unterschlagen hast
                  • dass die aufgrufene URL auf [1000]['bemerkung'] endete oder dass ein input-Tag dessen name-Attribut so endete mit ohne Eingabe abgesendet wurde
                  • dass du die mehr Ärger als Nutzen bringenden Magic Quotes eingeschaltet hast.

                  echo "$verabschiedung $name";

                2. Moin!

                  [1000] => Array
                          (
                              ['bemerkung'] =>
                          )

                  Da fehlt was. Der Name des Formularelements muss mit einem Buchstaben beginnen.
                  Schicke mal eines der input+select-paare im HTML-Quelltext.

                  MFFG (Mit freundlich- friedfertigem Grinsen)

                  fastix®

                  --
                  Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
        2. echo $begrüßung;

          $i=0;
          foreach $input as $dummy
          {
             if ($_POST['input'][$i]['select'] != "")
             {
                $input[$i]=$_POST['input'][$i]['select'];
             }
             else
             {
                $input[$i]=$_POST['input'][$i]['text'];
             }
             $i++;
          }

          Wo kommt $input her? Wieso nimmst du an, dass es ein Array ist? Warum willst du $input Elemente hinzufügen, deren Existenz du nicht prüfst, während du es mit foreach durchläufst?

          Ein Array mit foreach zu durchlaufen, um dann mit einem extra verwalteten Zähler auf Elemente zuzugreifen, deren Existenz nicht sichergestellt/geprüft wurde, ist Mist.
          $_POST['input'][$i]['select'] != "" ist zur Existenzprüfung ungeeignet, was ein auf E_ALL gestelltes error_reporting mit Sicherheit zu bemängeln hätte.

          Eine for-Schleife mit Zähler empfiehlt sich nur, wenn genau bekannt ist, dass es auch einen fortlaufenden, lückenlosen Schlüssel gibt. (Zur Not kann man testen ob der Schlüssel vorhanden ist. Wahrscheinlich ist dann aber foreach das geeignetere Mittel der Wahl.)

          Für unbekannte Schlüsselwerte wird foreach idealerweise so verwendet:

          foreach ($_POST as $key => $value) {
            $x = $_POST[$key]; // Beispiel 1
            echo $key . ': ' . $value; // Beispiel 2
          }

          echo "$verabschiedung $name";

          1. Moin!

            echo $begrüßung;

            $i=0;
            foreach $input as $dummy
            {
               if ($_POST['input'][$i]['select'] != "")
               {
                  $input[$i]=$_POST['input'][$i]['select'];
               }
               else
               {
                  $input[$i]=$_POST['input'][$i]['text'];
               }
               $i++;
            }

            Wo kommt $input her? Wieso nimmst du an, dass es ein Array ist? Warum willst du $input Elemente hinzufügen, deren Existenz du nicht prüfst, während du es mit foreach durchläufst?

            Haaaaaaa! Genau!

            $i=0;
            foreach $_POST['input'] as $dummy
            {
               if ($_POST['input'][$i]['select'] != "")
               {
                   $input[$i]=$_POST['input'][$i]['select'];
               }
               else
               {
                   $input[$i]=$_POST['input'][$i]['text'];
               }
               $i++;
            }

            Das der Spaß nur betrieben wird, wenn $_POST['input'] überhaupt existiert ist klar.
            Das Error-Reporting ist offensichtlich so eingestellt, dass da nichts kommt.
            Das mit den fortlaufenden Werten war natürlich eine Spekulation.

            Ich hatte das ganze nur hingerotzt, um zu zeigen, dass er in einer Schleife die übergebenen Werte prüfen möge, weil der OP schrieb, er hätte jeweils ein letztendlich konkurierendes input und select.
            Das ganze ging aus dem Begleittext doch hoffentlich hervor.

            MFFG (Mit freundlich- friedfertigem Grinsen)

            fastix®

            --
            Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
  2. Hello,

    wenn Du das automatisieren willst, dürfte das Hauptproblem in der Art und Größe der Felder liegen, sowie in den Validierungsfunktionen und Zugriffsrechten.

    Sonst könntest Du z.B. mit einem "show columns from $tablename" erstmal die Metadaten über die Felder ermitteln und dann danach die Generierungsfunktion und die Validierungsfunktion steuern.

    Wenn Du mit einer Session arbeitest, benötigst Du diese Abfrage im Prinzip nur beim Erstzugriff auf die Tabelle, denn Du kannst die Ergebnisse ja in der Session speichern.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
  3. Hi Lukas,

    vielleicht mit

      
    $insertquery = "UPDATE tabelle\n SET"  
    foreach($_POST as $key => $value)  
    {  
     $value = mysql_escape_string($value)  
     $insertquery .= "\n  $key='$value',";  
    }  
    $insertquery = substr($insertquery, 0, strlen($insertquery) - 1) //wegen dem letzten komma bei den SETs  
    $insertquery .= "\nWHERE id=$id";  
    echo "<pre>\n$insertquery\n</pre>";  
    mysql_query($insertquery, $db) or die('Fehler beim Speichern der Daten');  
    
    

    Man kann da natürlich viel scheiße eingeben, aber wenn du es flexibel haben willst.. Besser wäre natürlich, wenn es vorgegeben wäre.

    Oder vielleicht:

      
    $in_db = mysql_query("SELECT * FROM tabelle WHERE id=$id", $db);  
    $spalte1 = isset($_POST['spalte1']) : $_POST['spalte1'] ? $in_db['spalte1']  
    $spalte2 = isset($_POST['spalte2']) : $_POST['spalte2'] ? $in_db['spalte2']  
    $spalte3 = isset($_POST['spalte3']) : $_POST['spalte3'] ? $in_db['spalte3']  
    // wenn es per post kommt, wird das eingetragen, sonst der wert aus der db  
    // ... und natürlich das mysql_escape_string nicht vergessen! ;-)  
    mysql_query("UPDATE tabelle SET spalte1='$spalte1', spalte2='$spalte2', ...", $db)  
    
    

    Gruß, Marian