Ratlosigkeit ob eines nicht funktionierenden »kleiner als«-Vergleichs

27apricot

Erfahrenes Mitglied
Hallo,

ich hab' ein Formularscript geschrieben für die Eingabe von Konzertprogrammen. Das ganze Formularscript wird sowohl bei der Eingabe eines neuen Konzertes als auch bei der Bearbeitung eines bereits in der Datenbank eingetragenen Konzertes aufgerufen.

Ganz am Ende gibt es ein Feld, in das man einträgt, an wievielen Terminen das Programm stattfinden wird. Dieses Feld belege ich per PHP dynamisch vor: mit »1« bei einem neuen Konzertprogramms und bei der Bearbeitung eines vorhandenen Konzertprogramms mit der in der DB stehenden Anzahl der Termine.

Nun überprüfe ich mit JavaScript die Eingabe. Es soll eine Fehlermeldung kommen, wenn beim Abschicken des Formulares die eingetragene Anzahl kleiner ist als die Vorbelegung. Deswegen übergebe ich die Vorbelegung auch per PHP an das JavaScript. Dieses sieht so aus:
HTML:
if(document.forms[0].anzahl_termine.value < <?php echo $value_anzahl; ?>) {
	alert("Die Anzahl der Termine ist zu klein");
}
<!-- Das Formularfeld: -->
<input name="anzahl_termine" type="text" class="w25" maxlength="2" value="<?php echo $value_anzahl; ?>" onfocus="select()" />
Wenn jetzt bei der Konzertbearbeitung die Vorbelegung »2« ist (weil zwei Termine in der Datenbank stehen), kommt die Fehlermeldung nur, wenn ich »0« eingebe, und nicht, wenn ich »1« eingebe. Ändere ich die Vorbelegung beim leeren Formular (also der Eingabe eines neuen Konzertprogramms) auf »2« oder »3«, funktioniert alles richtig.

Der Quelltext sieht in jedem Falle -- je nach übergebener Vorbelegung -- gleich aus. Im obigen Javascript steht der INT-Wert und im Formularfeld steht »value="(int)"«. Und trotzdem reagiert das Script unterschiedlich.

Weiß jemand einen Rat? Kann natürlich sein, dass das ein PHP-Problem ist, was ich aber kaum glaube, da der Quelltext der generierten Datei, wie erwähnt, so aussieht, wie er aussehen sollte.

Danke und schöne Grüße:
27apricot.
 
Mir fällt es schwer, dein Problem zu verstehen. Dein Text verwirrt mich eher :-)

Ich würde mit Javascript nicht nur bei "onfocus" prüfen, weil dann wird ja nur bei Aktivierung genau von diesem Formularfeld geprüft. Wenn PHP aber dynamisch das Feld ausfüllt und der Wert auch nicht geändert wird, wird auch die Kontrolle garnicht aufgerufen.
Oder Irre ich mich jetzt bzw. bin total am Thema vorbei?!
LG
TwoFaze
 
Könntest du deinen Code mal so anzeigen, wie er auch funktionieren sollte?
Was ich meine ist, anstatt PHP-Code uns den vom Browser empfangenen HTML-und Javascript-Quelltext zu präsentieren und deine komplette Vergleichsfunktion, nicht nur zwei Zeilen ohne Funktionsrumpf.

Ansonsten könntest du erstmal sichergehen, dass du auch Zahlen vergleichst!
Dazu bietet JavaScript z.B. die Möglichkeit, deinen Formularinhalt mit Number() zu bearbeiten (Beispiel):
Javascript:
Javascript:
  function pruefe(wertNeu,wertStart) {
     if(Number(wertNeu) < wertStart) {
       alert("Fehlermeldung");
     }
  }

HTML:
HTML:
<input name="anzahl_termine" type="text" class="w25" maxlength="2" value="5" onfocus="pruefe(this.value,5)" />
 
Hallo,

Vielen Dank für die Antworten. Ich hab' den Fehler jetzt entdeckt. Am Anfang der Funktion frag' ich alle Pflichtfelder ab mit OR. Wenn eines davon fehlerhaft ist, wird eine Variable für die alert()-Funktion geschrieben. Jetzt wird jedes Feld einzeln abgefragt und am Ende das alert() komplett ausgegeben. Ich hatte nun in der ersten Abfrage einen Fehler. Zu dumm.

Hier die komplette Funktion, die beim Submit des Formulars aufgerufen wird:
HTML:
function check_form() {
	if(document.forms[0].titel.value == "" || (document.forms[0].id_reihe.value == 0 && !document.forms[0].konzertreise.checked) || (document.forms[0].anzahl_termine.value == "" || document.forms[0].anzahl_termine.value < <?php echo $value_anzahl; ?>)) {
		var _alert = "";
		if(document.forms[0].titel.value == "") {
			_alert += "Bitte geben Sie einen Titel für das Konzert ein\n";
			document.forms[0].titel.focus();
		}
		if(document.forms[0].id_reihe.value == 0 && !document.forms[0].konzertreise.checked) {
			_alert += "Bitte ordnen Sie das Konzert einer Reihe zu oder wählen Sie aus, dass es sich um eine Konzertreise handelt.\n";
		}
		if(document.forms[0].anzahl_termine.value == "") {
			_alert += "Bitte geben Sie an, wie oft das Konzert stattfinden soll.\n";
			document.forms[0].anzahl_termine.focus();
			document.forms[0].anzahl_termine.select();
		}
		if(document.forms[0].anzahl_termine.value != "" && document.forms[0].anzahl_termine.value < <?php echo $value_anzahl; ?>) {
			_alert += "Die Anzahl der Termine ist kleiner als 1 bzw. kleiner als die Zahl der bereits eingetragenen Termine zu diesem Konzert.\n";
			document.forms[0].anzahl_termine.focus();
			document.forms[0].anzahl_termine.select();
		}
		alert(_alert);
		return false;
	} else {
		return true;
	}
}
Ich hatte in der umschließenden Abfrage (Zeile 2, ganz am Ende) vergessen, die von PHP generierte Zahl zu übergeben. Sorry für das Ärgernis und danke für die Mühe.

Schöne Grüße:
27apricot
 

Neue Beiträge

Zurück