Bettina: Formularprobleme

Hi !

Ich ich muss für ein Projekt eine Website mit Datenbankanbindung erstellen. Ich arbeite hauptsächlich mit ASP in Verbindung mit VBScript.
Ich will nun eine Kontrolle einbauen, dass bevor ein Formular abgeschickt wird, kontrolliert wird ob ein CHECKBOX Feld gwählt worde.
Die Kontrolle erfolgt mit JavaScript. Da es sich um eine dynamisch erstellte Tabelle handelt, hat das zu kontrolierde Feld immer den gleichen Namen.
Leider kontrolliert JavaScript, immer nur das erste Feld und nicht alle !

Kennt jemand eine Lösung ????

<%@ LANGUAGE= "VBScript" %>
<HTML>
<head>
<TITLE>Ansicht der Datenbank SG-Geräte</TITLE>
<link rel="stylesheet" type="text/css" href="../css/standard.css">
<style type="text/css">
</style>
<script type="text/javascript">
<!--
function chkFormular()
{

if(document.Formular.Nummer[0].checked == false )  {
   alert("Bitte wählen Sie ein Gerät zum Löschen aus!");
    document.Formular.Nummer[0].focus();
   return false;}
}
//-->

</script>
</head>
<BODY>

<% SET DB = Server.CreateObject("ADODB.Connection")
DB.Open("geraetedaten")
SQLQuery="Select Nummer,  Geraet , Hersteller , Typ , Tragfähigkeit, Baujahr , Bemerkungen  From Geraete"
SQLQuery= SQLQuery + " Where Geraet Like '"+ Request.Form("Geraet") + "%'"
SET rs = DB.Execute(SQLQuery)
if rs.eof THEN  %>
<br>
<b>Es sind  keine  <%=Request.Form("Geraet")%> in der Datenbank vorhanden  vorhanden.</b>
<%else%>
<br><b>Folgende Datensätze sind in der Datenbank vorhanden:</b><br>
<br>
<table>
<tr>
<td align=center bgcolor="#FF9900"><b>Nummer</b>
<td align=center bgcolor="#FF9900"><b>Typ</b>
<td align=center bgcolor="#FF9900"><b>Baujahr</b>
<td align=center bgcolor="#FF9900"><b>Hersteller</b>
<td align=center bgcolor="#FF9900"><b>Tragfähigkeit</b>
<td align=center bgcolor="#FF9900"><b>Bemerkungen</b>
<td align=center bgcolor="#FF9900"><b>Löschen </b>
</tr>
<% do while not rs.eof  %>
<form  name="Formular" method="get" action="loeschen3.asp" onSubmit="return chkFormular()">
<tr>
<td align=center bgcolor="#FFCC66"><b><% = rs("Nummer")  %></b> </td>
<td align=center bgcolor="#FFCC66"><b><% = rs("Typ")     %> </b></td>
<td align=center bgcolor="#FFCC66"><b><% = rs("Baujahr") %> </b></td>
<td align=center bgcolor="#FFCC66"><b><% = rs("Hersteller")  %></b> </td>
<td align=center bgcolor="#FFCC66"><b><% = rs("Tragfähigkeit")  %></b> </td>
<td align=center bgcolor="#FFCC66"><b><% = rs("Bemerkungen")     %> </b></td>

$$$$$$$$$$ Dieses Feld soll kontrolliert werden: $$$$$$$$

<td align=center bgcolor="#FFCC66"><input type="checkbox" name="Nummer" value="<% = rs("Nummer")  %>"></center>
</tr>
<% rs.movenext %>
<% loop        %>
</table>
<% rs.close %>
<% DB.Close %>
<p><input type=submit value="Daten löschen">

