Я вставляю значения в таблицу sqlite3 в оболочке Python (работает хорошо), но не в сценарии CGI.
#!/usr/bin/python3
import cgi,cgitb
import sqlite3
cgitb.enable()
print('Content-type: text/html\r\n\r\n')
print('<html>')
print('<head><title>Registration</title></head>')
print('<body>')
form = cgi.FieldStorage()
if form.getvalue('name'):
name=str(form.getvalue('name'))
else:
name=None
if form.getvalue('email'):
email=str(form.getvalue('email'))
else:
email=None
if form.getvalue('password'):
password=str(form.getvalue('password'))
else:
password=None
try:
con = sqlite3.connect('users.db')
cur=con.cursor()
val=(name,email,password)
with con:
sql='''INSERT OR REPLACE INTO USER_INFO(NAME,EMAIL,PASSWORD) VALUES(?,?,?)'''
cur.execute(sql, val)
con.commit()
htmlf='''<html><title>Registration</title><body><p>Account {email} Stored in Record</p></body></html>'''
print(htmlf.format(email=email))
con.commit()
except sqlite3.Error:
if con:
con.rollback()
con.close()
print("<form method='post' action='h.py'>")
print("<p>Registration</p>")
print("<p>Enter Name: <input type='text' name='name' /></p>")
print("<p>Enter E-mail ID: <input type='text' name='email' /></p>")
print("<p>Enter Password:<input type='password' name='password' /></p>")
print("<input type='submit' value='Submit' />")
print("</form>")
print("</body>")
print("</html>")
Если я использую оболочку python для вставки значений, то она работает нормально.
Но не в скрипте CGI
Я изменил режим файла базы данных sqlite3 на 777 и поместил базу данных в тот же каталог этого файла Python CGI.
Ничего не работает
После того, как я нашел проблему в каталоге базы данных и в файле базы данных.
Используя эту команду,
chgrp www-data databasedir
chgrp www-data databasedir/mydb.db
chmod g+w databasedir
chmod g+w databasedir/mydb.db
Работает нормально
Я сомневаюсь, почему команда insert sqlite3 работала в оболочке python (путь к каталогу базы данных cd как суперпользователь) и работала в сценарии cgi, но после изменения разрешения базы данных
Любая помощь, спасибо