我已经使用python 3.6创建了一个CGI脚本,其中它将从HTML表单中获取用户输入,然后根据该值搜索数据库。
如何获取输入并根据值过滤数据?我当前的脚本正在显示整个表格,而不是进行过滤。
基本输出需要基于“在哪里”条件。
HTML脚本:
<!DOCTYPE html>
<html>
<body>
<h1>Sender ID Blacklist</h1>
<p>Please enter Sender id below</p>
<form method='get' action='http://localhost/cgi-bin/test3.cgi'>
<p>Senderid: <input type='text' Senderid='send' /></p>
<input type='submit' value='Submit' />
</form>
</body>
</html>
下面是CGI脚本(test3.cgi):
import mysql.connector as mx
import sys
import cgi
import cgitb
def htmltop():
print("""Content-type: text/html\r\n\r\n
<!DOCTYPE html>
<html>
<body>Output:""")
def htmltail():
print("""</body></html>""")
def connectdb():
mydb=mx.connect(host='127.0.0.1',
user='root',
passwd='',
port='3306',
database='arghad')
cur=mydb.cursor()
return mydb,cur
def Blacklist(mydb,cur):
query="select * from arghad.test"
cur.execute(query)
result=cur.fetchall()
return result
def displaytest(result):
print("<table border='5'>")
print("<tr>")
print("<th>senderid</th>")
print("<th>route</th>")
print("<th>time</th>")
print("</tr>")
for x in result:
print("<tr>")
print("<td>{0}</td>".format(x[0]))
print("<td>{0}</td>".format(x[1]))
print("<td>{0}</td>".format(x[2]))
print("</tr>")
print("</table>")
if __name__ == '__main__':
try:
htmltop()
form = cgi.FieldStorage()
mydb,cur=connectdb()
result=Blacklist(mydb,cur)
displaytest(result)
cur.close()
htmltail()
except:
cgi.print_exception()
输出:
我只给了一个值。
答案 0 :(得分:0)
以这种方式更新您的代码(因为没有诸如“ Senderid”之类的输入属性)<input type='text' name='senderid' />
然后像这样更新您的python代码
def Blacklist(mydb,cur, senderid):
query="select * from arghad.test where senderid=" + senderid
cur.execute(query)
result=cur.fetchall()
return result
比打电话给黑名单时要使用
result=Blacklist(mydb,cur, form["senderid"])
编辑:请注意,这不是从数据库中查询易受SQL注入攻击的安全方法,我建议您使用Django或flask