• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Mehrere Formulare abschicken

Hesoyam

Neues Mitglied
Hallo,

ich habe mal gegooglet, aber ichweiss selber nicht ganz nach was man da genau suchen muss.

Folgende Situation:
Ich hab in meinem Administrationsmenü eine "Liste" mit Bannern
http://clandestino.selfip.org/images/html/screen1.png

wie man auf dem screen sehen kann, sind das alles Formulare, die man einzeln bearbeiten und abschicken kann.

ich will jetzt das so haben, dass ich AUCH alle bearbeiten und abschicken kann.
Das Problem für mich ist, dass die Anzahl der Banner variabel ist, und ich daher keine Idee hab wie ich es umsetze.

Also es soll weiterhin so sein, dass ich jedes Formular einzeln abschicken kann, aber es soll auch möglich sein, 2 zu bearbeiten und dann beide änderungen zu speichern.

Ich hoffe ihr könnt mir nen Tip geben, oder wenn möglich auch eine Internetseite wo ich eine Anleitung diesbezüglich finde ...

Danke im Vorraus ^^

Grüße
Daniel
 
Zuletzt bearbeitet:
Werbung:
Du kannst per Request nur ein einziges Formular abschicken. Das heißt, es muss ein wenig mit der Benennung von Submit-Buttons getrickst werden:

PHP:
<!DOCTYPE html>

<html>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>test</title>
    </head>

    <body>

<?php

if (isset($_POST['form_demo'])) {
    if (isset($_POST['action_edit'])) {
        echo 'Alles';
    } elseif (isset($_POST['action_edit_single'])) {
        $keys = array_keys($_POST['action_edit_single']);
        echo '<p>Einzeln: ' . $keys[0] . '</p>';
        echo '<p>Zugehörige Werte:</p>';
        echo '<ul>';
        echo '<li>URL: ' . $_POST['url'][$keys[0]] . '</li>';
        echo '<li>Target: ' . $_POST['target'][$keys[0]] . '</li>';
        echo '<li>Title: ' . $_POST['title'][$keys[0]] . '</li>';
        echo '<li>Content: ' . $_POST['content'][$keys[0]] . '</li>';
        echo '</ul>';
    }
}

?>

        <form method="post" action="">

<?php for ($i = 0; $i < 10; $i++): ?>
        <fieldset>
            <legend>Abschnitt <?php echo $i; ?></legend>

            <p>URL: <input name="url[]" /></p>
            <p>Target: <input name="target[]" /></p>
            <p>Title: <input name="title[]" /></p>
            <p>Content: <input name="content[]" /></p>
            <p><input type="submit" name="action_edit_single[<?php echo $i; ?>]" value="Edit" /></p>
        </fieldset>
<?php endfor; ?>
            
            <p>
                <input type="hidden" name="form_demo" />
                <input type="submit" name="action_edit" value="Edit all" />
            </p>
        </form>

    </body>

</html>

Edit: Eleganter wäre es vielleicht, pro Eintrag eine Checkbox zu setzen ("Mitspeichern"), die automatisch markiert wird, sobald eine Änderung in einem der Felder eines Eintrags erfolgt, und ganz unten nur einen einzigen Button zum Absenden. Auf Serverseite werden dann nur die Änderungen mit gesetzter Checkbox berücksichtigt.

Edit 2: Noch ein Hinweis: Wenn die einzelnen Einträge über eine ID identifiziert werden können, sollte diese ID als Index der Formularfelder gesetzt werden. Also etwa <input name="url[<?php echo $id; ?>]" />.
 
Zuletzt bearbeitet:
Ah cool danke

Ja, das mit der "eleganten methode" sieht man ja auch im kleinen auszug bei phpmyadmin, wenn man einen neuen wert in eine tabelle einfügen möchte ( [X] Ignorieren )

Danke für die schnelle Hilfe ^^
 
Werbung:
Und schon habe ich das nächste problem ^^

Also wenn ich jetzt auf "Alle Absenden" klicke, dann bekomme ich ja ein Mords-Array.

zbsp.:
[id] =>
[0] => 1
[1] => 2
[2] => 3
[title]=>
[0] => baustelle
[1] =>
[2] =>

wie kann ich jetzt alle key [0] aus den array in ein array packen und alle key [1] in ein eigenes array und so weiter?!

