When i try to enter data in a text field in Greek letters my wsgi script saves that data as jibberish in the MySQL database and i dont know why. Here is the relative code when the data is about to be posted via form method:
pdata = pdata + '''
<form methods="POST" enctype="multipart/form-data" action="%s">
<tr>
<td> <center> <input type="text" name="task" size=50> </td>
<td> <center> <input type="text" name="price" size=5> </td>
<td> <center> <input type="text" name="lastvisit"> </td>
</table><br><br>
<td> <input type="image" src="/static/img/submit.gif" name="update" value="Ενημέρωση!"> </td>
</tr>
</form>
''' % app.get_url( '/update/<name>', name=name )
pdata = pdata + "<meta http-equiv='REFRESH' content='200;%s'>" % app.get_url( '/' )
return pdata
And here is the relative callback function who tries to enter the posted-form data into MySQL database.
@app.route( '/update/<name>' )
def update( name ):
pdata = ''
task = request.query.get('task')
price = request.query.get('price')
lastvisit = request.query.get('lastvisit')
# check if date entered as intented, format it properly for MySQL
lastvisit = datetime.strptime(lastvisit, '%d %m %Y').strftime('%Y-%m-%d')
if( ( task and len(task) <= 200 ) and ( price and price.isdigit() and len(price) <= 3 ) and lastvisit != "error" ):
# find the requested client based on its name
cur.execute('''SELECT ID FROM clients WHERE name = %s''', name )
clientID = cur.fetchone()[0]
try:
# found the client, save primary key and use it to issue hits & money UPDATE
cur.execute('''UPDATE clients SET hits = hits + 1, money = money + %s WHERE ID = %s''', ( int(price), clientID ))
# update client profile by adding a new record
cur.execute('''INSERT INTO jobs (clientID, task, price, lastvisit) VALUES (%s, %s, %s, %s)''', ( clientID, task, price, lastvisit ))
except:
cur.rollback()
I cannot understand why the data is stored into database as jibberish instead of proper utf-8. Also trying to use utf-8 encoding type didn't work either.
<form methods="POST" enctype="utf-8" action="%s">