Autor |
Nachricht |
tacker
Dabei seit: 22.03.2002
Ort: Trondheim, Norwegen
Alter: 43
Geschlecht:
|
Verfasst Mo 15.05.2006 11:07
Titel
|
|
|
Naja, dein Ansatz ist auch etwas verquer. Beschreib dochmal kurz,
was das Formular können muss.
Ich vermute, dass Du Teilnehmer einer Veranstaltung eingeben willst, und
dass man einen beliebigen Teilnehmer löschen und weitere hinzufügen
kann?
|
|
|
|
|
Nimroy
Community Manager Threadersteller
Dabei seit: 26.05.2004
Ort: zwischen Köln und D'dorf
Alter: 46
Geschlecht:
|
Verfasst Mo 15.05.2006 11:18
Titel
|
|
|
So ähnlich, genau. Hier mal eine frühere Version:
Code: | <?php session_start();?>
<html>
<head>
<title>DyWiFo 0.7</title>
</head>
<body>
<h1>Teilnehmerliste</h1>
<form method="post" action="<?php $_SERVER['PHP_SELF']; ?>">
<?php if (isset($_POST['abschicken'])) {
if (isset ($_POST['a_teilnehmer'])){
$teilnehmer = $_POST['a_teilnehmer'];
$ausschluss = $_POST['a_ausschluss'];
echo "Kandidaten:<br/> ";
foreach ($teilnehmer as $kandidat){
echo $kandidat."<br />";
};
echo "Ausschlüsse:<br />";
foreach ($ausschluss as $verboten){
echo $verboten."<br />";
}
}
else {
echo "Fehler bei Datenübertragung";
}
}
else {
if (isset($_POST['minus'])) {
$_SESSION['fields'] = (isset($_POST['minus'])) ? $_SESSION['fields']-1 : 5; //Schreibt die Werte für i in die Session. 5 ist der Startwert
//echo "Daten löschen Test";
echo $_POST['count'];
} else {
$_SESSION['fields'] = (isset($_POST['plus'])) ? $_SESSION['fields']+1 : 5; //Schreibt die Werte für i in die Session. 5 ist der Startwert
}
for($i = 0; $i < $_SESSION['fields']; $i++) {
if($i+1 != $_SESSION['fields']) { //Abfrage ob letzte Zeile
echo '<p><input type="text" name="a_teilnehmer['.$i.']" value="'.$_POST[a_teilnehmer][$i].'" />
<input type="text" name="a_ausschluss['.$i.']" value="'.$_POST[a_ausschluss][$i].'" />
<input type="submit" name="minus" count="'.$i.'" value="-" /></p>';
} else { //Darstellung letzte Zeile
echo '<p><input type="text" name="a_teilnehmer['.$i.']" value="'.$_POST[a_teilnehmer][$i].'" />
<input type="text" name="a_ausschluss['.$i.']" value="'.$_POST[a_ausschluss][$i].'" />
<input type="submit" name="minus" count="'.$i.'" value="-" />
<input type="submit" name="plus" value="+" /></p>';
}
}
echo '<input type="submit" name="abschicken" />';
}
?>
</form>
</body>
</html> |
Der Teil bei "abschicken" ist momentan nur zur Kontrollausgabe, da kommt später was anderes hin.
Und jetzt soll natürlich genau die Zeile gelöscht werden, wo auch das minus gedrückt wurde. Da sich das Formular neu aufbaut muss meines Verständnisses nach das betreffende Element im POST-Array entfernt werden. Dafür muss ich aber den Index wisen und den bekomm ich eben über den Zähler des Minus-Buttons raus.
|
|
|
|
|
Anzeige
|
|
|
tacker
Dabei seit: 22.03.2002
Ort: Trondheim, Norwegen
Alter: 43
Geschlecht:
|
Verfasst Mo 15.05.2006 11:56
Titel
|
|
|
Ich habs mal überarbeitet:
Nicht vergessen, deine Session vorher zu killen.
Code: | <?php
session_start();
if (!isset($_SESSION['fields'])) {
$_SESSION['fields'] = array();
for ($i = 0; $i < 5; $i++) {
$_SESSION['fields'][] = array();
}
}
// Feld hinzufügen
if (isset($_POST['plus'])) {
$_SESSION['fields'][] = array();
}
// Werte zuweisen
if (isset($_POST)) {
foreach ($_POST as $k => $v) {
if ($k == 'a_teilnehmer'
or $k == 'a_ausschluss') {
foreach ($v as $id => $value) {
$_SESSION['fields'][$id][$k] = $value;
}
}
}
}
// Felder löschen
if (isset($_POST['minus'])
and is_array($_POST['minus'])) {
foreach ($_POST['minus'] as $k => $v) {
if ($v == '-' and isset($_SESSION['fields'][$k])) {
unset($_SESSION['fields'][$k]);
}
}
}
?>
<html>
<head>
<title>DyWiFo 0.8</title>
</head>
<body>
<h1>Teilnehmerliste</h1>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<?php
// Felder ausgeben
$n = 1;
foreach ($_SESSION['fields'] as $k => $field) {
echo '<p>';
echo '#' . ($n) . ' id:' . $k . ' ';
echo '<input type="text" name="a_teilnehmer[' . $k . ']" value="' . ((isset($field['a_teilnehmer'])) ? $field['a_teilnehmer'] : '') . '" />';
echo '<input type="text" name="a_ausschluss[' . $k . ']" value="' . ((isset($field['a_ausschluss'])) ? $field['a_ausschluss'] : '') . '" />';
echo '<input type="submit" name="minus[' . $k .']" value="-" />';
echo '</p>';
$n++;
}
echo '<p>';
echo '<input type="submit" name="plus" value="+" id="plus" />';
echo '<input type="submit" name="abschicken" />';
echo '</p>';
?>
</form>
</body>
</html> |
Zuletzt bearbeitet von tacker am Mo 15.05.2006 11:57, insgesamt 1-mal bearbeitet
|
|
|
|
|
Account gelöscht
Ort: -
Alter: -
|
Verfasst Mo 15.05.2006 12:00
Titel
|
|
|
Also ich verstehs immer noch nicht richtig, aber helfen würde mal, deinen Quelltext komplett neu zu schreiben und vor allem mal vernünftig zu strukturieren. Ich hab dir mal n Beispiel gemalt, wie es meiner Meinung nach aussehen könnte:
Code: | <?php
session_start();
//unset($_SESSION["input"]);
// default
if (!isset($_SESSION["input"])) {
$_SESSION["input"] = array("heinz","schenk","trallala");
}
// Feld hinzu
if (isset($_REQUEST["plus"])) {
$index = $_REQUEST["plus"];
// dreckige sortierung
$tmp = $_SESSION["input"];
unset ($_SESSION["input"]);
foreach ($tmp AS $k => $v) {
$_SESSION["input"][] = $v;
if ($k == $index) {
$_SESSION["input"][] = "neu";
}
}
}
// Feld wech
if (isset($_REQUEST["minus"])) {
unset($_SESSION["input"][$_REQUEST["minus"]]);
}
?>
<form method="post" enctype="multipart/form-data">
<?foreach ($_SESSION["input"] AS $k=>$v):?>
<input type="text" name="text_<?=$k?>" value="<?=$v?>"/><a href="?plus=<?=$k?>">+</a><a href="?minus=<?=$k?>">-</a><br />
<?endforeach;?>
<input type="submit" name="senden" value="abschicken!"/>
</form> |
Zuletzt bearbeitet von am Mo 15.05.2006 12:03, insgesamt 1-mal bearbeitet
|
|
|
|
|
Nimroy
Community Manager Threadersteller
Dabei seit: 26.05.2004
Ort: zwischen Köln und D'dorf
Alter: 46
Geschlecht:
|
Verfasst Mo 15.05.2006 12:01
Titel
|
|
|
Session vorher killen? Vor was? vor der Verarbeitung bei Abschicken der Daten (muss mir das später mal in aller Ruhe angucken, vieleicht erschließt sich mir das auch von selbst).
Hab beim überfliegen gesehen, dass du unset() benutzt. Räumt die Funktion jetzt die Array-Indizes auf oder nicht? Oder hab ich dann Löcher bei den Indizes?
|
|
|
|
|
tacker
Dabei seit: 22.03.2002
Ort: Trondheim, Norwegen
Alter: 43
Geschlecht:
|
Verfasst Mo 15.05.2006 12:03
Titel
|
|
|
Nimroy hat geschrieben: | Session vorher killen? Vor was? |
Bevor du mein Script benutzt. Mein $_SESSION['fields'] ist ein Array, dein ein Int. Da gäbe es dann ein Konflikt, wenn Du mit den alten Session-Daten auf mein Script zugreifst.
Nimroy hat geschrieben: | Hab beim überfliegen gesehen, dass du unset() benutzt. Räumt die Funktion jetzt die Array-Indizes auf oder nicht? Oder hab ich dann Löcher bei den Indizes? |
Nein, die Löcher bleiben. Das ist aber auch explizit so beabsichtigt, damit die Zuordnung der Werte und Aktionen zu den Feldern passt.
|
|
|
|
|
Account gelöscht
Ort: -
Alter: -
|
Verfasst Mo 15.05.2006 12:04
Titel
|
|
|
Quatsch machs wie der Schinken. Lücken im Index sind immer wirr... manmanman.
|
|
|
|
|
Nimroy
Community Manager Threadersteller
Dabei seit: 26.05.2004
Ort: zwischen Köln und D'dorf
Alter: 46
Geschlecht:
|
Verfasst Mo 15.05.2006 12:10
Titel
|
|
|
XSchinkenX hat geschrieben: | Quatsch machs wie der Schinken. Lücken im Index sind immer wirr... manmanman. |
Ich weiß ja nicht, was der Schinken macht, aber ich splitte den Array an der zu löschenden Stelle in zwei Arrays, lösch das Element (welches ja jetzt das erste ist) und merge die dann wieder.
BTW: Schön, dass man dich mit wirrem Code immer nochbei der Ehre gepackt und hinterm Ofen hervorgezogen bekommt.
Zuletzt bearbeitet von Nimroy am Mo 15.05.2006 12:13, insgesamt 1-mal bearbeitet
|
|
|
|
|
|
|
|
Ähnliche Themen |
formular ergebnis aus iframe heraus auf Hauptseite anzeigen
UCR / GCR aus Corel heraus - und aus pdf-Daten
HTTP-Ausruf aus PHP heraus
window.open() aus flash heraus
AS3 - MovieClips aus Klassen heraus ansprechen
Link aus PDF heraus in neuem Fenster?
|
|