質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

530閲覧

javascriptの何かが変でpythonのrequest.form.getで値が上手く取れない

toku_code

総合スコア1

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2022/09/01 02:05

編集2022/09/01 02:19

前提

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 %}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ぱっと見で「ここが怪しいかも?」と思った点をひとつ挙げると、以下の行

javascript

1category.innerHTML='これが内容です'

category という変数はどこで定義されているのか?という点です。innerHTML プロパティに文字列を設定しているので categoryには何らかのHTML要素が取得できている必要がありますが、要素を取得して category に入れるコードが見当たらないです。

投稿2022/09/01 04:04

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toku_code

2022/09/01 05:24

ありがとうございます!! .innerHTML構文を除いたら上手く通るようになりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問