Datenbankwerte als values in <input>

Django, Flask, Bottle, WSGI, CGI…
Antworten
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

Hallo ich bin es mal wieder....der Titel sagt eigentlich schon was ich will...
es geht um folgendes: Ich möchte eine Liste von Benutzern anzeigen und neben diesen eine Checkbox haben...nachdem ich einen Submit button geklickt habe sollen alle benutzer die mit einem häckchen markiert worden sind gelöscht werden.

bisher hab ich es so probiert:

in der main.py

Code: Alles auswählen

@route("/auser_edit")
@route("/auser_edit/")
def auser_edit (db):
	if cookie():
		sql = db.execute('SELECT StudName, StudMatrNr FROM Student') 
		return template("auser_edit",usersdata=search_readout(db,sql))	
	else:
		return template("login")
#get messagefield template
@route("/auser_edit_submit", method='POST')
@route("/auser_edit_submit/", method='POST')
def auser_edit_submit (db):
	if cookie():
		sql = db.execute('SELECT COUNT(*) FROM Student')
		row = sql.fetchone()
		if row:
			zahl = row[0]
			while zahl != 0:
				user = request.forms.get('users').decode('utf-8')
				print user
				zahl=zahl-1
				
		admin = adminCheck(db)
		if admin:
			return template("hauptmenu", adminpw=True)
		else:
			return template("hauptmenu", adminpw=False)
		
	else:
		return template("login")
in der *.tpl

Code: Alles auswählen

...			%for data in usersdata:
				<tr><td>{{data[0]}}<input type="checkbox" name="users" value="{{data[0]}}"> </td></tr>
			%end...
leider ergibt users immer "undefined" und nicht den Namen den ich gerne hätte...in der HTML wird der name aber angezeigt...kann man überhaupt den Namen einem Value im input zuweisen?

*edit: natürlich fehlt da noch der löschvorgang...den hab ich raus genommen solange das mit "value" nicht funktioniert-

Danke

Grüße
Zuletzt geändert von Anonymous am Mittwoch 22. Mai 2013, 08:34, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@DanJJo: Welches Rahmenwerk verwendest Du denn überhaupt?

Diese `cookie()`- und `adminCheck()`-Tests sollte man vielleicht in einen Decorator verlagern, damit man das nicht in jede Funktion einbauen muss.

Das was Du `sql` nennst ist ganz bestimmt kein SQL sondern ein Cursor-Objekt.

Als Wert zum Auswählen der Datensätze in den Checkboxen sollte man den Primärschlüssel der Datensätze verwenden, denn der Name muss nicht eindeutig sein. Und Primärschlüssel sind ja gerade dazu da Datensätze eindeutig zu identifizieren. Falls die `Student`-Tabelle dafür die `StudMatrNr` verwendet, würde ich die durch eine zusätzliche, „künstliche” ID ersetzen.

Der Quelltext in `auser_edit_submit()` macht überhaupt keinen Sinn. Da wird sehr umständlich n-mal das gleiche gemacht, mit n = Anzahl der Datensätze in der `Student`-Tabelle. Der Ausdruck führt ``request.forms.get('users').decode('utf-8')`` dabei bei jedem Schleifendurchlauf immer zum gleichen Wert. Die Schleife ist damit total sinnlos.

Was Du von `request.forms` haben möchtest (sofern es sich um Bottle handelt), sind *alle* Werte zu dem Schlüssel 'users'. Also nicht `get()`, sondern `getall()`.

Wenn Du den Wert 'undefined' bekommst, dann musst Du den auch ins `value`-Attribut vom letzten ausgewählten `<input>` geschrieben haben. Oder Du hast es nicht gesetzt?

Ansonsten könntest Du doch einfach mal mit einem kleinen Beispiel experimentieren. Statisches HTML mit einem `<form>` mit ein paar Checkboxen und eine Funktion die einfach nur erst einmal die Schlüssel und Werte von `request.form` ausgibt. Dann siehst Du wie diese beiden Sachen, Checkboxen in Forms und was vom Browser an den Server geschickt wird, zusammen arbeiten.
DanJJo
User
Beiträge: 90
Registriert: Mittwoch 13. Februar 2013, 18:35

es handelt sich um bottle...

Also ich übergebe "value" einen wert, wenn ich die seite aufrufe und daten auslese

Code: Alles auswählen

@route("/auser_edit")
@route("/auser_edit/")
def auser_edit (db):
	if cookie():
		sql = db.execute('SELECT StudName FROM Student') 
		return template("auser_edit",usersdata=search_readout(db,sql))	
	else:
		return template("login")
userdata enthält die dateien, die in der *.tpl den values übergeben werden

Code: Alles auswählen

                <p>
			<table id="tables">
			%for data in usersdata:
				<tr><td>{{data[0]}}<input type="checkbox" name="users" value="{{data[0]}}"> </td></tr>
			%end
			</table>
                </p>
aber wenn ich diese auslesen möchte kommt 'undefined' raus.
BlackJack

@DanJJo: Es nützt nicht viel den Quelltext aus dem ersten Beitrag noch einmal zu posten. Ich habe ja gesagt was Du jetzt machen solltest.
Antworten