ich hatte mir das mit foreach überlegt, aber das verlief sich in sofern, weil das erstens ein zeilenlanger code war und zudem schien mir das ganze, was ich da hatte nicht nur extrems unprofessionel sondern auch unübersichtlich ^^

kannst du mir vlt einen Tipp geben oder einen Wink mim Zaunpfahl? ^^

hat sich erledigt ^^
habs selber gelöst, nach ein bisschen rumprobieren
danke nochmals ^^
 
Zuletzt bearbeitet:
Okay.

Hier dennoch noch ein etwas "praxisnäheres" Beispiel. Da kam ich bei der ersten Version nicht drauf.

PHP:
<?php

// Werte, wie sie vielleicht aus der Datenbank kommen könnten

$data = array();
$data[] = array('id'      => '12',
                'url'     => 'http://example.org/',
                'target'  => 'self',
                'title'   => 'Beispielseite',
                'content' => 'Ein wunderbares Beispiel');
$data[] = array('id'      => '24',
                'url'     => 'http://example.com/',
                'target'  => 'self',
                'title'   => 'Tolle Seite',
                'content' => 'Noch ein Link');
$data[] = array('id'      => '27',
                'url'     => 'http://example.org/test/',
                'target'  => 'self',
                'title'   => 'Hallo Welt',
                'content' => 'Hier unbedingt klicken');
$data[] = array('id'      => '28',
                'url'     => 'http://example.com/hello/',
                'target'  => 'self',
                'title'   => 'Example',
                'content' => 'Diese Seite braucht noch Arbeit');
$data[] = array('id'      => '33',
                'url'     => 'http://example.org/foo/',
                'target'  => 'self',
                'title'   => 'Testseite',
                'content' => 'Ein kurzer Test');
$data[] = array('id'      => '64',
                'url'     => 'http://example.org/bar/foo/',
                'target'  => 'self',
                'title'   => 'Bannerseite',
                'content' => 'Seite mit Banner');

?>


<!DOCTYPE html>

<html>

    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>test</title>
    </head>

    <body>

<?php

if (isset($_POST['form_demo'])) {
    if (isset($_POST['action_edit'])) {
        echo '<p>Alles</p>';
        echo '<pre>';
        print_r($_POST);
        echo '</pre>';
    } elseif (isset($_POST['action_edit_single'])) {
        $keys = array_keys($_POST['action_edit_single']);
        echo '<p>Einzeln: ' . $keys[0] . '</p>';
        echo '<p>Zugehörige Werte:</p>';
        echo '<pre>';
        print_r($_POST['data'][$keys[0]]);
        echo '</pre>';
    }
}

?>

        <form method="post" action="">

<?php
// Diese Schleife ließe sich noch sinnvoller schreiben. Hier wird aktuell eine
// Menge Code wiederholt

foreach ($data as $d): ?>
        <fieldset>
            <legend>ID: <?php echo htmlspecialchars($d['id']); ?></legend>

            <p>URL: <input name="data[<?php echo htmlspecialchars($d['id']); ?>][url]"
                           value="<?php echo htmlspecialchars($d['url']); ?>" /></p>
            <p>Target: <input name="data[<?php echo htmlspecialchars($d['id']); ?>][target]"
                           value="<?php echo htmlspecialchars($d['target']); ?>" /></p>
            <p>Title: <input name="data[<?php echo htmlspecialchars($d['id']); ?>][title]"
                           value="<?php echo htmlspecialchars($d['title']); ?>" /></p>
            <p>Content: <input name="data[<?php echo htmlspecialchars($d['id']); ?>][content]"
                           value="<?php echo htmlspecialchars($d['content']); ?>" /></p>
            <p><input type="submit" name="action_edit_single[<?php echo htmlspecialchars($d['id']); ?>]" value="Edit" /></p>
        </fieldset>
<?php endforeach; ?>

            <p>
                <input type="hidden" name="form_demo" />
                <input type="submit" name="action_edit" value="Edit all" />
            </p>
        </form>

    </body>

</html>

Beispielausgabe:

Code:
Einzeln: 24

Zugehörige Werte:

Array
(
    [url] => http://example.com/
    [target] => self
    [title] => Tolle Seite
    [content] => Noch ein Link
)
 
°.°
wow ... öh so wollte ich es vorhin au haben ^^
ich schau mal, ob ich das so hinbekomme ^^

danke danke ^^
 
Werbung:
Zurück
Oben