Formularprobleme
Bettina
- asp.net
0 Eeye0 Markus Thomas0 Philipp Hasenfratz0 Saadat
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>
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
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
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
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