Auswahl bei Auswahlliste in Liste speichern

Django, Flask, Bottle, WSGI, CGI…
Antworten
Bindl
User
Beiträge: 70
Registriert: Donnerstag 27. Oktober 2016, 11:48

Hi zusammen,

ich arbeite mit Flask, SQL und Python 3.4.
Ich möchte eine Auswahlformular erstellen bei dem der User auswählen kann welche "Userdaten" er ändern möchte.
Bisher haben wir immer einfach Formulare verwendet und mit

Code: Alles auswählen

request.form['xyz']
wurden die eingaben "ausgelesen".

Nun möchte ich die die gewählten options in eine Liste einfügen und diese dann in der Datenbank speichern, nur wie geht diese?
Ich stelle mir das irgendwie os vor:

Code: Alles auswählen

a=[]
a.append(selction)
Hier meine Auswahlformular. Die Actionanweisung zur entsprechenden Funktion in der .py Datei fehlt noch.
[codebox=html5 file=Unbenannt.html]<h1>Userdatenauswahl</h1>

<form>
<p>Welche Userdaten wollen Sie ändern?</p>
<select name="auswahl" size="5" multiple>
<option>Username</option>
<option>E-Mail Adresse</option>
<option>Passwort</option>
<option>Vorname</option>
<option>Nachname</option>
<option>Profilbild</option>
<option>Alter</option>
<option>Geschlecht</option>
<option>Studiengang</option>
</select>
<p class="subm1"><input type="submit" name="submit2" value="Jetzt ändern"></p>
</form>[/code]

Vielen Dank im voraus für die Hilfe
BlackJack

@Bindl: Schau Dir mal an was ``request.form.getlist('auswahl')`` als Ergebnis liefert.
Bindl
User
Beiträge: 70
Registriert: Donnerstag 27. Oktober 2016, 11:48

Hi,
danke erstmal für den ersten Tipp.
Leider habe ich doch einige Probleme.
Man loggt sich als User ein und kommt auf eine "Hauptseite", von der man auf die Userdatenverwaltungsseite kommt.
Die möchte ich erstellen.
Zuerst möchte ich mit einer Auswahlliste abfragen was man "verwalten", also ändern, möchte.
Das soll man dann auf einer folgenden Seite machen und nur die Formulare für die Werte die man anpassen möchte solln erscheinen.

Hier erstmal die "Auswahlseite"
[codebox=html5 file=Unbenannt.html]{% extends "layout.html" %}

{% block title %}- Userdatenauswahl{% endblock %}
{% block body %}

<h1>Userdatenauswahl</h1>

<form action="{{ url_for('user_auswahl') }}" method="post">
<p>Welche Userdaten wollen Sie ändern?</p>
<select name="auswahl" size="5" multiple>
<option>Username</option>
<option>E-Mail Adresse</option>
<option>Passwort</option>
<option>Vorname</option>
<option>Nachname</option>
<option>Alter</option>
<option>Geschlecht</option>
<option>Studiengang</option>
</select>
<p class="subm1"><input type="submit" name="submit2" value="Jetzt ändern"></p>
</form>

{% endblock %}[/code]

Ich glaube man erzeugt ein Array mit der ausgewählten Optionen.
Hier mal meine Funktion für das speichern des Arrays in die Datenbank.
Ich weiß leider nicht wie ich "ansteuern" die richtige Userzeile zu benutzen. Ich habe da mal "xxx" eingetragen.
die Spalte in die das Array eingespeichert werden soll heißt "user_wahl" und ich habe dieser den Datentyp VARCHAR(100) gegeben. Ich war mir da auch nicht sicher was ich als Datentyp einstellen soll.

Code: Alles auswählen

@app.route('/user_auswahl')
def user_auswahl():
    # Auswahl in Variable speichern
    wahl=request.form.getlist('auswahl')
    # Auswahl in Datenbank abspeichern
    con = mysql.connector.connect(host=dbhost, user=dbuser, password=dbpass, db=dbname)
    c = con.cursor()
    c.execute("UPDATE user SET user_wahl = %s WHERE user_name = %s", (wahl, xxx))
    con.commit()
    c.close()
    con.close()
    return render_template("user_verw.html")
user_verw.html ist die Seite die nach der Auswahl kommen soll.

Ich hoffe Ihr könnt mir helfen.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

die usability eines solchen Ansatzes halte ich ja für ziemlich schlecht. Eine mehrfachselektion ist immer klobig, und wenn es zu viele Einstellungen wären, würde man das eher durch eine Auswahl durch tabs oder ähnliches erledigen.

Und grundsätzlich sollte man in einer DB Daten nur speichern, die da auch auf Dauer hingehören, statt sich sein Schema mit Hilfsdaten für die Anwendung zuzumüllen.

Stattdessen sollte man diese Daten zB in eine Session speichern. Oder einfach als HTTP Variablen durch hidden input fields weiter durchschleifen. Das ist eigentlich die beste Lösung, da sie es zB erlaubt in mehreren Browser tabs gleichzeitig zu arbeiten.
Bindl
User
Beiträge: 70
Registriert: Donnerstag 27. Oktober 2016, 11:48

__deets__ hat geschrieben:Stattdessen sollte man diese Daten zB in eine Session speichern. Oder einfach als HTTP Variablen durch hidden input fields weiter durchschleifen. Das ist eigentlich die beste Lösung, da sie es zB erlaubt in mehreren Browser tabs gleichzeitig zu arbeiten.
Könntest du mir mal anhand eines beispielhaften Quellcode zeigen wie das geht?
Habe davon noch nie gehört.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Kann man auch ergoogeln. http://flask.pocoo.org/docs/0.12/quickstart/#sessions

Und wie man Eingabefehler mit existierenden Daten gefüllt ist auch recht gut dokumentiert.
Antworten