molily: Liste dynamisch zusammenstellen

Beitrag lesen

Hallo,

ich bin JavaScript Einsteiger und habe jetzt schön länger ein Problem für das ich keine Lösung finden kann. Die unten beschriebene Seite soll zur Userverwaltung dienen. Hier soll man die Userkennung und den Usernamen eingeben. Der eingegebene Name soll auf der gleichen Seite in einer Tabelle aufgelistet werden. 5 User zur Berechtigung sollen das Limit sein. Jetzt das Problem - jedes mal wenn ich einen neuen - sprich 2. User eingebe, verschwindet der 1. User. Es soll also eine Liste aus den max 5 User dargestellt werden
und dann per Submit an ein PHP Skript weitergegeben werden. Wie bekomme ich die Liste hin .. kann mir jemand helfen?

Du hast anscheinend den Zusammenhang von PHP und JavaScript nicht verstanden (oder du hast den wichtigsten Teil deines Codes nicht gepostet).
Nachdem die User-Daten eingetragen wurden und der Button gedrückt wird, wird addNewUser() augeführt. Diese Funktion überträgt die Daten vom einen Formular in ein anderes. Direkt darauf sendet es das zweite Formular ab, woraufhin genau ein Datensatz per POST an das Script übergeben wird. Da frage ich mich, wieso du überhaupt zwei Formulare brauchst.

Vorher speicherst du die Daten in einem JavaScript-Array. Aber welchen Sinn hat das? Dieser Array wird bei jedem Aufrufen bzw. Absenden der Seite zurückgesetzt:

var newUserList = new Array(5);

Auch deine Zählvariable wird niemals über 0 kommen:

if(count<=4)
  {
   newUserList[count] = new Array();
   newUserList[count][0] = userNumber;
   newUserList[count][1] = userName;

newUserList wird immer leer sein, wenn dieses ausgeführt wird.

document.userForm.pnummer.value = newUserList[count][0];
   document.userForm.name.value    = newUserList[count][1];
   document.userForm.submit();

An dieser Stelle wird das Formular abgesendet und die bisherige Seite mitsamt aller JavaScript-Variablen verschwindet.

count++;

Diese Variable geht durch das Absenden sowieso verloren.

<td><input type="text" name="newNumber" value="" size="10" maxlength="7" id="newNumber">&nbsp;&nbsp;&nbsp;&nbsp;
           <input type="text" name="newName"   value="" size="25" maxlength="25" id="newName">
           <button name="b_hinzufuegen" type="button" onclick="addNewUser()" style="cursor:hand; padding:0px; border-style:none; background-color:#FFFFFF;"><img src="/public/icons/application_buttons/b_hinzufuegen.gif" border="0" alt="hinzufuegen"></button></td>

Wie gesagt, wozu zwei Formulare?

<tr></tr>
     <form name="userForm" action="<?php $PHP_SELF ?>" method="POST">

Du kannst kein form-Element einfach so in einem table-Element unterbringen. In table dürfen nur tr-Elemente (und thead, tbody und tfoot) vorkommen. Entweder du lässt das form-Element die Tabelle umschließen (<form><table>...</table></form>) oder das Formular darf nur eine Zeile umfassen (<table><tr><td><form>...</form></td></tr></table>). Wie gesagt sollte sich diese Frage erübrigen.

<form name="userForm" action="<?php $PHP_SELF ?>" method="POST">
      <input type="hidden" name=pnummer value="">
      <input type="hidden" name=name value="">
     <?php

/*if($pnummer) {
          $smbUsersClass->addNewSmbUser($pnummer, $name);
         }*/
     ?>
      <tr>

<p style="background-color:"><b style="color:red">&nbsp;<?=  $pnummer ?></b></p></td><td width="3px"></td><td class="TabHellgrau"><p><b style="color:red">&nbsp;<?= $name ?></b></p>
            </td>
            <td width="3px"></td>
         </tr>

Wieso soll hier auch mehr als ein Benutzer angezeigt werden? Es werden lediglich die POST-Parameter $pnummer und $name ausgegeben. Das ist also *ein* Datensatz.
Im Übrigen solltest du mit $_POST arbeiten.

Wieso willst du JavaScript für diese Aufgabe heranziehen? Wenn ich dich richtig verstehe, kannst mit einem simplen Formular arbeiten, das das Eingeben der beiden Werte erlaubt. Wenn das Script dann beim Absenden Daten bekommt, wird der Benutzer hinzugefügt (aber nur, falls noch nicht fünf Benutzer existieren). Gleichzeitig wird per PHP eine Liste der bereits angelegten Benutzer ausgegeben.
Oder sollen insgesamt mehr als fünf Benutzer existieren und es geht nur darum, mit einem mal nur fünf Benutzer anlegen zu können? Dann erstelle ein Formular, in das man fünf Datensätze eingeben kann. Wenn du die Formularfelder alle name="pnummer[]" und name="name[]" nennst, hast du im PHP-Script in $_POST['pnummer'] bzw. $_POST['name'] jeweils einen Array mit den übergebenen Nummern/Benutzernamen.

Mit JavaScript lässt sich das Ganze natürlich noch verkomplizieren, aber wieso sollte man?

Mathias