Ich versuche, Registrierung mit WTF-Formulare zu arbeiten, und ich bin konfrontiert mit einem SQL-Syntaxfehler, wenn ich versuche, Daten durch Flaschendurchführung injizieren. Aber ich kann die Daten mithilfe der normalen SQL-Abfrage über die mysql-Befehlszeile einfügen.Fehler 1064 SQL Syntaxfehler
from wtforms import Form, BooleanField, StringField, PasswordField, validators
from MySQLdb import escape_string as thwart
class RegistrationForm(Form):
username = StringField('Username', [validators.Length(min=4, max=25)])
email = StringField('Email Address', [validators.Length(min=6, max=35)])
password = PasswordField('New Password', [validators.DataRequired(), validators.EqualTo('confirm', message='Passwords must match')])
confirm = PasswordField('Repeat Password')
accept_tos = BooleanField('I accept the TOS', [validators.DataRequired()])
# for registering the user
@app.route('/register/', methods = ['GET', 'POST'])
def register_page():
try:
form = RegistrationForm(request.form)
if request.method == 'POST' and form.validate():
username = form.username.data
email = form.email.data
password = sha256_crypt.encrypt(str(form.password.data))
c, conn = connection()
x = c.execute("SELECT * FROM users WHERE username = '(%s)'" %(thwart(username),))
#x = c.fetchone()
if int(x) > 0:
flash ("that username already taken, please take another")
return render_template("register.html", form =form)
else:
c.execute("INSERT INTO users (username, password, email, tracking) VALUES (%s, %s, %s, %s)" %(thwart(username), thwart(password), thwart(email), thwart('/home/')))
c.commit()
flash("Thanks for registering")
c.close()
conn.close()
gc.collect()
session['logged_in'] = True
session['username'] = username
return redirect(url_for('dashboard'))
return render_template("register.html", form = form)
except Exception as e:
return render_template("register.html", error = e, form = form)
Der Fehler kann es unter Nach Eingabe des Passworts und passender sie mit bestätigen und Absenden finden. Ich erhalte einen Fehler. Kann mir bitte jemand dabei helfen.
Das funktionierte. Aber ich bekomme einen neuen Fehler namens 'str' Objekt ist nicht nach der Implementierung dieses Codes aufrufbar. @Tim Biegeleisen – Bhargav
Kannst du mir wenigstens eine Zeilennummer geben, wo der Fehler passiert? –
'password = sha256_crypt.encrypt (str (form.password.data))' ... bist du sicher, dass du kein anderes Problem mit deinem Code hast? –