我怎样才能让复选框将字符串传递给 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>
我现在正在做一个项目,但无法弄清楚一些事情。 我在 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>