该复选框在未选中时不能返回 False,但在选中时可以返回 True

Posted

技术标签:

【中文标题】该复选框在未选中时不能返回 False,但在选中时可以返回 True【英文标题】:The checkbox cannot return False when unchecked but can return True when checked 【发布时间】:2021-06-19 03:46:33 【问题描述】:

app.py

@app.route('/register',methods=['GET','POST'])
def register():
    if request.method == 'POST':
        details = request.form
        name = details['name']
        username = details['username']
        password = details['password']
        tel = details['tel']
        email = details['email']
        is_member = details['member']
        if is_member == 'on':
            is_member = True
        else:
            is_member = False
        cursor = mysql.connection.cursor()
        query = '''INSERT INTO customers (name,username,password,tel,email,member) VALUES(%s,%s,%s,%s,%s,%s)'''
        values = (name,username,password,tel,email,is_member)
        cursor.execute(query,values)
        mysql.connection.commit()
        cursor.close()
        return redirect(url_for('reg_success'))

    return render_template('reg_account.html')

reg_account.html

<script>
        $(doucment).ready(function()
            $("#submit_detail").click(function()
                $("#member").is(':checked',function()
                    if ($(this).is(':checked'))
                        $(this).attr('value',"True");
                     else
                        $(this).attr('value',"False");
                    
                    var is_member = $("#member").val();   
                ) 
            )
        )
    </script>
% block content % 
<form method="POST" class="login_details">
        <h3>Registration</h3>
        <!-- <legend>Log-in Details</legend> -->
        <p><label for="name">Name:</label><input type="text" name="name" id="name" size="35" required></p>
        <p><label for="tel">Mobile:</label><input type="text" name="tel" id="tel" size="35" required></p>
        <p><label for="email">Email:</label><input type="text" name="email" id="email" size="35"></p>
        <p><label for="username">Username:</label><input type="text" name="username" id="username" size="35" required></p>
        <p><label for="password">Password:</label><input type="text" name="password" id="password" size="35" required></p>
        <p><label for="cpw">Confirm password:</label><input type="text" name="cpw" id="cpw" size="35" required></p>
        <p><label for="member">Apply as member?</label><input type="checkbox" name="member" id="member"></p>
        <p><input type="submit" id="submit_detail" value="Register"></p>
    
</form>
% endblock %

错误:

werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
KeyError: 'member'

#member 中的复选框未选中时,我想让is_member 的结果返回False,但是我不明白为什么当我勾选复选框时它会起作用,然后结果可以存储到数据库中?我尝试调试了几次,但仍然找不到可能的解决方案,所以有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

检查一下

if 'member' in data:
# your code
else:
#your code

代替

is_member = data['member'] 

这里的问题是,如果未选中,您不会从 UI 发送成员。因此烧瓶无法在数据字典中找到它。

【讨论】:

details而不是data,因为我使用了details = request.form 是的。对不起,我的坏事

以上是关于该复选框在未选中时不能返回 False,但在选中时可以返回 True的主要内容,如果未能解决你的问题,请参考以下文章

PHP JQuery Checkbox - 如果复选框被预先选中,它不会在未选中时删除“选中”属性

选中复选框时如何将AJAX值发送为1,未选中时如何发送0?

如何在未选中时使check_box_tag发布'false'或'0'参数?

最初未选中时未触发复选框命令

如何查看是不是选中了 MFC 复选框

Oracle ApEx 复选框以在选中/未选中时操作其他值