在Web浏览器中发挥价值,并使用Python CGI脚本显示数据库的结果

时间:2018-09-04 13:21:08

标签: python cgi

我已经使用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()

输出:

enter image description here

我只给了一个值。

1 个答案:

答案 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