DerNordBerliner: Wo liegt der Fehler

Beitrag lesen

Hallöchen,

ich habe von einem Bekannten ein Script erhalten, welches Eingaben in einem Formular überprüft. Leider erreiche ich ihn nicht und finde einfach den Fehler nicht. vielleicht hat einer von euch ja eine Idee.

Ich habe das Formular mal bis auf ein Feld gekürzt aber das gedamt Script ist mit drin:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"> <script type="text/javascript" src="http://www.markus-melich.de/ios/mmtype.js"> <script type="text/javascript"> // MERKVARIABLEN ganzzahlen_felder = new Array("_1.3_PLZ", "_1.6_VWSchule1", "_1.6_TelSchule", "_1.6_VWSchule2", "_1.6_FaxSchule", "_1.3a_KoopPLZ", "_1.6a_KoopVWTel", "_1.6a_KoopTelefon", "_1.6a_KoopVWFax", "_1.6a_KoopFax", "_2.3_LeisPLZ", "_2.6_LeisVWTel", "_2.6_LeisTelefon", "_2.6_LeisVWFax", "_2.6_LeisFax", "_3.2_Leis1PLZ", "_3.5_Leis1VWTel", "_3.5_Leis1Telefon", "_3.5_Leis1VWFax", "_3.5_Leis1Fax", "_3.7_BLZ", "3.7_Konto", "_6.1_TNLehrer", "_6.1_FrauenLehrer", "_6.1_MaennerLehrer", "_6.2_TNSchueler", "_6.2_Maedchen", "_6.2_Jungen", "_6.2_Migration", "_6.2_Klasse7", "_6.2_Klasse8", "_6.2_Klasse9", "_6.2_Klasse10"); waehrungs_felder = new Array("_9.0_ESF1", "_9.0_BA1","_9.0_KO1", "_9.0_ESF2", "_9.0_BA2", "_9.0_KO2"); datums_felder = new Array("_10_Datum10", "_11_Datum11"); radio_felder = new Array("_gelesen"); checkbox_felder = new Array("p"); menue_felder = new Array("_1.3_Schulamtsbezirk", "_1.8_Anrede1", "_1.8_Titel1", "_1a_Koop", "1.3a_KoopBezirk", "1.8a_KoopAnrede", "1.8a_KoopTitel", "_2.8_LeisAnrede", "_2.8_LeisTitel", "_3.1_Leis1Anrede", "_3.1_Leis1Titel", "_5.1_Wo", "5.1_Wo2", "5.1_Wo3", "_5.3_Zuordnung", "_5.4.1_Gleichheit1", "_5.4.1_Gleichheit2", "5.4.1_Gleichheit2a", "5.4.1_Gleichheit2b", "5.4.1_Gleichheit2c", "5.4.1_Gleichheit2d", "_5.4.2_Umwelt", "_5.4.3_Trans", "_5.4.4_Chancen", "5.4.4_Chancen1a", "5.4.4_Chancen1b", "5.4.4_Chancen1c", "_6.1_Ziel", "6.1_Ziel1", "_6.3_Alter", "_7_Leistung", "7_Leistung1", "7_Leistung2", "7_Leistung3", "7_Leistung4", "_9.2_Abzug", "_9.2_Vorteil"); eingabe_felder = ganzzahlen_felder.concat(waehrungs_felder, datums_felder, radio_felder, checkbox_felder, menue_felder);

// PROGRAMM-FUNKTIONEN function ersetzeKomma(wert) { // Ersetzt Komma durch Dezimalpunkt var ergebnis=""+wert; var pos=ergebnis.indexOf(","); if (pos >= 0) { ergebnis=ergebnis.substring(0,pos)+"."+ergebnis.substring(pos+1); } ergebnis=parseFloat(ergebnis); return ergebnis; }

