私はPythonでCGIをプログラミングしていて、CGIがFieldStorageというクラスの形式でPythonに情報を渡すことを発見しました。私が遭遇したクラスFieldStorageの主な属性は、フォームフィールドからデータを取得するための「getvalue」です。フィールドのID値を取得することは可能ですか?
編集
データを送信するフォームに関する独自の情報を取得できるかどうか疑問に思いました。これは、フォームと2つのスクリプトがあるためです。フォームの場合、アイテムの詳細を入力すると、script1がそのデータを取得してデータベースに保存します。保存されたアイテムデータをクエリし、フォームを作成し、フォームにデータを入力してアイテムの編集を可能にする別のscript2があります。ユーザーが編集した後、データはデータベースに更新されます。
更新されてデータベースに戻ると、問題が発生します。スクリプト1を使用して更新を実行したかったのですが、この場合はINSERTINTOを実行しません...UPDATE Table1を実行します...次に、編集または更新の要求を確認するにはどうすればよいですか。これを行っているのは、フォームに70個のフィールドがあり、別のスクリプトを作成すると、更新ロジックが追加されたscript1がコピーされるためです。これは私がスクリプトでやりたかったことです
script1.py
#!/usr/bin/env python
import cgi
import cgitb; cgitb.enable() # for troubleshooting
import MySQLdb
form = cgi.FieldStorage()
#there are 70 fields
id = form.getfirst("id");
error = form.getfirst("error");
comment = form.getfirst("comment");
product_name = form.getfirst("product_name");
verified_product_name = form.getfirst("verified_product_name");
url = form.getfirst("url");
verified_url= form.getfirst("verified_url");
.
.
.
source = form.getfirst("source");
print 'Content-type: text/html\r\n\r'
print '<html>'
print 'Update Successfull ! !'
print '</html>'
db = MySQLdb.connect(host="localhost", user="root", passwd="", db="products")
cursor = db.cursor()
sql=""
### Check the request---How do i do this?
if update: ##if the request is for updating
sql = """UPDATE item SET (id=id, error=error, comment=comment, product_name=product_name, verified_product_name=verified_product_name, url=url, verified_url=verified_url, image_url=image_url,..., source=source)"""
else: ##if the request is for inserting
sql = """INSERT INTO item (id, error, comment, product_name, verified_product_name, url, verified_url, image_url, verified_image_url, brand, verified_brand, type, verified_type, price, min_price, max_price, verified_price,..., source) VALUES ('%s', '%s', "%s", '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s',..., '%s')""" %(id, error, comment, product_name, verified_product_name, url, verified_url, image_url, verified_image_url, brand,..., source)
try:
cursor.execute(sql,(id, error, comment, product_name, verified_product_name, url, verified_url, image_url, verified_image_url, brand, verified_brand, type, verified_type, price, min_price, max_price, verified_price, measure_unit, ..., source))
db.commit()
except Exception as err:
db.rollback()
db.autocommit(True)
cursor.execute(sql)
cursor.fetchall()
db.close()
あなたが私の問題を手に入れたことを願っています。個別に更新を行うための別のスクリプトを作成せずにこれを行うことはできますか?