前提
HTMLとjavascriptとpython、mysqlを使っています。
自分の取り出したいカテゴリを選択するとpromptが出てきていくつかの質問に正しく回答するとそのカテゴリの内容が表示されるという機能を作ろうとしています。
実現したいこと
HTMLのカテゴリボタンを押したらpromptが3回出て、全て正しく回答したらそのカテゴリの値をpythonに渡す。
その渡された値を元に該当する内容を持ってきて表示したい。
失敗したときには失敗メッセージを出す。
発生している問題・エラーメッセージ
sqlalchemy.exc.CompileError: Don't know how to render literal SQL value: None
このコードで言うとrecordの値がpythonでのcategory = request.form.get("record")の時に上手く渡されておらずエラーになってる模様です。
javascriptのコードを消したら問題なく値を渡せて機能もしました。ですのでそこが何かおかしいのかと思います。
該当のソースコード
python
1@project.route("/record", methods =["GET", "POST"]) 2@login_required 3def record(): 4 """Show history of transactions""" 5 if request.method == "POST": 6 7 category = request.form.get("record") 8 print(category) 9 content = category 10 try: 11 content = db.execute("SELECT content FROM manager WHERE category = ?", category) 12 content = content[0]['content'] 13 except: 14 return redirect("/record") 15 return render_template("content.html", content=content) 16 17 else: 18 user_id = session["user_id"] 19 #登録しカテゴリーを表示するためにSELECT 20 record_answer = db.execute("SELECT category FROM manager WHERE user_id = ?", user_id) 21 #リスト型の不要なもの取り除いて値だけ渡す 22 record_number = record = db.execute("SELECT count(category) FROM manager WHERE user_id = ?", user_id) 23 record_number = record_number[0]['count(category)'] 24 record = list() 25 for i in range(record_number): 26 record.append(record_answer[i]['category']) 27 #設定済みのQとAをSELECT 28 question_answer_data = db.execute("SELECT answer.answer, id_key.question FROM id_key INNER JOIN answer ON id_key.question_id = answer.question_id WHERE user_id = ?", user_id) 29 number = db.execute("SELECT count(answer) FROM answer WHERE user_id = ?", user_id) 30 number = number[0]['count(answer)'] 31 #リスト型を宣言してそれにSELECT内容の値だけを入れていく 32 question = list() 33 answer = list() 34 for i in range(number): 35 question.append(question_answer_data[i]['question']) 36 answer.append(question_answer_data[i]['answer']) 37 38 return render_template("record.html", record=record, question=question, answer=answer)
html
1{% extends "layout.html" %} 2 3{% block title %} 4 Record 5{% endblock %} 6 7{% block main %} 8 <table class="table"> 9 <thead> 10 <tr> 11 <th scope="col">This page, you can see your secret</th> 12 </tr> 13 </thead> 14 <tbody> 15 <tr> 16 <th> 17 <form action="/record" method="post" id="category" onsubmit="return check();"> 18 <select name="record" id="record"> 19 {% for row in record %} 20 <option value="{{ row }}" name="select_category">{{ row }}</option> 21 {% endfor %} 22 </select> 23 <button id="btn_id" type="submit" style="background: #6495ed;">Check</button> 24 </form> 25 </th> 26 </tr> 27 28 <script> 29 let question = {{ question | tojson }} 30 let answer = {{ answer | tojson }} 31 let record = {{ record | tojson }} 32 function check() 33 { 34 var collect = 0; 35 console.log(record); 36 for (let step = 0; step < 3; step++) 37 { 38 var rand = Math.floor(Math.random()*question.length); 39 var rValue = question[rand]; 40 enter_answer = window.prompt(rValue); 41 if(enter_answer == answer[rand]){ 42 collect++; 43 console.log("正解"); 44 if(collect == 3) 45 { 46 category.innerHTML='これが内容です' 47 } 48 } 49 else if(enter_answer == null) 50 { 51 return false; 52 } 53 else if(enter_answer == "") 54 { 55 alert('値を入力してください'); 56 return false; 57 } 58 else 59 { 60 console.log('回答が間違っています。'); 61 alert('本人確認が出来ません。'); 62 return false; 63 } 64 } 65 } 66 </script> 67 68 </tbody> 69 </table> 70{% endblock %}

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/09/01 05:24