Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Python not executing past 1st if statement

I’m trying to make a simple POST to database based on the button clicked in the html.
My issue is that python doesn’t seem to iterate past the 1st if: I changed the order of the ifs and the first always works and the rest gives a 400 bad request error at line 34 (request.form[‘submit_button_pizza’])

@app.route('/<tableId>/menu',  methods=['GET', 'POST'])
def menu(tableId=None):
    conn = get_db_connection()
    pizzas = conn.execute('SELECT * FROM pizzas').fetchall()
    drinks = conn.execute('SELECT * FROM drinks').fetchall()
    desserts = conn.execute('SELECT * FROM desserts').fetchall()
    clientOrder = conn.execute('SELECT * FROM clientOrder').fetchall()
    
    conn.commit()
    
    
    if request.method == 'POST':
        if request.form['submit_button_pizza']:
            pass 
            conn.execute('INSERT INTO clientOrder (tableId, pizza) VALUES (?, ?)',[tableId, request.form['submit_button_pizza']])
            conn.commit()
            return render_template('menu.html', pizzas=pizzas,drinks=drinks, desserts=desserts, tableId=tableId)

        if request.form['submit_button_drink']:
            pass 
            conn.execute('INSERT INTO clientOrder (tableId, drink) VALUES (?, ?)',[tableId, request.form['submit_button_drink']])
            conn.commit()
            return render_template('menu.html', pizzas=pizzas,drinks=drinks, desserts=desserts, tableId=tableId)
            
        if request.form['submit_button_dessert']:
            pass 
            conn.execute('INSERT INTO clientOrder (tableId, dessert) VALUES (?, ?)',[tableId, request.form['submit_button_dessert']])
            conn.commit()
            return render_template('menu.html', pizzas=pizzas,drinks=drinks, desserts=desserts, tableId=tableId)
        else:
            return render_template('menu.html', pizzas=pizzas,drinks=drinks, desserts=desserts, tableId=tableId)

    elif request.method == 'GET':
        return render_template('menu.html', pizzas=pizzas,drinks=drinks, desserts=desserts, tableId=tableId)

How do I tell python to go to the next if if the first statement doesn’t exist (because I didn’t click that button) ?

Thanks for any help

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

The issue is the request.form['submit_button_pizza'] condition check. If your form does not have the key "submit_button_pizza", this will cause an error.

Try instead with a request.form.get('submit_button_pizza') to check if the key exists and then proceed.

Another thing : if your form is going to have only one submit condition at a time, then use a if-elif-elif-else sequence to just check one of the conditions. If your current if-if-if-else is by design then ignore this comment 🙂

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading