Auswahl bei Auswahlliste in Liste speichern

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

Auswahl bei Auswahlliste in Liste speichern

Beitragvon Bindl » Samstag 13. Mai 2017, 08:31

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
  1. 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:
  1. a=[]
  2. a.append(selction)


Hier meine Auswahlformular. Die Actionanweisung zur entsprechenden Funktion in der .py Datei fehlt noch.
  1. <h1>Userdatenauswahl</h1>
  2.  
  3. <form>
  4.     <p>Welche Userdaten wollen Sie ändern?</p>
  5.         <select name="auswahl" size="5" multiple>
  6.             <option>Username</option>
  7.             <option>E-Mail Adresse</option>
  8.             <option>Passwort</option>
  9.             <option>Vorname</option>
  10.             <option>Nachname</option>
  11.             <option>Profilbild</option>
  12.             <option>Alter</option>
  13.             <option>Geschlecht</option>
  14.             <option>Studiengang</option>
  15.         </select>
  16.     <p class="subm1"><input type="submit" name="submit2" value="Jetzt ändern"></p>
  17. </form>


Vielen Dank im voraus für die Hilfe
BlackJack

Re: Auswahl bei Auswahlliste in Liste speichern

Beitragvon BlackJack » Samstag 13. Mai 2017, 09:14

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

Re: Auswahl bei Auswahlliste in Liste speichern

Beitragvon Bindl » Samstag 13. Mai 2017, 15:07

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"
  1. {% extends "layout.html" %}
  2.  
  3. {% block title %}- Userdatenauswahl{% endblock %}
  4. {% block body %}
  5.  
  6. <h1>Userdatenauswahl</h1>
  7.  
  8. <form action="{{ url_for('user_auswahl') }}" method="post">
  9.     <p>Welche Userdaten wollen Sie ändern?</p>
  10.         <select name="auswahl" size="5" multiple>
  11.             <option>Username</option>
  12.             <option>E-Mail Adresse</option>
  13.             <option>Passwort</option>
  14.             <option>Vorname</option>
  15.             <option>Nachname</option>
  16.             <option>Alter</option>
  17.             <option>Geschlecht</option>
  18.             <option>Studiengang</option>
  19.         </select>
  20.     <p class="subm1"><input type="submit" name="submit2" value="Jetzt ändern"></p>
  21. </form>
  22.  
  23. {% endblock %}


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.

  1. @app.route('/user_auswahl')
  2. def user_auswahl():
  3.     # Auswahl in Variable speichern
  4.     wahl=request.form.getlist('auswahl')
  5.     # Auswahl in Datenbank abspeichern
  6.     con = mysql.connector.connect(host=dbhost, user=dbuser, password=dbpass, db=dbname)
  7.     c = con.cursor()
  8.     c.execute("UPDATE user SET user_wahl = %s WHERE user_name = %s", (wahl, xxx))
  9.     con.commit()
  10.     c.close()
  11.     con.close()
  12.     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.
Benutzeravatar
__deets__
User
Beiträge: 894
Registriert: Mittwoch 14. Oktober 2015, 14:29

Re: Auswahl bei Auswahlliste in Liste speichern

Beitragvon __deets__ » Samstag 13. Mai 2017, 15:24

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: 69
Registriert: Donnerstag 27. Oktober 2016, 11:48

Re: Auswahl bei Auswahlliste in Liste speichern

Beitragvon Bindl » Samstag 13. Mai 2017, 15:33

__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.
Benutzeravatar
__deets__
User
Beiträge: 894
Registriert: Mittwoch 14. Oktober 2015, 14:29

Re: Auswahl bei Auswahlliste in Liste speichern

Beitragvon __deets__ » Samstag 13. Mai 2017, 15:50

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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder