Получить значение в веб-браузере и показать результат из БД с помощью скрипта Python CGI - PullRequest
0 голосов
/ 04 сентября 2018

Я создал скрипт CGI с использованием Python 3.6, в котором он будет принимать пользовательский ввод из 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 голосов
/ 04 сентября 2018

Обновите ваш код следующим образом (из-за отсутствия атрибутов входных данных, таких как '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 или флешку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...