prüfen ob eingabefeld leer ist

sunflower84

Erfahrenes Mitglied
Hallo zusammen

Ich habe ein paar Eingabefelder. Wenn diese ausgefüllt sind werden sie in die Datenbank exportiert. Das ist auch alles kein Problem.
Ich würde jetzt gerne eine Meldung bringen wenn ein bestimmtes Eingabefeld nicht ausgefüllt wurde. Ich weiss das das mit einer if geht. Aber alle Versuche leider erfolglos.
Hier mein Quelltext wo die Daten exportiert werden:
<%
'Auslesen der Formularfelder
addProduct =TRIM( Request("Anmelden"))

productName =TRIM(Request( "productName"))
productPrice =TRIM(Request( "productPrice"))
productPicture =TRIM(Request( "productPicture"))
name =TRIM(Request( "name"))
vorname =TRIM(Request( "vorname"))

'Standardwerte zuweisen
IF productName= ""Then
productName= "?"
END IF
IF productPrice= ""THEN
productPrice= "?"
END IF
IF productPicture= ""THEN
productPicture="?"
END IF
IF vorname= ""Then
vorname= "?"
END IF
IF name= ""Then
name= "?"
END IF

'Öffnen der Datenbankverbindung
Set Con = Server.CreateObject( "ADODB.Connection")
Con.Open "accessDSN"
%>
<html>
<head><title>Manage Products</title></head>

<%
'Neues Produkt hinzufügen
IF addProduct <> "" THEN

sqlString = "INSERT INTO Products (product_name,product_price,product_picture,vorname,name) VALUES ('" & productName & "', '" & productPrice &"', '" & productPicture &"', '" &vorname &"', '" &name &"')"

Con.Execute sqlString
%>
<center>
<table width="600" cellpadding="4" cellspacing="0">
<tr>
<td>
Anmeldung erfolgreich
</td>
</tr>
</table>
</center>
<p></p>
<%
END IF
%>
<a href="addproduct.asp">back</a>
</body>
</html>

Ich denke das das nicht sehr schwer sein kann.
LG
Sunflower84
 
Hallo

Du musst einfach etwas sauberer programmieren, sorry, aber das ist so.

1. Sollte man bei Eingabefeldern (Text) unbedingt die Hochkomma ersetzen.
2. Wenn ein Feld aus einem Formular übergeben wird, sollte man auch den Request.Form() nehmen. Das ist alles in allem performanter. Beim Request sucht der Server in allen Requests vom Cookie bis zu den Servervariablen.
3. Datenbankverbindungen, die geöffnet worden sind, sollten wieder geschlossen werden und zwar so schnell wie möglich.
4. Definiert man Variablen, sollte man durch dim deklarieren.

Wenn Du jetzt Felder validierst, brauchst Du natürlich kein ? zu setzen, dann die Eingabe wird erzwungen. Wenn Du in Access die Leere Zeichenfolge auf "ja", ist auch die Eingabe auf nein, wird beim Insert von Textfeldern auch keine Eingabe erzwungen.

Zur Feldüberprüfung ist es einfacher, Du setzt das Formular mit auf die Seite, wo Du auch das insert durchführst und zwar in die von mir beschriebenen Bereich. Das Formular wird an die gleiche Seite geschickt.

Wie die Feldvalidierung abläuft und was man beachten muss, steht in den Kommentarzeilen des Scriptcodes.

Code:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Test</title>
</head>
<body>
<%
'Auslesen der Formularfelder

' --- immer hinzuschreiben, ob es sich um einen Form oder QueryString handelt, ist performanter
' --- Hochkomma sollten immer verdoppelt werden, sonst gibt Fehler

dim addprodukt 
addProduct = Replace(trim(Request.Form("Anmelden")),"'","''")

productName =TRIM(Request( "productName"))
productPrice =TRIM(Request( "productPrice"))
productPicture =TRIM(Request( "productPicture"))

' --- name ist ein reserviertes Wort, könnte auch Probleme machen. 
name =TRIM(Request( "name"))
vorname =TRIM(Request( "vorname"))

IF productPrice= ""THEN
productPrice= "?"
END IF
IF productPicture= ""THEN
productPicture="?"
END IF
IF vorname= ""Then
vorname= "?"
END IF
IF name= ""Then
name= "?"
END IF

