前提・実現したいこと
検索窓に特定の値を入力すると、作成済mysqlDBを見に行き、該当する値をとってきて表示するwebアプリを作りたい。
cgiプログラムにはpythonを使います。
xamppからappacheでサーバー起動しています。
現在は
http://creatornote.blog87.fc2.com/blog-entry-31.html
を参考に、jsからpythonにgetで送って、jsonpで値を返してきています。
検索窓への入力を「つー」にすれば単に「かー」と返すプログラムは動作するのですが(pythonファイル56行目)、
特定の入力に対して、mysqlを検索した結果を返して、表示することができません。(pythonファイル54行目)
この場合、500 Internal Server Errorなどは起こらず、送信ボタンを押しても何の反応もありません。
特定の入力(下記サンプルでは「60」)があれば、mysqlを検索した結果を返せるようにしたいです。
発生している問題・エラーメッセージ
入力「つー」・・・出力「かー」
入力「60」・・・反応なし
入力「上記2つ以外」・・・「よくわかりません」
反応がない
該当のソースコード
python
1#! C:/Users/username/python.exe 2# -*- coding: utf-8 -*- 3 4#GETメソッドでデータを受けとるおまじない 5import os 6import cgi 7#文字化け防止 8import sys 9import io 10sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8') 11 12#pymysql.cursorsのモジュールまでのパスを追加 13sys.path.append("c:\users\username\appdata\local\programs\python\python37\lib\site-packages") 14# DBconモジュール読み込み 15import pymysql.cursors 16 17if 'QUERY_STRING' in os.environ: 18 query = cgi.parse_qs(os.environ['QUERY_STRING']) 19else: 20 query = {} 21#おまじない ここまで 22 23a = str(query['a'][0]) #データaを文字列として読み込む 24ka = 'かー' 25no = 'よくわかりません' 26# MySQLに接続する 27 28connection = pymysql.connect(host='localhost', 29 user='user', 30 password='password', 31 db='dbname', 32 charset='utf8', 33 # cursorclassを指定することで 34 # Select結果をtupleではなくdictionaryで受け取れる 35 cursorclass=pymysql.cursors.DictCursor) 36 37# SQLを実行する(age=60のnameを取り出す。テストのためage=60は固定) 38with connection.cursor() as cursor: 39 sql = "SELECT name FROM tb1 WHERE age = 60" 40 cursor.execute(sql) 41 42 # Select結果を取り出す 43 results = cursor.fetchall() 44 45#文字列型に 46results = str(results) 47 48#出力 49print ('Content-Type:application/json; charset=UTF-8') 50print ('') 51 52#「60」と入力があれば、mysqlを検索した結果resultsを返す 53#「つー」と入力があれば、「かー」と返す 54if '60' in a: 55 print ("callback({'answer':'%s'});"%("あなた:"+a+"<br>bot:"+results)) 56if 'つー' in a: 57 print ("callback({'answer':'%s'});"%("あなた:"+a+"<br>bot:"+ka)) 58else: 59 print ("callback({'answer':'%s'});"%("あなた:"+a+"<br>bot:"+no))
html
1<!DOCTYPE html> 2<html> 3<head> 4<title>test</title> 5<meta http-equiv="content-type" charset="UTF-8"> 6<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 7<!-- jquery呼び出し --> 8<script type="text/javascript"> 9 10 11 function callback(json) { 12 $("#result").append("<br>"+json.answer); 13 } 14 15 function send() { 16 var s = document.createElement('script'); 17 a = document.form1.a.value; 18 param = "?a="+a 19 s.src = '/dashboard/cgi-bin/test.py'+param; 20 document.body.appendChild(s); 21 return false; 22 } 23</script> 24</head> 25<body> 26<form name="form1" onsubmit="return send()"> 27 <input type="text" name="a" value="わからないことを聞いてね"> 28 <input type="submit" value="送信" /> 29</form> 30<div id="result"></div> 31</body> 32</html>
試したこと
python-mysql間の接続ができていないのかと思いましたが、
ターミナルから直接pythonプログラムを起動すると、DB内の値をとってくることができたので、原因は別にあるのかなと。。。
回答1件
あなたの回答
tips
プレビュー