'
+
if request.method == "POST": # Formular abgeschickt?
- name = request.form["name"].strip()
+ # .get() verhindert Abstürze, falls "name" mal fehlt
+ name = request.form.get("name", "").strip()
if name != "":
session["spieler"] = name # App merkt sich: das bist du
db = get_db()
@@ -23,9 +25,10 @@ def start():
)
db.commit()
db.close()
- return redirect("/app/raum/1")
+ # url_for generiert den Pfad dynamisch (sehr viel sicherer!)
+ return redirect(url_for("raum", id=1))
- html = '
Verlies
'
+ # Wenn kein POST gesendet wurde, läuft der Code hier einfach weiter:
if "spieler" in session:
db = get_db()
s = db.execute(
@@ -34,23 +37,15 @@ def start():
).fetchone()
db.close()
if s:
+ # Dynamische URL-Generierung auch hier für den Weiterspielen-Link
+ weiterspielen_url = url_for("raum", id=s["raum_id"])
html = html + '
Willkommen zurück, ' + session["spieler"] + '!
' \
- + 'Weiterspielen'
+ + 'Weiterspielen'
+
+ # Jetzt existiert 'html' garantiert immer
return html + ''
-
- if "spieler" in session:
- db = get_db()
- s = db.execute(
- "SELECT raum_id FROM spielstand WHERE spieler=?",
- (session["spieler"],)
- ).fetchone()
- db.close()
- if s:
- html = html + '
Willkommen zurück, ' + session["spieler"] + '!
' \
- + 'Weiterspielen'
- return html + ''
+ + ' '
+
@app.route("/raum/", methods=["GET", "POST"])
def raum(id):
@@ -63,27 +58,40 @@ def raum(id):
)
db.commit()
- r = db.execute("SELECT * FROM raeume WHERE id=?", (id,)).fetchone()
+ # Raum aus der DB holen
+ r = db.execute("SELECT * FROM r_aeume WHERE id=?", (id,)).fetchone()
+
+ # Fehlerbehandlung: Was, wenn die ID nicht existiert?
+ if r is None:
+ db.close()
+ abort(404, description="Dieser Raum existiert nicht!")
- if r["raetsel_frage"]: # Rätselraum?
+ # Rätselraum?
+ if r["raetsel_frage"]:
if request.method == "POST":
- if request.form["antwort"].strip() == r["raetsel_antwort"]:
+ user_antwort = request.form.get("antwort", "").strip()
+ if user_antwort == r["raetsel_antwort"]:
+ db.close() # DB schließen vor dem Return!
return "
Befreit!
"
- return 'Leider falsch. nochmal'
+
+ db.close() # DB schließen vor dem Return!
+ nochmal_url = url_for("raum", id=id)
+ return 'Leider falsch. nochmal'
+
+ db.close() # DB schließen vor dem Return!
return "
" + r["name"] + "
" + r["beschreibung"] + "
" \
+ ''
- # sonst: normaler Raum mit Ausgängen (wie bisher)
+ # Sonst: normaler Raum mit Ausgängen
ausgaenge = db.execute("SELECT richtung, nach_raum FROM ausgaenge WHERE von_raum=?", (id,)).fetchall()
- db.close()
+ db.close() # DB schließen für den normalen Pfad
html = "