' --- Feldeingabe von Produktname erzwingen
' --- Abfrage nach Formularübergabe
' --- Stellen der Überprüfungvariablen auf 1
' --- Abfrage ob Feld gefüllt, wenn nicht, Variable auf 0 setzen, Felhertext

if request.Form.Count >0 then
dim allesok, FehlerProduktname
FehlerProduktname = ""
allesok = 1
if produktname = "" or isnull(produktname) then
	allesok = 0
	Fehlerproduktname = "Bitte dieses Feld ausfüllen"
end if 
end if 
if allesok then

'Öffnen der Datenbankverbindung

Set Con = Server.CreateObject( "ADODB.Connection")
Con.Open "accessDSN"
sqlString = "INSERT INTO Products (product_name,product_price,product_picture,vorname,name) VALUES ('" & productName & "', '" & productPrice &"', '" & productPicture &"', '" &vorname &"', '" &name &"')"
Con.Execute sqlString

' --- Schließen der Verbindung nicht vergessen!

con.close
set con=nothing
%>
<center>
<table width="600" cellpadding="4" cellspacing="0">
<tr>
<td>
Anmeldung erfolgreich
</td>
</tr>
</table>
</center>
<a href="addproduct.asp">back</a>
<% else %>
<% = fehlerproduktname %>
Hier gehört das Formular rein und wird an die gleiche Seite geschickt.
<% end if %>
</body>
</html>
 
Hallo
Also die Fehlermeldung funktioniert wenn ich nichts eingebe. Aber wie füge ich das Formular denn ein?
Das Formular heisst:
addProduct.asp

Habe es schon versucht aber es klappt einfach nicht.
Könntest du mir da vielleicht nochmal helfen? Wäre wirklich lieb von dir.

lg
Sunflower
 
Hallo

Der Scriptcode ist der gleiche wir du ihn mir korrigiert hast.
Ich weiss einfach nicht wie ich das Formular einbinden soll.
Noch was anderes. Du hast es jetzt so gemacht das immer eine Fehlermeldung kommt wenn der Benutzer nicht alle Felder ausgefüllt hat. Es sind aber nicht alles Pflichfelder. Wie mach ich denn das? Ich hatte es schon mal bei einem anderen Projekt gemacht mit einer if. Habe einfach geprüft ob der String leer ist und wenn ja eine Fehlermeldung ausgegeben. Aber das klappt hier irgendwie nicht.

Lg
Sunflower
 
Hi

das Formular kommt dort hin, wo ich es im Scriptcode hingeschrieben habe.

Bitte denk daran, dass name ein reserviertes Wort ist. Das solltest Du nicht als Feldname laufen lassen.

Ich habe jetzt im Beispiel die Validierung auf name und vorname gelegt und ein Beispielformular eingesetzt.

Code:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Test</title>
</head>
<body>
<%
'Auslesen der Formularfelder

' --- immer hinzuschreiben, ob es sich um einen Form oder QueryString handelt, ist performanter
' --- Hochkomma sollten immer verdoppelt werden, sonst gibt Fehler

dim addprodukt
dim productname 
dim ProductPrice
dim ProductPicture

addProduct = Replace(trim(Request.Form("Anmelden")),"'","''")
productName = Replace(trim(Request.Form("ProductName")),"'","''")
productPrice = Replace(trim(Request.Form("ProductPrice")),"'","''")
productPicture = Replace(trim(Request.Form("ProductPicture")),"'","''")

dim Nachname, Vorname

' --- name ist ein reserviertes Wort, könnte auch Probleme machen. 
name = Replace(trim(Request.Form("name")),"'","''")
vorname =Replace(trim(Request.Form("vorname")),"'","''")

IF productPrice= ""THEN productPrice= "?"
IF productPicture= ""THEN productPicture="?"

' --- Feldeingabe von Produktname erzwingen
' --- Abfrage nach Formularübergabe
' --- Stellen der Überprüfungvariablen auf 1
' --- Abfrage ob Feld gefüllt, wenn nicht, Variable auf 0 setzen, Felhertext

if request.Form.Count >0 then
dim allesok
dim FehlerName
dim FehlerVorname
FehlerName = ""
FehlerVorname = ""
allesok = 1
if name = "" or isnull(name) then
	allesok = 0
	FehlerName = "<span style=""color:red"">Bitte dieses Feld Nachname ausfüllen</span>"
end if 
if Vorname = "" or isnull(Vorname) then
	allesok = 0
	FehlerVorname = "<span style=""color:red"">Bitte dieses Feld Vorname ausfüllen</span>"