function ersetzePunkt(wert) { // Ersetzt Dezimalpunkt durch Komma und schneidet bei Bedarf die hinteren Stellen ab var ergebnis=""+wert; var pos=ergebnis.indexOf("."); if (pos >= 0) { ergebnis=ergebnis.substring(0,pos)+","+(ergebnis+"00").substr(pos+1,2); } else if (parseFloat(ergebnis)==0) ergebnis="0"; else ergebnis=parseInt(ergebnis)+",00"; return ergebnis; }

function rundeEuro(a) { // rundet den Betrag auf 2 Stellen nach dem Komma z1=parseFloat(a)*100; z1=Math.round(z1); z2=parseInt(z1)/100;

return z2; }

function schreibeEuro(betrag) { // gibt einen Eurobetrag mit Komma und zwei Stellen zurück // für die Ausgabe in Feldern return ersetzePunkt(rundeEuro(betrag))+" €"; }

function pruefeFeldWaehrung(Name) { // überschreibt ein Euro-Feld mit seinem schönformatierten Inhalt if (!isNaN(eval("ersetzeKomma(document.berechnung."+Name+".value)"))) eval("document.berechnung."+Name+".value=ersetzePunkt(rundeEuro(ersetzeKomma(document.berechnung."+Name+".value)))") else eval("document.berechnung."+Name+".value=0"); }

function pruefeFeldNumerisch(Name) { // überschreibt ein numerisches Feld mit seinem errechneten Inhalt if (!isNaN(eval("ersetzeKomma(document.berechnung."+Name+".value)"))) { var val=parseInt(eval("ersetzeKomma(document.berechnung."+Name+".value)")); // Direkte Zuweisung macht Fehler in Mozilla - Bug? eval("document.berechnung."+Name+".value=val") } else eval("document.berechnung."+Name+".value=0"); }

function pruefeFeldDatum(Name, quiet) { // prüft ein Datum und ersetzt den Inhalt mit dem schönformatierten Inhalt // im Fehlerfall wird das Feld rot eingefärbt und die Funktion gibt false zurück var jetzt=new Date(); var aktj=jetzt.getYear(); if (aktj<2000) aktj=aktj+1900; // Y2K-Fehler umgehen var fehler="Das Datum ist nicht richtig eingegeben worden oder macht keinen Sinn.\nBitte geben Sie das Datum im Format "tt.mm.jj" oder "tt.mm." an (z.B. 1.7."+aktj+" oder 1.7.)."; var feld=eval("document.berechnung."+Name); var datum=feld.value;

// Prüfen if (datum=="") return true; // leere Eingabe if (datum.indexOf(".")==-1) { // 1. Punkt fehlt Fehler(); return false; } var t=parseFloat(datum.substring(0,datum.indexOf("."))); // Tag datum=datum.substr(datum.indexOf(".")+1,datum.length-datum.indexOf(".")-1); // Rest isolieren if (datum.indexOf(".")==-1) { // 2. Punkt fehlt Fehler(); return false; } var m=parseFloat(datum.substring(0,datum.indexOf("."))); // Monat datum=datum.substr(datum.indexOf(".")+1,datum.length-datum.indexOf(".")-1); // Rest isolieren if (datum=="") datum=aktj; var j=parseFloat(datum); // Jahr if (j>=0 &amp;&amp; j<50) j=j+parseInt(aktj/100)*100; // Datum 0-49 zweistellig eingegeben (2000-2049) if (j>=50 &amp;&amp; j<100) j=j+parseInt(aktj/100)*100-100; // Datum 50-99 zweistellig eingegeben (1950-1999) if (isNaN(t) || isNaN(m) || isNaN(j) || t<=0 || m<=0 || j<=2009 || m>12 || j>aktj+1) { // untere oder obere Grenze verletzt Fehler(); return false; } var tgrenze=31; // Obergrenze für den Tag bestimmen if (m==4 || m==6 || m==9 || m==11) tgrenze=30; if (m==2) { // Schaltjahr tgrenze=28; if (j%4==0) tgrenze++; if (j%100==0) tgrenze--; if (j%400==0) tgrenze++; } if (t>tgrenze) { // Obergrenze Tag verletzt Fehler(); return false; }

// Nullen bei den Einzelwerten einfügen if ((""+t).length==1) t="0"+t; if ((""+m).length==1) m="0"+m;

// Datum neu zusammenbauen und ins Feld schreiben feld.value=t+"."+m+"."+j; document.getElementById(Name).className=""; return true;

function Fehler() { // Hilfsfunktion für prüfeFeldDatum //feld.value=""; // Inhalt nicht löschen - Feld muss vor Berechnung erneut geprüft werden if (!quiet) alert (fehler); if (document.getElementById) document.getElementById(Name).className="error"; }

}

function schreibeFeld(Name,wert) { // schreibt Wert in das Inputfeld eval("document.berechnung."+Name+".value=schreibeEuro(wert)"); }

function schreibeFeldNumerisch(Name,wert) { // schreibt numerischen Wert in das Inputfeld // für sichtbare Inputfelder mit Ganzzahlenangabe eval("document.berechnung."+Name+".value=parseInt(wert)"); }

function schreibeFeldOhneEuro(Name,wert) { // schreibt Euro-Wert ohne Währungssymbol in das Inputfeld // für sichtbare Inputfelder mit Eurowerten eval("document.berechnung."+Name+".value=ersetzePunkt(rundeEuro(wert))"); }

function leseFeld(Name) { // liest das Formularfeld mit dem übergebenen Namen aus und zwingt das Ergebnis nach Float return parseFloat(eval("ersetzeKomma(document.berechnung."+Name+".value)")); }

function leseDatum(Name) { // prüft und liest das Datums-Formularfeld im sicher gültigen Format tt.mm.jjjj (oder leer) aus if (pruefeFeldDatum(Name,true)) return eval("document.berechnung."+Name+".value"); else return ""; }

function leseRadiobutton(feldname){ // wertet eine Radiobutton-Gruppe aus und liefert den Wert des angeklickten Elements var wert=""; var radiolen=eval("document.berechnung."+feldname+".length"); for (var element=0; element<radiolen; element++) { if (eval("document.berechnung."+feldname+"["+element+"].checked")) wert=eval("document.berechnung."+feldname+"["+element+"].value") } return wert; }

function leseMenue(feldname) { // liest das Formularfeld Bundesland in eine Variable ein wert=eval("document.berechnung."+feldname+".value"); return wert; }

function isInArray(wert, feld) { // sucht einen Wert im Array und liefert den entsprechenden Wahrheitswert zurück var erfolg=false; for (var i in feld) { if (feld[i]==wert) { erfolg=true; break; } } return erfolg; }

function holeFeldInVariable(feldname) { // holt den Wert des Formularfeldes in die gleichnamige Variable

if (isInArray(feldname, radio_felder)) eval(feldname+"=leseRadiobutton('"+feldname+"')"); else if (isInArray(feldname, checkbox_felder)) eval(feldname+"=document.berechnung."+feldname+".checked"); else if (isInArray(feldname, datums_felder)) eval(feldname+"=leseDatum('"+feldname+"')"); else if (isInArray(feldname, menue_felder)) eval(feldname+"=leseMenue('"+feldname+"')"); else eval(feldname+"=leseFeld('"+feldname+"')"); }

function pruefeFeld(feldname) { // prüft das angegebene Feld auf Plausibilität und ändert es bei Bedarf if (isInArray(feldname, datums_felder)) return pruefeFeldDatum(feldname); else if (isInArray(feldname, ganzzahlen_felder)) return pruefeFeldNumerisch(feldname); else if (isInArray(feldname, waehrungs_felder)) return pruefeFeldWaehrung(feldname); else return true; }

function faerbeFehlerfeld(Name) { // Färbt das übergebene Feld rot ein if (document.getElementById) document.getElementById(Name).className="error"; }

function entfaerbeFehlerfeld(Name) { // Färbt das übergebene Feld wieder normal if (document.getElementById) { else document.getElementById(Name).className="text"; } }

function setzeFocus(Name) { // setze den Focus auf das übergebene Feld if (Name) if (!eval("document.berechnung."+Name+".disabled")) eval("document.berechnung."+Name+".focus()"); }

function numeralsOnly(evt) {     evt = (evt) ? evt : event;    var charCode = (evt.charCode) ? evt.charCode : ((evt.keyCode) ? evt.keyCode :         ((evt.which) ? evt.which : 0));     if (charCode > 31 && (charCode < 44 || charCode > 57)) {         alert("Hier doch NUR ganze Zahlen!");         return false;     }     return true; } </script>

</head> <body> <form method="POST" action="http://formpost.de/send.ab?account=DerNordBerliner&konf=Eberswalde" name="berechnung" enctype="multipart/form-data"> <center><br><br><br>     <input value="0,00" maxlength="8" size="6" id="_9.0_ESF1" name="_9.0_ESF1" style="text-align: right" onkeypress="return numeralsOnly(event);" onChange="pruefeFormular(this.name);">     </form> </body> </html>

Freue mich über jeden Hinweis.

Gruß Markus