teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

現在までに作成したコードを掲載致しました。

2021/01/18 02:22

投稿

jyansinkai
jyansinkai

スコア66

title CHANGED
File without changes
body CHANGED
@@ -5,4 +5,81 @@
5
5
  しかし、これですと、URLがCGIのものに変わってしまいます。
6
6
  **URLを遷移させることなく、一行入力フォームの内容をすぐに検索、結果を表示させる**、ということは可能なのでしょうか?
7
7
 
8
+ -追記-
9
+
10
+ まずinput.pyで各種情報を入力しますが、この中の「活動場所」に数字を入れた際、それを「basyoID」として認識し、basyo.dbに入っているデータから「basyoNAME」を検索、それを直ちに表示させたいのです。
11
+
12
+ input.pyがこちらです。
13
+
14
+ ```python
15
+ #!/usr/local/bin/python3
16
+ # -*- coding: utf-8 -*-
17
+
18
+ import sys
19
+ import io
20
+ import sqlite3
21
+ import cgi
22
+ import cgitb
23
+ cgitb.enable()
24
+ # 文字化け回避
25
+ sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
26
+
27
+ # HTMLここから
28
+ #print("Content-type: text/html; charset=utf-8")
29
+ print('Content-Type: text/html; charset=UTF-8\n')
30
+ print(
31
+ """
32
+ <html lang="ja">
33
+ <head>
34
+ <meta charset="utf-8">
35
+ <TITLE></TITLE>
36
+ </HEAD>
37
+ <BODY>
38
+
39
+ <FORM name="form" method="post" action="basyo_kensaku.py">
40
+ <P>避難場所</P>
41
+ <P>活動場所ID</P>
42
+ <INPUT size="8" type="text" maxlength="8" required name="basyoID">
43
+ <P>上の入力フォームにIDを入力したら、この場所にbasyo.dbから検索した場所を表示させたいです。</P>
44
+ <BR>
45
+ </BODY>
46
+ </HTML>
47
+ """
48
+ )
49
+
50
+ # データベース接続
51
+ conn = sqlite3.connect('basyo.db')
52
+ c = conn.cursor()
53
+ # テーブル作成
54
+ c.execute('CREATE TABLE IF NOT EXISTS basyo(basyoID integer, basyoNAME text);')
55
+
56
+ ```
57
+ 続いて、場所を検索させるbasyo_kensaku.pyがこちらです。
58
+ ```python
59
+ #!/usr/local/bin/python3
60
+ # -*- coding: utf-8 -*-
61
+
62
+ import sys
63
+ import io
64
+ import sqlite3
65
+ import cgi
66
+ import cgitb
67
+ cgitb.enable()
68
+
69
+ # 文字化け回避
70
+ sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
71
+
72
+ # データベースに接続する
73
+ conn = sqlite3.connect('basyo.db')
74
+ c = conn.cursor()
75
+
76
+ #formにセットされた値を取得
77
+ form = cgi.FieldStorage()
78
+ basyoID = form.getfirst('basyoID','')
79
+ #basyoIDでbasyo.dbを検索
80
+ sql = ('SELECT basyoNAME from basyo where basyoID=' + basyoID)
81
+ c.execute(sql)
82
+ basyoNAME = c.fetchone
83
+ ```
84
+
8
85
  以上、何卒ご教授下さいませ。