end if 
end if 
if allesok then

'Öffnen der Datenbankverbindung
Set Con = Server.CreateObject( "ADODB.Connection")
Con.Open "accessDSN"
sqlString = "INSERT INTO Products (product_name,product_price,product_picture,vorname,name) VALUES ('" & productName & "', '" & productPrice &"', '" & productPicture &"', '" &vorname &"', '" & name &"')"
Con.Execute sqlString

' --- Schließen der Verbindung nicht vergessen!

con.close
set con=nothing
%>
<center>
<table width="600" cellpadding="4" cellspacing="0">
<tr>
<td>
Anmeldung erfolgreich
</td>
</tr>
</table>
</center>
<a href="addproduct.asp">back</a>
  <% else %>
 
<h1>Formularbeispiel:</h1>
<form name="form1" method="post" action="<% = Request.ServerVariables("SCRIPT_NAME")%>">
Vorname <% = fehlerVorname %><br>
  <input name="vorname" type="text" id="vorname" value="<% = vorname %>">
  <br>
  Nachname <% = fehlername %><br>
  <input name="name" type="text" id="nachname" value="<% = name %>">
  <br>
  <br>
  <input type="submit" name="Submit" value="Abschicken">
</form>
<br>
<% end if %>
</body>
</html>
 
Hallo
Nochmal vielen Dank das du mir hilfst.
Aber eigentlich soll nur eine Meldung kommen das man diese Felder noch ausfüllen soll, ohne eine Eingabe.
Ich habe für mein Formular doch eine extra asp datei. Die addProduct.asp. Dort füllt man die Felder ja aus. Ich habe das jetzt auch nochmal versucht. Exportieren tut er die Daten aber es kommt wieder keine Meldung wenn ich was nicht ausgefüllt habe. Wäre lieb wenn du dir das mal anschauen kannst. Das müsste doch eigentlich gehen. Sorry wenn ich etwas schwer von Begriff bin.
Code:
<html>
<head>
<title></title>
<meta name="author" content="nschlapp">
<meta name="generator" content="Ulli Meybohms HTML EDITOR">
</head>
<body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
<%
'Auslesen der Formularfelder
addProduct =TRIM( Request("Anmelden"))
%>
<%
productName = Request.Form("productName")
productPrice= Request.Form("productPrice")
productPicture= Request.Form("productPicture")
if productName= "" Then productName= "false"
if productPrice= "" Then productPrice = "false"
if productPicture = "" Then productPicture = "false"

'### Validation of Data
if Request.QueryString("mode") = "val" then

Err_Msg = ""

if productName = "" then
Err_Msg = Err_Msg & "<li>Please enter Your prname.</li>"
end if
if productPrice = "" then
Err_Msg = Err_Msg & "<li>Please enter Your prprice.</li>"
end if
if productPicture = "" then
Err_Msg = Err_Msg & "<li>Please enter Your prpicture.</li>"
end if
end if

Set Con = Server.CreateObject( "ADODB.Connection")
Con.Open "accessDSN"
%>

<html>
<head><title>Manage Products</title></head>

<%
'Neues Produkt hinzufügen
IF addProduct <> "" THEN

sqlString = "INSERT INTO Products (product_name,product_price,product_picture) VALUES ('" & productName & "', '" & productPrice &"', '" & productPicture &"')"

Con.Execute sqlString

con.close
%>
<center>
<table width="600" cellpadding="4" cellspacing="0">
<tr>
<td>
Anmeldung erfolgreich
</td>
</tr>
</table>
</center>
<p></p>
<%
END IF
%>
<a href="addproduct.asp">back</a>
</body>
</html



</body>
</html>

liebe Grüße
Sunflower
 
Hi

und wo wird Err_Msg ausgegeben?
Und wenn es ausgegeben wird, wo ist die Abfrage, dass nicht doch leere Felder eingetragen werden?

Und wenn es auf der 2. Seite als Meldung ausgegeben wird, dann muss der User wieder zurück und die bereits ausgefüllten Formularfeld nochmals ausfüllen oder wie gibst Du die Daten wieder zurück?

Wenn Du es auf 2 Seiten erledigen willst, dann gibts noch die Möglichkeit der Validierung in Javascirpt.
 
Ok du hast recht.
Dann mache ich es lieber so wie du es mir gesagt hast. Ich habe jetzt deins mal übernommen und mit meinen Feldernamen ersetzt. Aber es funktioniert leider nicht.
Bekomme leider keine Fehlermeldung wenn ich was nicht ausgefüllt habe.
Könntest du vielleicht noch mal schauen?

