Formular dynamisch erweitern.

Hallo,

das Script funktioniert soweit ganz gut, nur habe ich noch das Problem, dass wenn ich in diesem div-Tag noch ein input-Feld hinzufüge, welches dann geklont wird, dann wird
der Inhalt des zweiten Felds nicht gelöscht.

Habt ihr hierzu vielleicht noch eine Lösung ?

Gruß
Bulli
 
Hi,

das Script muss dahingehend angepasst werden, dass es alle input-Elemente des duplizierten Knotens durchläuft. Trifft es auf ein Textfeld, wird sein Inhalt entfernt.

Beispiel:
Code:
function clone_this(objButton){
  if(objButton.parentNode){
    tmpNode=objButton.parentNode.cloneNode(true);
    target=objButton.parentNode.parentNode;
    arrInput = tmpNode.getElementsByTagName("input");

    for(var i=0; i<arrInput.length; i++){
      if(arrInput[i].type=='text'){
      	arrInput[i].value='';
      }
    }

    target.appendChild(tmpNode);
    objButton.value="entfernen";
    objButton.onclick=new Function('f1','this.parentNode.parentNode.removeChild(this.parentNode)');
  }
}
Vielleicht hift dir das weiter.

Ciao
Quaese
 
Hallo,

ich habe das Beispiel aus Beitrag 31 implementiert. Das hinzufügen usw. klappt problemlos. Allerdings überträgt Firefox 3 nicht das gesamte Array, sondern immer nur das erste Element (das Eingabefeld was beim Laden der Seite vorhanden war). Hab die Ausgabe der übertragenen Formulardaten mit <?php print_r($_POST) ?> gemacht. IE zeigt alle Eingaben korrekt an - der Firefox nur das erste Element. Kennt jemand eine Lösung?

Gruß,
janssend
 
Moin,

Allerdings überträgt Firefox 3 nicht das gesamte Array, sondern immer nur das erste Element (das Eingabefeld was beim Laden der Seite vorhanden war). Hab die Ausgabe der übertragenen Formulardaten mit <?php print_r($_POST) ?> gemacht. IE zeigt alle Eingaben korrekt an - der Firefox nur das erste Element.

Ich habe das soeben probiert, bei mir werden in FF3 alle Felder übermittelt. Das Problem muss in deinem Code liegen und ist ohne dessen Kenntnis nicht zu lösen.
 
Mal wieder hoch holen

Also erstmal ein Lob für das Script.

Ich konnte damit mein Problem fast lösen ... jetzt habe ich eine Frage zu den Arrays.
Hier mal eine gekürzte Form meinem Scriptes.

HTML:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Leistungserfassung</title>
<link rel="stylesheet" type="text/css" href="formstyle.css">
<script type="text/javascript">
<!--
function clone_this(objButton)
{
if(objButton.parentNode)
    {
    tmpNode=objButton.parentNode.cloneNode(true);
    target=objButton.parentNode.parentNode;
    target.appendChild(tmpNode);
    for(j=0;j<target.lastChild.childNodes.length;++j)
        {
        if(target.lastChild.childNodes[j].type=='text')
            {
            target.lastChild.childNodes[j].value='';
            break;
            }
        }
    objButton.value="-";
    objButton.onclick=new Function('f1','this.parentNode.parentNode.removeChild(this.parentNode)');
    }
}

</script>
</head>

<body>
<form action="datenbank.php"  method="post">


  <div>
    <div>

     <table width="850" align="center" border="0"  class="table">
     <tr>
       <td>
       <select size="1" size="20" name="lohnart[]">
       <option value=
                <?php
                echo "<select size='1' name='lohnart'>";
                $ergebnis = mysql_query("SELECT lohnart  FROM inhalt_lohnart");
                while ($datensatz = mysql_fetch_array($ergebnis))
                    {
                        echo "<option value=\"" . $datensatz['lohnart'] . "\">";
                        echo $datensatz['lohnart'];
                        echo "</option>\n";
                    }
                echo "</select>\n";
                ?>

                </select>
                </td>
                <td>
             <input type="text" class="inputFieldident" name="qm_meldung[]" value="">
             </td>
             <td>

           <textarea class="inputFieldleistung" name="bemerkung[]" rows="2"             
             value="<?  PHP echo $_POST['bemerkung']; ?>">
            </textarea>
            </td>

            </tr>
            <tr>
             <td> align="center" colspan="40"><hr></td>
             </tr>
             </table>

             <input align="right" type="button" class="button" align="right" value="+"  onclick="clone_this(this)">
    </div>

  </div>

  <table width="850"  border="0"  class="table">
  <tr> <td width="850" align="right">
  <input name="submit" type="submit" value="Weiter" class="button" </td></tr></table>


</form>



</body>
</html>

Nun zu meiner Frage

Wie bekomme ich die Variablen (lohnart[] usw.) richtig an datenbank.php übertragen und kann sie dort sichtbar machen. Stelle mich da wohl nicht so clever an.

Vielen Dank für evtl. Hilfe
EnzoGo
 
Moin,

