【環境】
・さくらのレンタルサーバ(スタンダードプラン)
・Pythonは2.6.2
・cgiについては経験が浅い初心者。
・ファイルはutf-8(BOMなし)で保存
【質問】
現在、変数を cgiurl?変数=値で渡したとき以下のように受取っています。以下のソース(500文字制限に引っかかってしまったので画像で添付しました。申し訳ありません)で示すようにcgiurl?変数=値で渡すと、falseが、?cgiファイルの中でテスト用に直接変数に値を入れてるとtrueが出力されます
値をprintすると正常に表示されたので、値のエンコードの問題(それ以外に原因が思いつきませんでした)と考え、確かめる方法を調べていますが今だ術を見つけられていません
ここで、あなたにお聞きしたいことがあります
1.この問題でどこが、どう怪しそうに思えますか?
2.この問題の解消方法を例文などで示していただけたら幸いです
(1)怪しい点
query.get
私が知らないだけかもしれないけれど見たことがないので、
class定義などが必要なはずだけど、
この箇所でエラーにならないということは、
パラメータがおかしいかclassのほうがおかしいのかもしれない。
(2)確認方法
ここでテスト用に・・・の部分にて、例えば下記のような具合で、
出力させればどのようなパラメータを受け取ったかが判るはずですが、確認されましたか?
print 'Content-type: text/html;charset=UTF-8\n\n' print '<html><body>' print '<hr />' print user print '<br />' print identity print '<hr />' print '</body></html>'
※困った時には、こまめにチェック用の出力を行うようにしてみてください。
(3)どうしてもダメな場合のための、別案
#!/usr/bin/python # -*- coding: utf-8 -*- import cgi f = cgi.FieldStorage() if f.has_key('username') and f['username'].value != '': user = f['username'].value else: user = 'no data' if f.has_key('identity') and f['identity'].value != '': identity = f['identity'].value else: identity = 'no data' print 'Content-type: text/html;charset=UTF-8\n\n' print '<html><body>' print '<hr />' print user print '<br />' print identity print '<hr />' print '</body></html>'
※これ単体で動きますから、動作確認用にでも使ってください。
※classにまとめたりせずベタに書いてますが、適宜対応してください。
エラーを特定する方法をお伝えしておきます。
まずは try ~ except 節を使わないように
if user: c = db.cursor() ...(略) print 'true'
とし、さらにファイル冒頭部分の import cgi の直前に
print 'Content-type:text/html;charset=utf-8' print '' import cgitb cgitb.enable()
という4行を追加してみてください。
すると実行時にエラーの詳細が出力されることと思います。
エラーを特定後、対策方法がご不明でしたら
またご質問なりコメントなりいただければと思います。
回答ありがとうがざいます。
問題が解決しました。原因は、c.execute(sql, (user, identify, time));という文の「identify」がスペルミスで「identity」でした。
この問題は、try ~ except 節のtryの中で発生したもので、十分にtryの中をエラーチェックしなかったことがそもそものミスでした。
今後は実行時にエラーの詳細を出したり、tryの中を特にクリーンに保つよう心がけて参ります。
回答ありがとうがざいます。
問題が解決しました。原因は、c.execute(sql, (user, identify, time));という文の「identify」がスペルミスで「identity」でした。
この問題は、try ~ except 節のtryの中で発生したもので、十分にtryの中をエラーチェックしなかったことがそもそものミスでした。
以降、気を付けてゆきます。
(1)怪しい点
query.getについては、query = cgi.parse()ということを事前に行っていました。ソースの転記ミスです、申し訳ありません。
(2)確認方法
XML形式の出力でしたが、同じように試していました
(3)どうしてもダメな場合のための、別案
わざわざありがとうございます。cgiで外から渡された値の受け取り方が複数あることを知りました。
テスト用にも役に立ちました。