Felder/Formular abfrage schrittweise durchführen

messmar

Erfahrenes Mitglied
Hallo,

das folgende Skript funktioniert gut, aber ich möchte die Felder-Validierung
nacheinander durchführen bzw. die Fehler-Ausgabe für den User schrittweise
machen.

Also, wenn es keinen Namen eingegeben wird, dann darf nur die Fehlermeldung für
dieses Feld ausgegeben wird, mehr nicht.

Wie das Skript aufgebaut ist, werden alle drei Hinweise/Fehlermeldungen auf einmal dem User angezeigt, was ich nicht haben will.

Ich habe es mit return(false); versucht, aber es funkzt. nicht, da bei Void keinen
Wert zurückgegeben werden kann. das ist auch richtig so.

Mit nem Flag, hats auch nicht hingehaut ;-(

Für jede Hilfe oder Tipp, bin sehr Dankbar.

Gruß
Messmar
HTML:
<%--ex3.jsp, Überprufen der Eingabe--%>
<%@page import="java.util.regex.*"%>
<%
String name = "";
String alter = "";
String antwort = "";
String mail = "";
String regexp = ".";
String msg = "";
int a = 0;

boolean flag = true;

if (request.getParameter("submit") != null){
  name = request.getParameter("tName").trim();
  if (name.equals(""))
    msg = "Es wurde kein Name eingegeben.";
    flag = false;
  alter = request.getParameter("tAlter").trim();
  if (flag == true && alter.equals(""))
    msg = msg + " Bitte Alter eingeben.";
  else {
    try{
      a = Integer.parseInt(alter);
    }
    catch (NumberFormatException ex){
      msg = msg + " Die Altereingabe ist fehlerhaft.";
    }
  }

  mail = request.getParameter("tMail").trim();
  if (mail.equals(""))
    msg = msg + " Es wurde keine eMail-Adresse eingegeben.";
  else {
    regexp = "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$";
    Pattern p = Pattern.compile( regexp );
    Matcher m = p.matcher( mail );
    boolean result = m.matches();
    if ( !result )
      msg = msg + " Die eMail-Adresse ist ungültig.";
  }

  if (msg.equals("")) 
    antwort = "Ihr Name ist " + name + ", Sie sind " + a + " Jahre alt, die eMail ist " + mail + "." ;
  } 
%>
 
Du könntest Deine Fehlermeldungen alle in ein Array speichern und dann nur das erste
Element des Arrays ausgeben, auch wenn mehrere Elemente vorhanden sind.

Ich hoffe dass hilft Dir weiter...

VG
 
Hallo SOA, Deine if-Abfragen stehen gleichberechtigt hintereinander, werden folglich auch alle ausgeführt. Du könntest sie schachteln, um dieses Problem zu umgehen. Das Flag wird nach der Namensprüfung immer! auf false gesetzt, weil Du die geschweiften Klammern für das if-Statement weggelassen hast.
 
Hallo Vaterhouse,

danke schon Mal,

wenn du folgendes meinst, dann hat es mir nicht geholfen. Alles ist beim Alten geblieben:
HTML:
 name = request.getParameter("tName").trim(); 
  if (name.equals("")) { //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ NAME
    msg = "Es wurde kein Name eingegeben.";
    flag = false;
	}
	
  alter = request.getParameter("tAlter").trim(); 
  if (flag == true && alter.equals("")){ //~~~~~~~~~~~~~~~~~~~ ALTER
    msg = msg + " Bitte Alter eingeben."; 
	flag = false;
  }else { 
    try{ 
      a = Integer.parseInt(alter); 
    } 
    catch (NumberFormatException ex){ 
      msg = msg + " Die Altereingabe ist fehlerhaft."; 
    } 
	flag = false;
  } 

  mail = request.getParameter("tMail").trim(); 
  if (flag == true && mail.equals("")) {//~~~~~~~~~~~~~~~~~~~~~ EMAIL
    msg = msg + " Es wurde keine eMail-Adresse eingegeben."; 
	flag = false;
 } else { 
    regexp = "^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$"; 
    Pattern p = Pattern.compile( regexp ); 
    Matcher m = p.matcher( mail ); 
    boolean result = m.matches(); 
    if ( !result ) {
      msg = msg + " Die eMail-Adresse ist ungültig."; 
	  }
  }

Viele Grüße
Messmar
 
und wenn Du nun statt des Strings eine Arraylist definierst, kannst Du auch viel besser
mit Deinen fehlermeldungen umgehen:

Definition:

private ArrayList msg = new ArrayList();

Fehlermeldung hinzufügen:
msg.add("Es wurde kein Name eingegeben." );


Das erste Element der Liste ausgeben:
msg.get(0);


Prüfen, ob die Liste gefüllt ist:
if (msg.size() > 0 )
{ // mach was
}
else
{
// Die Liste ist leer.
}

So kannst Du bequem die Fehlermeldungen nacheinander abarbeiten.


VG
 
Hallo,

danke für deine Antwort und den Vorschlag.

habs jetzt gelöst und zwar einfach mit if/else if.

Gruß
Messmar
 
Zurück