Formular dynamisch erweitern.


mrbullisch

Grünschnabel
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
 

Quaese

Moderator
Moderator
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
 

janssend

Grünschnabel
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
 

Sven Mintel

Mitglied
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.
 

EnzoGo

Mitglied
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
 

Sven Mintel

Mitglied
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>';
?>
 

EnzoGo

Mitglied
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
 

EnzoGo

Mitglied
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
 

kuddeldaddeldu

Erfahrenes Mitglied
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
 

EnzoGo

Mitglied
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
 

kuddeldaddeldu

Erfahrenes Mitglied
Hi,

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

nein, denn $_SESSION['mitarbeiterservice'] ist doch ein Array. Und ein ganzes Array kann man nicht einfach mit echo ausgeben. Du müsstest das schon mit [phpf]foreach[/phpf] durchlaufen, um an die einzelnen Elemente zu kommen.

LG
 

EnzoGo

Mitglied
Danke schonmal für die Hilfe
Bin Änfänger und beschäftige mich nun seit 6 Wochen mit SQL, PHP und JavaScript.
Mache es halt learning by doing.

Wie muss ich das schreiben`?
PHP:
$var=$_SESSION['mitarbeiterservice'];
$var=$mitarbeiterservice;

foreach ( $var as $value )
{
  echo 'Wert: ' . $value . '<br>' . "\n";
}

Wie ist es richtig? Sorry

Und wo wir gerade dabei sind ... wie schreibe ich dann die einzelnen Werte in eine SQL Datenbank?
mfg Enzo
 

kuddeldaddeldu

Erfahrenes Mitglied
Hi,

warum füllst Du erst $var mit diesem Array aus der Session und überschreibst das dann gleich wieder mit der Variablen $mitarbeiterservice, die vermutlich gar nicht definiert ist? Wozu brauchst Du überhaupt die zusätzliche Variable?

PHP:
foreach ($_SESSION['mitarbeiterservice'] as $value) {
  echo 'Wert: ' . $value . '<br>' . "\n";
}


EnzoGo hat gesagt.:
Bin Änfänger und beschäftige mich nun seit 6 Wochen mit SQL, PHP und JavaScript.
Mache es halt learning by doing.

Dann schau Dir doch mal das Quakenet-Tutorial an. Das ist sehr ausführlich, für Anfänger gut geeignet und beinhaltet auch einen Teil über MySQL.

LG
 

EnzoGo

Mitglied
Hi,

warum füllst Du erst $var mit diesem Array aus der Session und überschreibst das dann gleich wieder mit der Variablen $mitarbeiterservice, die vermutlich gar nicht definiert ist? Wozu brauchst Du überhaupt die zusätzliche Variable?

Es war als entweder oder von mir gemeint
Also entweder $var=$_SESSION['mitarbeiterservice'] oder $var=$mitarbeiterservice
... von daher wohl ein Missverständis.

Bekommt mit deinem Post trotzdem nen Fehler :(

Warning: Invalid argument supplied for foreach() in
mfg Enzo
 

kuddeldaddeldu

Erfahrenes Mitglied
Hi,

Du weisst aber, dass Du die Session auf jeder Seite starten musst, um darauf zugreifen zu können?

Was ergibt var_dump($_SESSION)?

LG
 

EnzoGo

Mitglied
Ich muss dazu sagen, dass ich schon vorher 1 Session geöffnet habe und dort Werte eintrage. Liegt es evtl daran?

Daher habe ich auch auf ein wiederholtes Session_Start () verzichtet.

Fehler bringt er mir nun diese hier
Notice: A session had already been started - ignoring session_start()

Warning: Invalid argument supplied for foreach()

Der var_dump($_SESSION) liefert mir neben den anderen Session-Werten die ich vorher angebe noch diesen Wert:
array(16) { ["mitarbeiterservice"]=> NULL

Obwohl ich einen Wert in dem Array mitarbeiterservice eingetragen habe.

Ich glaube das ist alles ziemlich verzwickt hier :(

mfg Enzo
 

kuddeldaddeldu

Erfahrenes Mitglied
Ich muss dazu sagen, dass ich schon vorher 1 Session geöffnet habe und dort Werte eintrage. Liegt es evtl daran?

Daher habe ich auch auf ein wiederholtes Session_Start () verzichtet.

Fehler bringt er mir nun diese hier
Notice: A session had already been started - ignoring session_start()

Du kannst natürlich nur eine Session pro Scriptinstanz starten.

Der var_dump($_SESSION) liefert mir neben den anderen Session-Werten die ich vorher angebe noch diesen Wert:
array(16) { ["mitarbeiterservice"]=> NULL

Obwohl ich einen Wert in dem Array mitarbeiterservice eingetragen habe.

Das müsstest Du erstmal zeigen.

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

Was steht an der Stelle denn in $mitarbeiterservice? Wo kommt diese Variable her? Du verlässt Dich hier aber nicht auf register_globals?

Ich glaube, Du solltest wirklich erstmal das Quakenet-Tutorial machen.

LG
 

EnzoGo

Mitglied
Danke kuddeldaddeldu,

es lag an was ganz anderen :(
Ich habe ein bedingtes Absenden in dem Formular, welches die Session erst öffnet, wenn gewisse Bedingungen erfüllt wurden sind. Daher ist die Session nicht angekommen. Die Ausgabe des Arrays habe ich allerding vorher nicht gekannt ... wieder etwas gelernt. Das Quake ist recht gut, hätte mir aber auch nicht weiter helfen können. Jetzt bin ich richtig glücklich und kann nun weiter machen .... man lernt dazu

Danke dir .... das nächste Problem wird sicherlich schon auf mich warten

mfg Enzo
 

EnzoGo

Mitglied
Jetzt hänge ich schon wieder :(

Die Anforderungen werden immer komplexer .... ich erstelle jetzt schon einen clone in einen clone .... das klappt auch wunderbar.
Nur wie muss ich jetzt in meinem Formular meine Formularfelder bennenen, da die jetzt zum dreidimensionalen Array werden.

Kann mir da villeicht jemand helfen .... stehe da mal wieder auf dem Schlauch


mfg Enzo
 

Sven Mintel

Mitglied
Moin,

das wäre leichter zu Sagen, wenn man wüsste, in welcher Form du die Daten später benötigst(eine Beschreibung des Ergebnisarrays in PHP sollte da ausreichen)
 

Neue Beiträge