<p><font face="Arial"><a href="../index.htm">zurück zur Startseite</a><br>
<p><font face="Arial"><a href="loeschen1.htm">zurück zur Auswahl</a></p>
<p><br>
</p>
</body>
</html>

  1. Hi

    also wenn ich das richtig verstanden habe, schreibst du anhnd deiner DB Abfrage dynmisch eine Tabelle in die Seite und willst dann per JS sämtliche Felder "Nummer" abprüfen. Korrekt?

    Aber in deinem JS Block prüfst du immer nur eins ab, und zwar das erste (Nummer[0]): if(document.Formular.Nummer[0].checked == false )
    Du bräuchtest also auch hier eine Schleife, um alle Felder abzuprüfen. Da du aber vorher ja nicht weisst wieviel es denn sind, musst du vermutlich die JavaScript-Schliefe zum abprüfen ebenfalls dynamisch per VB-Script in die seite basteln.

    Hoffe das passt soweit, have fun, Eeye

  2. Hallo again!

    Als erstes zu dem unten beschriebenen Problem ist mir nichts aufgefallen, was das verursachen könnte.

    Nun zu diesem:

    Du prüfst natürlich auch nur das erste Element des Arrays.
    length gibt dir die Länge eines Arrays. Folglich:

    for(var i=0;i<document.Formular.Nummer.length;i++)
    {
      if(document.Formular.Nummer[i] == false)
      {
        ....
      }
    }

    HTH Markus

  3. Hallo Bettina

    1. Mit jedem Record hast du ein neues Formular
    2. Mit jedem Record hast du den selben Namen für die Checkbox

    das lässt folgende Lösungen zu:

    1. Du machst nur ein Formular, worin alle checkboxen andere (unique=eindeutige) Namen haben,
    2. Du überprüfst einfach jedes Formular auf checkboxen namens "Nummer", existiert ein solches und ist es aktiviert, ist chkFormular OK. (so musst du auch nichts in den VBScript-Teilen umprogrammieren)

    ich würde letztere Lösung vorschlagen, das JS dazu:

    function chkFormular()
    {
       for (i=0; i<document.forms.length; i++)
       {
          for (j=0; j<document.forms[i].elements.length; j++)
          {
             if (document.forms[i].elements[j].name == "Nummer")
             {
                if (document.forms[i].elements[j].checked==true)
                {
                   alert, fokus und return false...
                }
             }
          }
       }
    }

    Hoffe, dass dir das etwas Hilft und mein Beispiel irgenwie taugt

    Gruss

    Philipp

  4. Hallo Bettina!

    Hier ein Lösungsvorschlag für Dein Schript:

    -------------------------------------------------------------------

    <%@ LANGUAGE= "VBScript" %>
    <HTML>
    <head>
    <TITLE>Ansicht der Datenbank SG-Geräte</TITLE>
    <link rel="stylesheet" type="text/css" href="../css/standard.css">
    <style type="text/css">
    </style>
    </head>
    <BODY>

    <%
    Dim Data_Array, Data_Rows, LfdNr

    LfdNr = 0

    SET DB = Server.CreateObject("ADODB.Connection")
    DB.Open("geraetedaten")
    SQLQuery="Select Nummer,  Geraet , Hersteller , Typ , Tragfähigkeit, Baujahr , Bemerkungen  From Geraete"
    SQLQuery= SQLQuery + " Where Geraet Like '"+ Request.Form("Geraet") + "%'"
    SET rs = DB.Execute(SQLQuery)

    If Not rs.EOF Then

    Data_Array=rs.getrows
      Data_Rows = ubound(Data_Array,2)

    End if

    if rs.eof THEN  %>
    <br>
    <b>Es sind  keine  <%=Request.Form("Geraet")%> in der Datenbank vorhanden  vorhanden.</b>
    <%else%>
    <br><b>Folgende Datensätze sind in der Datenbank vorhanden:</b><br>
    <br>
    <table>
    <tr>
    <td align=center bgcolor="#FF9900"><b>Nummer</b>
    <td align=center bgcolor="#FF9900"><b>Typ</b>
    <td align=center bgcolor="#FF9900"><b>Baujahr</b>
    <td align=center bgcolor="#FF9900"><b>Hersteller</b>
    <td align=center bgcolor="#FF9900"><b>Tragfähigkeit</b>
    <td align=center bgcolor="#FF9900"><b>Bemerkungen</b>
    <td align=center bgcolor="#FF9900"><b>Löschen </b>
    </tr>
    <% do while not rs.eof  %>
    <form  name="Formular" method="get" action="loeschen3.asp" onSubmit="return chkFormular()">
    <tr>
    <td align=center bgcolor="#FFCC66"><b><% = rs("Nummer")  %></b> </td>
    <td align=center bgcolor="#FFCC66"><b><% = rs("Typ")     %> </b></td>
    <td align=center bgcolor="#FFCC66"><b><% = rs("Baujahr") %> </b></td>
    <td align=center bgcolor="#FFCC66"><b><% = rs("Hersteller")  %></b> </td>
    <td align=center bgcolor="#FFCC66"><b><% = rs("Tragfähigkeit")  %></b> </td>
    <td align=center bgcolor="#FFCC66"><b><% = rs("Bemerkungen")     %> </b></td>

    $$$$$$$$$$ Dieses Feld soll kontrolliert werden: $$$$$$$$

    <td align=center bgcolor="#FFCC66"><input type="checkbox" name="Nummer<%= LfdNr %>" value="<% = rs("Nummer")  %>"></center>
    </tr>
    <% LfdNr = LfdNr + 1 %>
    <% rs.movenext %>
    <% loop        %>
    </table>
    <% rs.close %>
    <% DB.Close %>
    <p><input type=submit value="Daten löschen">

    <p><font face="Arial"><a href="../index.htm">zurück zur Startseite</a><br>
    <p><font face="Arial"><a href="loeschen1.htm">zurück zur Auswahl</a></p>
    <p><br>
    </p>

    <script type="text/javascript">
    <!--
    function chkFormular( )
    {
     with( document.Formular )
      if( (
       <%
       For a = 0 To Data_Rows
        If (a = 0) Then
         Response.Write "Nummer" & a & ".checked" & vbCrLf
        Else
         Response.Write "|| Nummer" & a & ".checked" & vbCrLf
        End if
       Next
       %>
       )
       )
      {
       return( true );
      }
      else
      {
       alert( "\nBitte waehlen Sie mindestens einen Punkt aus" );

    return( false );
      }
    }
    //-->
    </script>

    </body>
    </html>

    -------------------------------------------------------------------

    Es sind nur geringfügige Erweiterungen, also leicht nachzuvollziehen, denke ich.

    Gruß

    Saadat