pogoist
Mitglied
Registriert: 03.04.2007
Beiträge: 3
|
|
Hallo zusammen,
ich gebe auf einer PHP Seite eine MySQL Tabelle aus, welche Artikel enthält und deren Bestand. Zu jedem Artikel wird eine Checkbox erzeugt und ein Inputfeld in dem die gewünschte Anzahl eingegeben wird (Codeausschnitt siehe unten).
Jetzt möchte ich mittels Javascript überprüfen, ob zu dem Selektierten Artikel auch die korrekte Menge in das Inputfeld eingegeben wurde. Natürlich darf diese nicht höher sein als der Bestand bzw. des Inhaltes aus der Spalte "Menge" des Artikels.
Wie kann ich dies nun mit Javascript überprüfen?? Danke!
Code:
<form action="warenkorb.php" method="post" name="form">
<?php while ($row = mysql_fetch_assoc($result_all) ){ ?>
<tr bgcolor="#FFFFCC">
<td>
<div align="center">
<input type="checkbox" name="selected[]" value="<? echo $row['ID_Artikel'];?>" />
</div>
</td>
<td><font size="2"><?php echo $row['Artikelbezeichnung']; ?></font></td>
<td><?php echo = $row['Menge']; ?></td> <!-- der Bestand -->
<td><input name="<? echo $row['ID_Artikel']; ?>" type="text" size="2" maxlength="2"></td>
</tr>
<?php } ?>
<input onClick="check()" type="button" value="Senden" name="button" />
</form> |
Beitrag geändert von pogoist (03.04.2007 21:10:28)
|
|
| 03.04.2007 16:53:08 |
|
HTMELL
Administrator
Registriert: 11.05.2006
Beiträge: 544
|
|
Hallo, ich würde mal als erstes den Feldern eine id verpassen, damit man ordentlich per Javascript darauf zugreifen kann. Z. B. kann man die Checkboxen nur schlecht unterscheiden da sie alle den gleichen Namen haben - ebenso bei dem Textfeld, nur dort "kennt" Javascript die Namen erst gar nicht. Weiterhin würde ich hidden-Felder für den Bestand und der Artikelbezeichnung einfügen, das ist leichter auszulesen als der Text in den td-Elementen. Beispiel:
Code:
<tr bgcolor="#FFFFCC">
<td>
<div align="center">
<input id="check_1" type="checkbox" name="selected[]" value="<? echo $row['ID_Artikel'];?>" />
</div>
</td>
<td>
<font size="2"><?php echo $row['Artikelbezeichnung']; ?></font>
<input type="hidden" id="artbez_1" value="<?php echo = $row['Artikelbezeichnung']; ?>" />
</td>
<td>
<?php echo = $row['Menge']; ?>
<input type="hidden" id="bestand_1" value="<?php echo = $row['Menge']; ?>" />
</td>
<td><input id="value_1" name="<? echo $row['ID_Artikel']; ?>" type="text" size="2" maxlength="2"></td>
</tr> |
Im nächsten tr lauten dann die id's "check_2" usw., wichtig ist nur das Du einen festen Anfangswert hast (hier 1) und fortlaufend nummerierst. Ab jetzt ist der Rest ganz einfach:
Code:
function check() {
// Anfangswert
var i = 1;
var checkFound = false;
// Überprüfen ob der letzte Eintrag überschritten wurde
while(document.getElementById("check_" + i)) {
// Checkbox an ?
if(document.getElementById("check_" + i).checked) {
// Merken das überhaupt eine Checkbox ausgewählt wurde
checkFound = true;
// Werte zwischenspeichern
var bestand = parseInt(document.getElementById("bestand_" + i).value);
var value = document.getElementById("value_" + i).value;
var artbez = document.getElementById("artbez_" + i).value;
// Gültiger Wert ? (NICHT leer und NUR Zahlen)
if(!value.match(/^\d+$/)) {
// Fehler
alert("Bitte geben Sie einen Gültigen Wert für den Artikel '" + artbez + "' ein.");
return;
}
// Bestand mit eingegebenen Wert vergleichen
if(bestand < parseInt(value)) {
// Fehlermeldung ausgeben
alert("Fehler: Von dem Artikel '" + artbez + "' können Sie max. " + bestand + " auswählen");
return;
}
}
i++;
}
// Keine Checkbox ausgewählt ?
if(!checkFound) {
// Fehler
alert("Bitte wählen Sie einen Artikel aus.");
return;
}
// Formular abschicken
document.forms[0].submit();
} |
Ist doch ganz einfach, oder ? ;-)))
_______________________________________ mfg Thomas Mell
www.validome.org
|
|
| 03.04.2007 20:01:55 |
|
pogoist
Mitglied
Registriert: 03.04.2007
Beiträge: 3
|
|
Also erstmal tausend Dank für die super Antwort.
Für mich ist dies mehr oder weniger einfach da ich noch nie mit javascript gearbeitet habe und auch sonst ein Anfänger in der Webprogrammierung bin :) Aber ich lerne es gerade mit Begeisterung.
Dank deinem schön erklärten Code habe ich es verstanden. Leider habe ich noch ein Problem, dass die Funktion nie einen selektierten findet. Könnte daran liegen, dass ich keine Ahnung habe, wie ich die ids nummerieren kann.
Habe es mal so probiert, aber es ist es nicht:
$i wird immer hochgezählt.
Code:
<input type="hidden" id="bestand_'<?php echo $i; ?>" value="<?php echo $row['Menge']; ?>" /> |
|
|
| 03.04.2007 21:09:52 |
|
pogoist
Mitglied
Registriert: 03.04.2007
Beiträge: 3
|
|
So, das Hochkomma vor dem PHP Skriptteil. Jetzt hat jede <tr> eine inkrementelle ID.
Und es funktioniert wunderbar!!! Endlich mal eine Hilfe, die man auch selbst nachvollziehen kann. Das hat mein Einstieg in die Javascript Welt auf jeden Fall vereinfacht.
|
|
| 03.04.2007 21:59:30 |
|
Wechsel zu
Die letzten Beiträge aus diesen Forum
|
|