我現在正在做一個專案,但無法弄清楚一些事情。我在 MySQL 中創建了一個表,用戶的主要輸入是“訊息”和“創建者”我想要做的是在“創建訊息表單”中使用它,如果用戶希望不輸入他們的名稱,他們可以簡單地獲得一個復選框,并且“匿名”將作為“創建者”傳遞。我無法弄清楚如何讓“匿名”輸入通過。如果我鍵入我將“創建者”欄位留空并選中復選框,我的驗證被呼叫并說欄位不能為空,如果我洗掉驗證則通過但在資料庫中,創建者欄位設定為空. 我的下一個方法是讓創建者默認設定為“匿名” 在 MySQL 中,我運行了這個“ALTER TABLE messages ALTER creator SET DEFAULT 'Anonymous';” 它會再次呼叫驗證,并且沒有驗證,它仍然將資料輸入為空。我的下一個嘗試可能是在我的驗證中寫一個 if 陳述句,但不完全確定如何寫出來。希望這個問題有意義...
更新:我已經創建了一個處理“匿名”復選框的 If 陳述句。如果沒有在文本輸入欄位中輸入名稱,并且選中了復選框,那么“匿名”就會被推送到 MySQL 資料庫中。現在的問題是,如果我輸入名稱并且未選中該復選框,我會收到一個關鍵錯誤
鍵錯誤:'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 ></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")
uj5u.com熱心網友回復:
好的,我想我知道為什么會發生這種情況,只有在提交時選中復選框時才會發送復選框的資料,這意味著當您提交表單而未選中它時,您不會傳遞有關該復選框的任何資料,就像它根本不存在一樣,所以當您將提交的表單決議為字典時,您沒有復選框的條目,從而引發 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>
uj5u.com熱心網友回復:
首先,據我所知,在 HTML 中最好為欄位“id”和“name”設定相同的值。它可能容易出錯。
<input type="checkbox" id="anonymous" name="anonymous" >Anonymous</input>
接下來我會將匿名復選框與輸入鏈接,因為當用戶宣告為匿名時它應該被禁用。
這樣,您可以只使用 onClick 方法替換輸入值并僅查看其內容。
<input type="checkbox" id="anonymous" name="anonymous" onclick='handleClick();'>Anonymous</input>
以 js 方式實作“handleClick()”方法。就像是 :
function handleClick() {
var chk=document.getElementById("anonymous").value;
// DO SOMETHING
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/487049.html
