我怎样才能让复选框将字符串传递给 MySQL?

How can I can a checkbox to pass through a string into MySQL?

我现在正在做一个项目,但无法弄清楚一些事情。 我在 MySQL 中创建了一个 table,用户的主要输入是“消息”和“创建者” 我想做的是在“创建消息表单”上使用它,如果用户不希望输入他们的姓名,他们可以简单地获得一个复选框,并且“匿名”将作为“创建者”传递。 我还没弄清楚如何让“匿名”输入通过。 如果我键入我将“创建者”字段留空并选中复选框,我的验证将被调用并说字段不能为空,如果我删除验证则通过但在数据库中,创建者字段设置为空. 我的下一个方法是让创建者默认为“匿名” 在 MySQL 中,我 运行 这个“ALTER TABLE 消息 ALTER creator SET DEFAULT 'Anonymous';”并且它会再次调用验证,并且在没有验证的情况下,它仍然输入空数据。 我的下一次尝试可能是在我的验证中写一个 if 语句,但不完全确定如何写出来。 希望这个问题是有道理的...

更新:我已经创建了一个处理“匿名”复选框的 If 语句。当没有在文本输入字段中输入名称并且选中复选框时,“匿名”将被推送到 MySQL 数据库中。现在的问题是,如果我输入一个名称并且未选中该复选框,我会收到一个键错误

KeyError: 'creator2'

我认为这与我的 If 语句有关,但没有成功修复...

这是我在用户端的表单

<form action="/messages/create" method="post">
    <div>
        <label for="message">Enter Message</label>
        <textarea name="message" id="message" cols="30" rows="10"></textarea>
    </div>
    <div>
        <label for="creator">From</label>
        <!-- <small class="form-text text-muted"></small> -->
        <input type="text" name="creator1">
        <input type="checkbox" id="Anonymous" name="creator2" >Anonymous</input>
    </div>
    <input type="submit" value="Create">
</form>

这是我的控制器,用于处理带有错误 if 语句的表单。

@app.route("/messages/create", methods = ["POST"])
def create_message():
data = request.form.to_dict()
if data["creator2"]:
    data["creator"] = "Anonymous"
else:
    data["creator"] = data["creator1"]
if Message.message_validator(data):
    query_data = {
        "message": data["message"],
        "creator": data["creator"]
    }
    message_id = Message.create_message(query_data)
    return redirect("/")
return redirect("/messages/new")

首先,据我所知,在 HTML 中,字段 'id' 和 'name' 的值最好相同。它可能容易出错。

<input type="checkbox" id="anonymous" name="anonymous" >Anonymous</input>

接下来我会 link 带有输入的匿名复选框,因为当用户声明为匿名时它应该被禁用。

这样,您可以只使用 onClick 方法替换输入值,只看其内容。

<input type="checkbox" id="anonymous" name="anonymous" onclick='handleClick();'>Anonymous</input>

以 js 方式实现 'handleClick()' 方法。像 :

function handleClick() {
  var chk=document.getElementById("anonymous").value;
  // DO SOMETHING
}

好吧,我想我明白了为什么会发生这种情况,只有在提交时选中复选框时才会发送复选框的数据,这意味着当您提交表单而没有被选中时,您通过了 no有关该复选框的数据,就像它根本不存在一样,所以当您将提交的表单解析为字典时,您没有复选框的条目,从而引发 KeyError 异常。

一个解决方法是检查字典中是否存在关键字。

@app.route("/messages/create", methods = ["POST"]) 
def create_message():
    data = request.form.to_dict()

    if "creator2" in data:
        data["creator"] = "Anonymous"
    else:
        data["creator"] = data["creator1"]

    if Message.message_validator(data):
        query_data = {
            "message": data["message"],
            "creator": data["creator"]
        }
        message_id = Message.create_message(query_data)
        return redirect("/")

    return redirect("/messages/new")

我还建议在复选框中设置一个值,并为 name 和 if 使用相同的名称以避免错误

<input type="checkbox" id="Anonymous" name="Anonymous" value="Anonymous">Anonymous</input>