ユーザ情報の検索
ユーザ情報の検索
ログインに成功したら,
Usersテーブルからユーザの名前や電話番号などの情報を検索し,
画面に表示しましょう.
main.py にユーザ情報を検索・表示するための
showUserInfo
関数を定義します.
この関数では,SELECT文とWHERE句を利用して,
指定されたユーザIDの氏名,電話番号,メールアドレスを検索します.
また,検索された情報はp
タグで表示されます.
# ユーザ情報の検索・表示
def showUserInfo(id):
sql = "SELECT name,tel,mail FROM Users WHERE id='" + id + "';"
records = cur.execute(sql)
record = records.fetchone()
name = record[0]
tel = record[1]
mail = record[2]
print("<p>氏名: " + name + "</p>")
print("<p>電話番号: " + tel + "</p>")
print("<p>メールアドレス: " + mail + "</p>")
main.py の下記部分で,
定義したshowUserInfo
関数を呼び出します.
ログインに成功したときだけ,ユーザの情報が表示されることに注意してください.
if pw == None:
print("<p>IDが存在しません</p>")
print("<p><a href='../login.html'>戻る</a></p>")
else:
if form_pw == pw[0]:
print("<p>ログインに成功しました</p>")
# ユーザ情報の検索・表示
showUserInfo(form_id)
else:
print("<p>パスワードが一致しません</p>")
print("<p><a href='../login.html'>戻る</a></p>")
ID:u01 ,パスワード:X2ng でログインしてみましょう. 下記のように表示されれば正しく動作しています.
購買履歴の検索
ユーザの購買履歴も合わせて表示しましょう.
購買履歴はHistoriesテーブルから検索します.
main.py に購買履歴を検索・表示するためのshowUserHistory
関数を定義します.
この関数では,SELECT文とWHERE句を利用して,ユーザが購入した履歴を表示します.
# ユーザの購買履歴の検索・表示
def showUserHistory(id):
sql = "SELECT * FROM Histories WHERE user_id='" + id + "'";
records = cur.execute(sql)
print("<h2>購買履歴</h2>")
for record in records:
print("<p>" + str(record) + "</p>")
先程と同様に,定義したshowUserHistory
関数を呼び出します.
# ユーザ情報の検索・表示
showUserInfo(form_id)
# ユーザの購買履歴の検索・表示
showUserHistory(form_id)
ID:u01 ,パスワード:X2ng でログインしてみましょう. 下記のように表示されれば正しく動作しています.
上述の方法では,商品IDは表示されますが,商品名が分かりません.
そこで,showUserHistory
関数を,商品名も表示されるように修正しましょう.
商品名を表示するには,HistoriesテーブルとItemsテーブルを結合(内部結合)する必要があります.
そこで,SELECT文 で INNER JOIN 句を利用して,テーブルを結合します.
# ユーザの購買履歴の検索・表示
def showUserHistory(id):
sql = "SELECT * FROM Histories INNER JOIN Items ON Histories.item_id=Items.id WHERE user_id='" + id + "'";
records = cur.execute(sql)
print("<h2>購買履歴</h2>")
for record in records:
print("<p>" + str(record) + "</p>")
結合した結果は下記のように表示されます.
表示されたレコードはユーザIDや商品IDなど不要なデータが含まれています.
そこで,SELECT文で射影をして,購入日時,商品名,価格のみを表示させましょう.
また,table
タグで見た目をを整形しておきます.
# ユーザの購買履歴の検索・表示
def showUserHistory(id):
sql = "SELECT time,name,price FROM Histories INNER JOIN Items ON Histories.item_id=Items.id WHERE user_id='" + id + "'";
records = cur.execute(sql)
print("<h2>購買履歴</h2>")
table = "<table border=`1``>"
table += "<tr>"
table += "<th>time</th>"
table += "<th>name</th>"
table += "<th>price</th>"
table += "</tr>"
for record in records:
table += "<tr>"
for column in record:
table += "<td>"
table += str(column)
table += "</td>"
table += "</tr>"
table += "</table>"
print(table)
この結果,下記のように表示されればOKです.