Doppelte Datensätze mit Internet Explorer
Roman
- asp.net
0 Florian Bluhm0 Roman
Habe ein seltsames Problem:
Habe eine ASP-Anwendung mit mehreren Seiten/Dateien auf dem Brinkster Webserver laufen. In diesen Skripts gibt es einige Formulare, welche Daten in eine Access-DB speichern. Speichere ich einen Datensatz über ein Forumular ab, kann es vorkommen, dass der gleiche Datensatz bloß mit inkrementierter ID nochmals (wohl gemerkt erst nach einiger Zeit wenn ich auf ganz anderen Seiten bin) in die Datenbank geschrieben wird.
Auf meinem lokalen Webserver und mit anderen Browsern passiert dies nicht.
Schließe ich den IE nachdem ich ein Formular abgeschickt habe tritt der Fehler auch nicht auf.
Hallo Roman.
Poste mir doch mal den Quelltext an der Stelle von der aus du das Formular abschickst.
Meine Vermutung:
Im Internet-Explorer wird das Formular zweimal abgeschickt (z.B. durch das Automatische Submit eines Submitbuttons und durch einen nachfolgenden Javascript-Befehl wie document.form.submit();)
MfG
Florian
<%@ Language=VBScript%>
<% Response.Expires %>
<div style="display: none;"><div>
<html>
<head>
<title>Beratung erstellen</title>
</head>
<body>
</div></div>
<!-- Kopfdatei einfügen -->
<!-- #include file="head.htm" -->
<table align = "center" border = "8" bgcolor="#FFFFBB" cellpadding="10" width = "400"><tr>
<%
x = Request.QueryString("text")
Beratung_Text = replace(x,"'","''")
if Beratung_Text = "" then %>
<td>
<form method="get" action="erstellen.asp">
<p>Name der Beratung:<br>
<input name="text" type="text" size="60" maxlength="80">
</p><p>Zusatzinformationen zu dieser Beratung<br>
<textarea name="Beratungen_Zusatzinfo" cols="80" rows="4"></textarea>
</p>
<input type="submit" value=" Absenden ">
<input type="reset" value=" Abbrechen">
</td></form>
<% else %>
<!-- Verbindung öffnen -->
<!-- #include virtual="/dersisko/initConnection.asp" -->
<td align = "center">
<%
set rst = Server.CreateObject("ADODB.Recordset")
sql = "SELECT MAX(Beratungen_ID) AS Max_ID FROM Beratungen"
rst.Open sql, objConn
If rst("Max_ID") Then
newID = rst("Max_ID") + 1
Else
newID = 1
End If
x = Request.QueryString("Beratungen_Zusatzinfo")
Beratung_Zusatzinfo = replace(x,"'","''")
sqlString = "INSERT INTO Beratungen (Beratungen_ID,Beratungen_Text," & _
"Beratungen_Zusatzinfo)" & _
"VALUES ('" & newID & "','" & Beratung_Text & "','" & Beratung_Zusatzinfo & "')"
objConn.execute(sqlString)
rst.Close %>
<input type="button" value="Beratung Bearbeiten"
onClick="self.location.href='../Beratung_bearbeiten/Bearbeitungsart_auswaehlen.asp?<%_
Response.Write "Beratungen_ID=" & newID%>'"></td>
<!-- Verbindung schließen -->
<!-- #include virtual="/dersisko/closeConnection.asp" -->
<% end if %>
</tr></table>
<br><hr><p align = "center">
<a href="../default.asp" style = "font-size:14pt">zurück</a></p>
</body>
</html>
Mach mal folgende Änderungen:
set rst = Server.CreateObject("ADODB.Recordset")
x = Request.QueryString("Beratungen_Zusatzinfo")
Beratung_Zusatzinfo = replace(x,"'","''")
sqlString = "INSERT INTO Beratungen (Beratungen_Text, Beratungen_Zusatzinfo) VALUES ('" & Beratung_Text & "','" & Beratung_Zusatzinfo & "')"
rst.Open sqlstring, objConn
rst.Close
Und stelle das Id Feld in der Datenbank auf Auto-Nummer mit Inkrement 1 um. Dann musst du nicht immer die ID-Ermitteln und ich glaube es könnte auch das Problem lösen, bin mir aber nicht ganz sicher. Schreib mir mal deine Ergebnisse oder Einwände.
MfG
Florian
Anscheinend löst es das Problem. Aber warum? Wieso funzt es bei anderen Browsern? Das ist doch Schwachsinn.
Ich muss nur die Datentypen in der Access-Datenbank ändern. Das Skript kann so bleiben. Es funktioniert auch so.
Seltsam seltsam.