Problem: Übergabe mehrer Werte aus einer Datenbank in eine Variable

Myalein

Grünschnabel
Hallo zusammen,

Ich mache zur Zeit eine Projektarbeit und ich hab mir in den Kopf gesetzt die Personaldaten zu verwalten (eher einfach) jetzt bin ich auf ein Problem gestossen, dass sich für mich mit meinem bisherigen Wissen nicht so leicht lösen lässt.

In der Startseite wird eine Datenbank aufgerufen mit einer Schleife werden alle Mitarbeiter gezeigt die in der Datenbank stehen. Vor jedem Mitarbeiterzeile ist eine Checkbox und jeder Mitarbeiter hat eine ID (Autowert) diese ID ist auch in der Checkbox als Wert (Value). Jetzt wähle ich zwei (oder mehrere) Checkboxen auswählen und will die ID mit der ID in der Datenbank abgleich um wiederrum die Daten des Mitarbeiters mit der ID zu erhalten und diese weiter bearbeiten.

Sobald ich eben mehrer Checkboxen auswähle fügt er die ID zusammen und gibt folgende Fehlermeldung aus:
Syntaxfehler (Komma) in Abfrageausdruck 'ID=9, 10'
POST Data:
txtID=9&txtID=10&cmdAktion=Mitarbeiter+l%F6schen

Wenn ich nur eine Checkbox anklicke geht alles wie am Schnürchen. :)

Wie kann ich diesen Fehler umgehen oder beheben?

Hier der Code:
Hier werden die Daten aus der Datenbank geholt und dann weiter gesendet mit dem Submit Button.

IF NOT objRecSet.EOF THEN

Do WHILE NOT objRecSet.EOF

%>
<TR>
<td><center>
<INPUT NAME="txtID" Type="checkbox"
value="<%response.write(objRecset("ID"))%>"></center></td>
<td><center><%response.write(objRecSet("ID"))%></center></td>
<td><%response.write(objRecSet("Nachname"))%></TD>
<td><%response.write(objRecSet("Vorname"))%></TD>
<td><p align="right"> <%SetLocale("de")
response.write FormatEuro((objRecSet("Monatssumme")))%></p></TD>
<td><center><%response.write FormatNumber(objRecSet("Urlaubstage"))%></center></TD>
<td><center><%response.write FormatNumber(objRecSet("Kranktage"))%></center></TD>
<td><%response.write(objRecSet("Anstellung"))%></TD>

<%
objRecSet.movenext
LOOP
ELSE
response.write("Es befindet sich kein Mitarbeiter in der Liste!")
END IF
Auslesen:
mID = request.form("txtID")

mSQL = "Select ID,Nachname,Vorname,Monatssumme,Urlaubstage,Kranktage from Mitarbeiterdaten where ID="&mID
objRecSet.open mSQL, objVerbindung

IF NOT objRecSet.EOF THEN
Do WHILE NOT objRecSet.EOF%>

<table border="1" bgcolor="#B0C4DE">
<TR>
<td><input Type="hidden" Name="txtID" value="<%response.write(objRecSet("ID"))%>"></td>
<td style="width:150"><b><%response.write(objRecSet("Vorname"))%>&nbsp<%response.write(objRecSet("Nachname"))%></b></TD><TD>Anzal der Tage:</TD><TD> Datum von...bis</TD>
</tr>
<tr>
<td></td><td style="width:150">Aktuelle Urlaubstage:</td><td style="width:150"><Input Type="zahl" Name="txtUrlaubstageaktualisieren" value=""></TD><td style="width:150"><Input Type="text" Name="txtUrlaubstagedatum" value=""></TD>
</tr>
<tr>
<td></td><td style="width:150">Aktuelle Kranktage:</td><td style="width:150"><Input Type="zahl" Name="txtKranktageaktualisieren" value=""></TD></TD><td style="width:150"><Input Type="text" Name="txtKranktagedatum" value=""></TD>
</tr>
<br>

<%
objRecSet.movenext
LOOP

Ich hoffe ihr könnt mir helfen. Bin langsam verzweifelt. Das Projekt muss in 2 Wochen abgeschlossen sein.

Vielen Dank schon mal im Voraus.

Liebe Grüße Myalein
 
Hi.

Du müßtest einfach den Ausdruck am Komma splitten und damit einen korrekten SQL Teilausdruck zusammenbauen:
Visual Basic:
mID = Join(Split(mID, ","), " or id = ")

Du solltest aber auf jeden Fall kontrollieren, das da keine gefährlichen Zeichen im Request drin stehen; Stichwort "SQL Injection".

Gruß
 
Hallo

viel lieben Dank für den Tip hat prima geklappt.

Hätte noch eine Frage, wie kann ich diese Fehlermeldung umgehen?

Ich denke mal mit einer Schleife, aber wie lautet hier die Abfrage?

IF mID = ? <- Fehlermeldung wegen den 2 Werte

response.write("Bitte wählen Sie nur einen Mitarbeiter aus!)

Gruß Myalein
 
Hi.
Hätte noch eine Frage, wie kann ich diese Fehlermeldung umgehen?

Ich denke mal mit einer Schleife, aber wie lautet hier die Abfrage?

IF mID = ? <- Fehlermeldung wegen den 2 Werte

response.write("Bitte wählen Sie nur einen Mitarbeiter aus!)
Ich weiß nicht was du meinst!? Willst du nur eine Fehlermeldung ausgeben wenn mehr als 1 Mitarbeiter ausgewählt wurde?

Übrigens, wenn es nur sinnvoll ist einen Mitarbeiter auszuwählen, dann solltest du lieber Radiobuttons anstatt von Checkboxen verwenden.

Gruß
 
Hallo

ja genau, es darf nur ein Mitarbeiter zum löschen ausgewählt werden, falls mehrer ausgewählt werden soll die Fehlermeldung kommen.
Das gleich muss ich dann bei Mitarbeiter ändern auch rein machen, da der gleich Fehler bei dem Button ja auch kommt.

Ich hab unter der Mitarbeiterliste insgesamt 3 Submit Buttons
- einmal Mitarbeiter ändern/hinzufügen
- einmal Mitarbeiter löschen
- und einmal, müssen mehrer Mitarbeiter ausgewählt werden die später dann in ein Word Dokument extrahiert werden soll.

Es sollen nicht mehrer Mitarbeiter auf einmal gelöscht werden.
Ich hab mal unten die Tabelle als Grafik angehängt :)

Gruß Michaela
 

Anhänge

  • Monatsabrechnung_Startseite2.jpg
    Monatsabrechnung_Startseite2.jpg
    33,4 KB · Aufrufe: 14
ja genau, es darf nur ein Mitarbeiter zum löschen ausgewählt werden, falls mehrer ausgewählt werden soll die Fehlermeldung kommen.
Das gleich muss ich dann bei Mitarbeiter ändern auch rein machen, da der gleich Fehler bei dem Button ja auch kommt.
Da wäre es aber wirklich besser (von der Usability Seite her) für jeden Mitarbeiter einen eigenen Button zum Löschen und Ändern in jede Zeile zu machen. Für den der mit dem Programm arbeiten soll ist es sehr ärgerlich wenn eine Aktion, die vom visuellen Empfinden her erlaubt ist, dann mit einer Fehlermeldung quittiert wird.

Um zu prüfen ob in mID mehrere IDs übergeben wurden, könntest du ja einfach prüfen ob dort ein Komma drin ist:
Visual Basic:
If InStr(mID, ",") <> 0 Then

Gruß
 
Zurück