der Weg über den Namen der Formularfelder mit der eckigen Klammer ist schon der richtige, du hast dort allerdings etwas doppeltgemoppelt
PHP:
<select size="1" size="20" name="lohnart[]">
       <option value=
                <?php
                echo "<select size='1' name='lohnart'>";
                $ergebnis = mysql_query("SELECT lohnart  FROM inhalt_lohnart");
                while ($datensatz = mysql_fetch_array($ergebnis))
                    {
                        echo "<option value=\"" . $datensatz['lohnart'] . "\">";
                        echo $datensatz['lohnart'];
                        echo "</option>\n";
                    }
                echo "</select>\n";
                ?>

                </select>

Du erstellst dort ein <select> als value-Attribut einer <option>

Besser ginge es so:
PHP:
<select size="1" size="20" name="lohnart[]">
  <?php
    $ergebnis = mysql_query("SELECT lohnart  FROM inhalt_lohnart");
    while ($datensatz = mysql_fetch_array($ergebnis))
    {
      echo '<option value="' . $datensatz['lohnart'] . '">'.
           $datensatz['lohnart'].'</option>';
    }
  ?>
</select>

Dann hast du da noch diverse HTML-und PHP-Fehler, bspw.
HTML:
<td width="850" align="right">
  <input name="submit" type="submit" value="Weiter" class="button" </td>
HTML:
<td> align="center" colspan="40">
PHP:
<?  PHP echo $_POST['bemerkung']; ?>


Wenn du das alles korrigiert hast, werden die Formulardaten korekt übertragen.
Wie man sie ausgeben kann, hängt davon aus, wie du sie ausgeben willst, eine einfache Variante, um in der datenbank.php zu Prüfen, was überhaupt ankommt, wäre:
PHP:
<?php
  echo '<pre>'.print_r($_POST,true).'</pre>';
?>
 
Super .. ich danke dir
Das mit dem doppeltgemoppelt lag am kopieren. Habe das vorhergehende Eingabeformular kopiert, welches mit der Abfrage arbeitet ob alle Felder ausgefüllt sind und bei unvollständiger Eingabe die bereits getätigten EIngaben wieder einträgt ... daher.

Mitlerweile kommt das komplette Array in der datenbank.php an .. super danke
Habe nur noch bei den Auswahllisten ein leeres Value hinzugefügt.

Jetzt kann ich weiter machen :D

mfg EnzoGo
 
Vielleicht kann mir noch jemand einen Stoss geben.

Hier ist ja nun schon alles ziemlich beschrieben

Ich möchte jetzt mein array z.B. lohnart[ ] an eine Session übergeben?
Möchte die Arrays auf zwei Seiten zur Verfügung stellen, daher bietet sich hier Session an.
Wie mache ich das? Wenn die werte klar sind, welche im Array stehen, bekomme ich das ja hin ... aber durch die unbekannte Anzahl bin ich echt überfordert.
Ich habe schon den ganzen Tag im Netz gesucht, habe aber nicht raus finden können wie ich so eine Session zusammen bauen muss

Vielleicht kann mir ja hier jemand helfen

mfg Enzo
 
Hi,

Du kannst einfach das Array in die Session schreiben. Dabei brauchst Du Dich doch nicht darum zu kümmern, wie viele Elemente das hat.

PHP:
$_SESSION['lohnart'] = $lohnart;

LG
 
Und die Ausgabe müsste ja dann einfach mit
PHP:
<?PHP echo $_SESSION['mitarbeiterservice'];  ?>
erfolgen?

Klappt nämlich nicht :(

mfg Enzo

Hier mal meine Quellcode

HTML:
<form action="<?PHP echo $script; ?>"  method="post" name="leistungserfassung" target="_blank" onsubmit="return chkFormular()">
<html>
<head><title>bla</title>
</head>

<body class="body">
     <table width="90%" align="center" border="0"  class="table" cellpadding="1" cellspacing="1"><tr>
           <td class="abschnitt"> Service</td>
           </tr>
           <tr>
           <td width="20%">Mitarbeiter:</td>
           <td width="5%">Zeit:</td>
           <td width="11%">Identnummer:</td>
           <td width="7%">AVO:</td>
           <td width="5%">Stk.:</td>
           <td width="21%">Lohnart:</td>
           <td width="9%">QM-Meldung: </td>
           <td width="25%">Bemerkung</td>
           </tr>
           </table>
           <table width="90%" align="center" border="0"  class="table" cellpadding="1" cellspacing="1"><tr>
                <select class="inputFieldname" name="mitarbeiterservice[]"   >
	            <option>
                <?php
                $ergebnis = mysql_query("SELECT * FROM personal WHERE schichtart ='$schichttyp'");
                while ($datensatz = mysql_fetch_array($ergebnis))
                    {
                        echo '<option value="' . $datensatz['name'] . '">'.
                        $datensatz['name'].'</option>';
                    }
                ?>
                </option>
                </select>
<input  name="submit" type="submit" value="Weiter" class="button" ></form>

</body>
</html>

PHP:
<?php

$_SESSION['mitarbeiterservice'] = $mitarbeiterservice;

echo "<a href=Datenbank.php>Ausgabe</a>";
?>

Die Datenbank.php
PHP:
<?PHP

echo $_SESSION['mitarbeiterservice'];?

>

Vielleicht fällt es einem ja auf

mfg Enzo
 
Zurück