Felix Riesterer: Form in Form / Nested Forms (2)

Beitrag lesen

Lieber Pit,

Daraus resultierte, dass die Elemente des inneren Formulars, die zuvor sozusagen einen eigenen Submit-Button hatten und somit auch eindeutig beim Server als zu editierend ankamen, nun in Arrays verpackt werden mußten und nur als Summe auf dem Server ankommen.

das klingt falsch. Der Submit-Button sollte noch immer als separater Submit-Button existieren. Wenn das Formular durch passende fieldset-Elemente strukturiert ist, wird dem Benutzer klar, welcher Submit-Button für welche Daten relevant ist. Auf der Serverseite kannst Du dann auch verhindern, dass andere Daten ebenso verarbeitet werden, weil für sie ein anderer Submit-Button zuständig ist.

Bischen doof, da man nicht weiß, welche Einträge editiert wurden jund welche einfach unverändert mitgeliefert werden.

Wie gesagt, Du solltest die Verarbeitung der Daten vom verwendeten Submit-Button abhängig machen. Alles andere ist Unsinn! Mir scheint, dass bei Dir genau dieses Dein tatsächliches technisches Problem ist.

habe ich ein verstecktes input-field installiert, in das ich dann per JS die EditID hinein packe,

Das klingt nach fahrlässig falsch! Tu das nicht! Das ist quick&dirty und ohne JavaScript unbenutzbar und von daher gefährlich!

dann weiß ich auf dem Server, welche Zeile wirklich editiert wurde.

Zeile? Editiert? Du editierst Zeilen? Geht es um Textinhalte, die Du in Zeilen organisierst? Na, dann zeig doch mal ein online-Beispiel, wie so eine Bearbeitungsseite bei Dir aussieht! Mannomann, das klingt nach einem Sumpf von funktionalem Design!

Dort kann ich dann hierüber die werte aus dem assoziativen Array direkt herauspicken und in der DB ändern.

Uärgs! Assoziatives Array bedeutet, dass Deine Feldnamen so aussehen:

<input name="quatsch[mit][sosse]" value="Zeile mit Textinhalt">

'Finde ich effizienter und weniger fehleranfällig als eine mir nciht bekannte Menge an Zeilen komplett zu ändern, nur weil sie auch mitgeliefert werden, aber gar nicht userseitig behandelt wurden.

Wie wäre es denn damit:

<fieldset>
  <legend>Zeile 1274 - Erklärung einer Unschuld</legend>
  <p>
    <label for="line-1274">
      Zeile 1274
      <input name="line-1274" value="Er sagte zu ihr, er habe die Nacht auf dem Sofa verbracht.">
    </label>
    <button name="save-1274">Zeile 1274 speichern</button>
  </p>
</fieldset>

Durch die Benennung des Buttons mit dem Schlüsselwort "save" wird klar, dass es sich hier um einen Button handelt. Mit dem Schlüsselwort "line" erkennt man, dass es von einem input-Feld stammt. Nun kann man serverseitig auswerten:

$line = false;
$text = false;

foreach (array_keys($_POST) as $key) {
    // check for submit button
    if (substr($key, 0, 4) == 'save') {
        $line = substr($key, 4);
    }
}

if ($line
    && array_key_exists("line-$line", $_POST)
) {
    $text = $_POST["line-$line"];
}

// only save data if suitable data has been received
// even when empty
if ($text !== false) {
    // save contents to DB
    /* UPDATE story
     * SET text = :text
     * WHERE line = :line
     */
}

Obiger Code ist ungetestet, es kann bei den verwendeten Indices für substr() fehlerhaftes herauskommen!

Ich wollts nur kurz erwähnen, weil Du mal nachgefragt hattest, als ich nicht mehr weiter auf Anregungen und Hilfsangebote eingegangen war.

Und das war auch gut so!

Also, wie gesagt, so richtig schwierig wars nicht, aber sehr nervig umzusetzen fand ichs schon.

Wenn es nervig war, dann hat es ein kaputtes funktionales Design!

Liebe Grüße,

Felix Riesterer.

0 66

Form in Form / Nested Forms (2)

Pit
  • javascript
  1. 0
    Mitleser
    1. 0
      Pit
      1. 0
        MudGuard
        1. 0
          Mitleser
        2. 0
          Pit
          1. 3
            Mitleser
      2. 0
        Mitleser
    2. 0
      Gunnar Bittersmann
      • dom
      • html
      1. 0
        ursus contionabundo
        1. 0
          Gunnar Bittersmann
          1. 0
            ursus contionabundo
            1. 0
              Gunnar Bittersmann
              1. 0
                ursus contionabundo
                1. 1
                  Gunnar Bittersmann
                  1. 0
                    ursus contionabundo
                    1. 0
                      Gunnar Bittersmann
                      1. 0
                        ursus contionabundo
                        1. 0

                          War kein kutes Beispiel.

                          ursus contionabundo
              2. 0
                Tabellenkalk
                1. 0
                  Gunnar Bittersmann
                  • sprache
  2. 0
    ursus contionabundo
  3. 0
    Felix Riesterer
    • meinung
    1. 1
      Pit
      1. 0
        Felix Riesterer
        1. 0
          Gunnar Bittersmann
          • design
          • meinung
          1. 0
            ursus contionabundo
        2. 0
          Pit
          1. 0
            pl
            1. 0
              Felix Riesterer
              1. 0
                pl
                1. 0
                  Felix Riesterer
                2. 1
                  dedlfix
                  1. 0
                    pl
                    1. 1
                      Matthias Apsel
                      1. 0
                        pl
                        • zu diesem forum
                        1. 6

                          Framework

                          Orlok
                          • moderation
                          1. 0
                            Matthias Apsel
                          2. 0

                            Die Energie des Verstehens!

                            pl
                            • zu diesem forum
                            1. 0
                              Gunnar Bittersmann
                              1. 0
                                pl
                            2. 2
                              Christian Kruse
                              • moderation
                            3. 0
                              Matthias Apsel
                  2. 0
                    Pit
                    1. 0
                      dedlfix
                      1. 0
                        Pit
                        1. 0
                          dedlfix
                          1. 0
                            Pit
                        2. 0
                          Felix Riesterer
                          1. 0
                            Pit
                            1. 0
                              Felix Riesterer
                              • php
                              1. 0
                                Pit
                                1. 0
                                  Felix Riesterer
                                  1. 0
                                    Pit
                                    1. 0
                                      Felix Riesterer
                                      1. 0
                                        Pit
                                        1. 0
                                          Matthias Apsel
                                          1. 0
                                            Pit
                                          2. 0
                                            Gunnar Bittersmann
                                            • html
                                            1. 0
                                              Pit
                                              1. 0
                                                Felix Riesterer
                                                1. 1
                                                  Matthias Apsel
                                              2. 0
                                                Gunnar Bittersmann
                                                1. 0
                                                  Matthias Apsel
                                                2. 0
                                                  Pit
                                            2. 0
                                              Matthias Apsel