2016-04-03 5 views
0

Ich versuche eine Benutzerregistrierungsseite mit Flask, MySQL und HTML-Formularen zu erstellen. Dieser Fehler tritt auf, wenn ich versuche, Daten vom Formular an die Datenbank zu senden. Kann jemand sehen, wo ich mit der SQL falsch gelaufen sein könnte?Warum generiert meine Webanwendung beim Versuch, eine INSERT-Abfrage zu senden, einen 1064 (42000) -Fehler?

Der vollständige Fehler empfangen ist:

1064 (42000): Sie haben einen Fehler in der SQL-Syntax; das Handbuch überprüfen, die für die richtige Syntax zu Ihrer MySQL-Server-Version entspricht in der Nähe von ‚% s‘ in Zeile 1

Meine Verbindungsfunktion zu verwenden ist:

import mysql.connector 
from flask import * 

def connection(): 
    conn = mysql.connector.connect(host="localhost", db="user_login",user="root", 
           password="password") 
    c = conn.cursor() 
    return c, conn 

Diese im init importiert wird Py Datei und unten genannt:

class RegistrationForm(Form): 
    firstName = StringField('First Name', [validators.Length(min = 3, max = 25)]) 
    lastName = StringField('Surname', [validators.Length(min = 3, max = 25)]) 
    username = StringField('Username', [validators.Length(min = 4, max = 25)]) 
    email = StringField('Email Address', [validators.Length(min = 6, max = 50)]) 
    password = PasswordField('Password', [validators.required(), 
             validators.EqualTo('confirm', message = 'Passwords must match')]) 
    confirm = PasswordField('Repeat Password') 


@app.route('/register/', methods = ['GET', 'POST']) 
def register_page(): 
    try: 
     form = RegistrationForm(request.form) 

     if request.method == "POST" and form.validate(): 
      firstName = form.firstName.data 
      lastName = form.lastName.data 
      username = form.username.data 
      email = form.email.data 
      password = form.password.data 
      is_admin = 0 
      c, conn = connection() 


      x = c.execute("SELECT * FROM users WHERE username = %s",(username)) 

      if int(x) > 0: 
       flash("That username is already taken, please choose another") 
       return render_template('register.html', form = form) 
      else: 
       c.execute(""" 
         INSERT INTO users (firstName, lastName, username, email, password, is_admin) 
         VALUES (%s, %s, %s, %s, %s, %s) 
         """,(firstName, lastName, username, email, password, is_admin)) 
       conn.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(str(e)) 

Antwort

0

ich denke, das Problem ist die SELECT, nicht die INSERT. Sie übergeben (username) als Parameter - das ist nicht ein Tupel. Sie müssen ein nachstehendes Komma verwenden:

x = c.execute("SELECT * FROM users WHERE username = %s", (username,)) 
+0

Vielen Dank! Ich änderte dies und fing an, einen Fehler zu erhalten, der sagte, dass "int() Argument eine Zeichenkette oder eine Zahl sein muss, nicht" NoneType "". Ich glaube, es war, weil X eine Liste zurückgegeben hat. Ich habe dies bearbeitet, um "if len (x)> 0:" zu sagen und es wird in meine Datenbank gepostet. Danke nochmal. – sh7289

Verwandte Themen