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

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

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

Bottleは、PythonのWebサーバです。1つのPythonファイルで構成されており、非常に軽量。Web APIの作成や導入が簡単で、DjangoやFlaskに比べ使いやすくシンプルなことが特徴です。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

1679閲覧

htmlのselectの項目を動的にプログラムに渡したい

tonk

総合スコア22

Bottle

Bottleは、PythonのWebサーバです。1つのPythonファイルで構成されており、非常に軽量。Web APIの作成や導入が簡単で、DjangoやFlaskに比べ使いやすくシンプルなことが特徴です。

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/05/05 05:44

お世話になってます。
よろしくお願いいたします。

環境

python3.7
sqlite3
bottle

やりたいこと

スケジュール管理のプログラムを作っています。
スケジュールの進捗状況をプログラム側に渡したいのですが、一括で動的に取得する方法が分かりません。
以下は画面のスクショですが、ステータス列のプルダウンで項目を選び、ステータス更新をクリックするとそれぞれ反映されるように考えています。

イメージ説明

html側では次のように渡しています。

html

1<table> 2 <tr> 3 <td class="date">日付</td> 4 <td class="time">時間</td> 5 <td class="status">ステータス</td> 6 <td class="header">予定</td> 7 % for i in data_list: 8 <tr> 9 <td><a href="/edit/{{i["id"]}}">{{i["date"]}}</a></td> 10 <td>{{i["time"]}}</td> 11 <td> 12 <form method="POST" action="/update/{{i["id"]}}"> 13 <select name="status" value="{{i["status"]}}"> 14 % if i["status"] == "-": 15 <option value="" selected></option> 16 % else : 17 <option value=""></option> 18 % end 19 % if i["status"] == "完了": 20 <option value="完了" selected>完了</option> 21 % else : 22 <option value="完了">完了</option> 23 % end 24 % if i["status"] == "キャンセル": 25 <option value="キャンセル" selected>キャンセル</option> 26 % else : 27 <option value="キャンセル">キャンセル</option> 28 % end 29 </form> 30 </td> 31 <td>{{i["header"]}}</td> 32 </tr> 33 % end 34 <input type="submit" valu![イメージ説明](f469ba5c6de549abc0a204131c90cc35.png)タス更新"> 35</table>

プログラム側

python3

1from bottle import route, run, template, redirect, request 2import sqlite3 3 4db = "maindata.db" 5conn = sqlite3.connect(db) 6c = conn.cursor() 7create = "CREATE TABLE if not exists scheduler (id INTEGER PRIMARY KEY,date text,time text,header text,status text,body text)" 8c.execute(create) 9conn.commit() 10conn.close() 11 12@route("/") 13def index(): 14 input_data_list = [] 15 conn = sqlite3.connect(db) 16 c = conn.cursor() 17 select = "select * from scheduler" 18 c.execute(select) 19 for row in c.fetchall(): 20 input_data_list.append({"id":row[0],"date":row[1],"time":row[2],"header":row[3],"status":row[4],"body":row[5]}) 21 conn.commit() 22 conn.close() 23 return template("index",data_list=input_data_list) 24 25@route("/update/<i_id>",method="POST") 26def update(i_id): 27 data_01 = request.forms.getunicode("date") 28 data_02 = request.forms.getunicode("time") 29 data_03 = request.forms.getunicode("header") 30 data_04 = request.forms.getunicode("status") 31 data_05 = request.forms.getunicode("body") 32 conn = sqlite3.connect(db) 33 c = conn.cursor() 34 sql = "update scheduler set date=?,time=?,header=?,status=?,body=? where id =?" 35 c.execute(sql,(data_01,data_02,data_03,data_04,data_05,i_id,)) 36 conn.commit() 37 conn.close() 38 return redirect("/")

現在の状況

上記の内容でステータス更新を実行すると、次のように反映されます。
・id=1のステータスのみ更新、2以降は変化なし
・id=1のステータス以外はNoneで上書き

スクショだと次のようになります。
イメージ説明

以上です。
登録したスケジュールそれぞれで選択したステータスが一括で更新されればと思うのですが、
お気づきのところがあればご指摘いただけると助かります。
どうぞよろしくお願いいたします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問