<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Test</title>
</head>
<body>
<%
'Auslesen der Formularfelder

' --- immer hinzuschreiben, ob es sich um einen Form oder QueryString handelt, ist performanter
' --- Hochkomma sollten immer verdoppelt werden, sonst gibt Fehler

dim addprodukt
dim productName
dim productPrice
dim productPicture

addProduct = Replace(trim(Request.Form("Anmelden")),"'","''")
productName = Replace(trim(Request.Form("ProductName")),"'","''")
productPrice = Replace(trim(Request.Form("ProductPrice")),"'","''")
productPicture = Replace(trim(Request.Form("ProductPicture")),"'","''")

dim Nachname, Vorname

' --- name ist ein reserviertes Wort, könnte auch Probleme machen.
productName = Replace(trim(Request.Form("productName")),"'","''")
productPrice =Replace(trim(Request.Form("productPrice")),"'","''")
productPicture =Replace(trim(Request.Form("productPicture")),"'","''")

IF productName= ""THEN productName= "?"
IF productPrice= ""THEN productPrice= "?"
IF productPicture= ""THEN productPicture="?"

' --- Feldeingabe von Produktname erzwingen
' --- Abfrage nach Formularübergabe
' --- Stellen der Überprüfungvariablen auf 1
' --- Abfrage ob Feld gefüllt, wenn nicht, Variable auf 0 setzen, Felhertext

if request.Form.Count >0 then
dim allesok
dim FehlerproductName
dim FehlerproductPrice
dim FehlerproductPicture
FehlerproductName = ""
FehlerproductPrice = ""
FehlerproductPicture = ""
allesok = 1
if productName = "" or isnull(productName) then
allesok = 0
FehlerproductName = "<span style=""color:red"">Bitte dieses Feld productName ausfüllen</span>"
end if
if productPrice = "" or isnull(productPrice) then
allesok = 0
FehlerproductPrice = "<span style=""color:red"">Bitte dieses Feld productPrice ausfüllen</span>"
end if
if productPicture = "" or isnull(productPicture) then
allesok = 0
FehlerproductPicture = "<span style=""color:red"">Bitte dieses Feld productPicture ausfüllen</span>"
end if
end if
if allesok then

'Öffnen der Datenbankverbindung
Set Con = Server.CreateObject( "ADODB.Connection")
Con.Open "accessDSN"
sqlString = "INSERT INTO Products (product_name,product_price,product_picture) VALUES ('" & productName & "', '" & productPrice &"', '" & productPicture &"')"
Con.Execute sqlString

' --- Schließen der Verbindung nicht vergessen!

con.close
set con=nothing
%>
<center>
<table width="600" cellpadding="4" cellspacing="0">
<tr>
<td>
Anmeldung erfolgreich
</td>
</tr>
</table>
</center>
<a href="addproduct.asp">back</a>
<% else %>

<h1>Formularbeispiel:</h1>
<form name="form1" method="post" action="<% = Request.ServerVariables("SCRIPT_NAME")%>">
productName <% = fehlerproductName %><br>
<input name="productName" type="text" id="productName" value="<% = productName %>">
<br>
productPrice <% = fehlerproductPrice %><br>
<input name="productPrice" type="text" id="productPrice" value="<% = productPrice %>">
<br>
productPicture<% = fehlerproductPicture %><br>
<input name="productPicture" type="text" id="productPicture" value="<% = productPicture %>">
<br>
<br>
<input type="submit" name="Submit" value="Abschicken">
</form>
<br>
<% end if %>
</body>
</html>

Liebe Grüße
Sunflower
 
Ich habe gerade noch gemerkt das ich in Zeile 25 vergessen habe meine Namen zu deklarieren. Aber als ich das gemacht habe hat er mir die daten nicht mehr exportiert und folgenende Fehlermeldung gebracht:
Kompilierungsfehler in Microsoft VBScript (0x800A0411)
Name erneut definiert
/ec/managerproducts.asp, Zeile 25, Spalte 4
dim productName, productPrice, productPicture

Ich hoffe du kannst mir helfen. Ich muss das für die Firma machen. Bin gerade im 1. Lehrjahr und in der FIrma kann keiner Programmieren.

LG
Sunflower
 

Neue Beiträge

Zurück