mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Di 19.03.2024 05:05 Benutzername: Passwort: Auto-Login

Thema: [PHP] Formular aus sich selbst heraus aufrufen vom 27.04.2006


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> [PHP] Formular aus sich selbst heraus aufrufen
Seite: Zurück  1, 2, 3, 4, 5
Autor Nachricht
tacker

Dabei seit: 22.03.2002
Ort: Trondheim, Norwegen
Alter: 43
Geschlecht: Männlich
Verfasst Mo 15.05.2006 10:07
Titel

Antworten mit Zitat Zum Seitenanfang

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?
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Nimroy
Community Manager
Threadersteller

Dabei seit: 26.05.2004
Ort: zwischen Köln und D'dorf
Alter: 45
Geschlecht: Männlich
Verfasst Mo 15.05.2006 10:18
Titel

Antworten mit Zitat Zum Seitenanfang

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.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
tacker

Dabei seit: 22.03.2002
Ort: Trondheim, Norwegen
Alter: 43
Geschlecht: Männlich
Verfasst Mo 15.05.2006 10:56
Titel

Antworten mit Zitat Zum Seitenanfang

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 10:57, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Account gelöscht


Ort: -
Alter: -
Verfasst Mo 15.05.2006 11:00
Titel

Antworten mit Zitat Zum Seitenanfang

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 11:03, insgesamt 1-mal bearbeitet
 
Nimroy
Community Manager
Threadersteller

Dabei seit: 26.05.2004
Ort: zwischen Köln und D'dorf
Alter: 45
Geschlecht: Männlich
Verfasst Mo 15.05.2006 11:01
Titel

Antworten mit Zitat Zum Seitenanfang

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?
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
tacker

Dabei seit: 22.03.2002
Ort: Trondheim, Norwegen
Alter: 43
Geschlecht: Männlich
Verfasst Mo 15.05.2006 11:03
Titel

Antworten mit Zitat Zum Seitenanfang

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.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Account gelöscht


Ort: -
Alter: -
Verfasst Mo 15.05.2006 11:04
Titel

Antworten mit Zitat Zum Seitenanfang

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: 45
Geschlecht: Männlich
Verfasst Mo 15.05.2006 11:10
Titel

Antworten mit Zitat Zum Seitenanfang

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. *zwinker*


Zuletzt bearbeitet von Nimroy am Mo 15.05.2006 11:13, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ähnliche Themen formular ergebnis aus iframe heraus auf Hauptseite anzeigen
HTTP-Ausruf aus PHP heraus
UCR / GCR aus Corel heraus - und aus pdf-Daten
window.open() aus flash heraus
AS3 - MovieClips aus Klassen heraus ansprechen
Link aus PDF heraus in neuem Fenster?
Neues Thema eröffnen   Neue Antwort erstellen Seite: Zurück  1, 2, 3, 4, 5
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.