做了一個python腳本,從資料庫讀取資訊然后發送到html頁面。
用cmd運行是沒有問題的,但是用html鏈接打開就會出現服務器內部錯誤,查找log-error,發現以下內容:
[Thu Jun 18 15:03:03.949984 2020] [cgi:error] [pid 2348:tid 1768] [client 117.131.117.100:57529] malformed header from script 'test.py': Bad header: fname=Mac,lname=Mohan,age=202,, referer: http://www.ppotest.club/test5/test.html
python檔案如下:
#!C:\Users\Administrator\AppData\Local\Programs\Python\Python38\python.exe
# -*- coding: UTF-8 -*-
# 引入 CGI 處理模塊
import cgi, cgitb
import pymysql
fname=""
lname=""
age=""
sex=""
income=""
# 打開資料庫連接
db = pymysql.connect("localhost","root","227191","TESTDB" )
# 使用cursor()方法獲取操作游標
cursor = db.cursor()
# SQL 查詢陳述句
sql = "SELECT * FROM employee \
WHERE INCOME > %s" % (1000)
try:
# 執行SQL陳述句
cursor.execute(sql)
# 獲取所有記錄串列
results = cursor.fetchall()
for row in results:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
# 列印結果
print ("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \
(fname, lname, age, sex, income ))
except:
print ("Error: unable to fetch data")
# 關閉資料庫連接
db.close()
print ("Content-type:text/html")
print ()
print ("<html>")
print ("<head>")
print ("<meta charset=\"gbk\">")
print ("<title>cgi test</title>")
print ("</head>")
print ("<body>")
print ("<h2> 你的資訊是 %s,%s,%s,%s,%s</h2>" % (fname, lname, age, sex, income))
print ("<br>")
print ("</body>")
print ("</html>")
用CMD運行結果如下:
C:\Users\Administrator\Desktop>python test.py
fname=Mac,lname=Mohan,age=202,sex=M,income=2000.0
fname=Mac,lname=Mohan,age=20,sex=M,income=2000.0
fname=Mac,lname=Mohan,age=202,sex=M,income=2000.0
Content-type:text/html
<html>
<head>
<meta charset="gbk">
<title>cgi test</title>
</head>
<body>
<h2> 你的資訊是 Mac,Mohan,202,M,2000.0</h2>
<br>
</body>
</html>
查找錯誤的時候把倒數第四行改為
print ("<h2> 你的資訊是%s,%s,%s,%s,%s</h2>" % ('fname', 'lname', 'age', 'sex', 'income'))
log-error的報錯沒有變化。
網上查的說把print ("Content-type:text/html")改為print ("Content-type:text/html\n\n")這個我改了就不能用了。所以不是這個問題。
uj5u.com熱心網友回復:
print () 換成 print ""uj5u.com熱心網友回復:
print ""是python2.x版本使用的,我用的python 3.x版本就是要用print ()才行
uj5u.com熱心網友回復:
不太清楚你的CGI 介面是怎么處理的。 但從輸出來看。 在資料庫部分的代碼,# 列印結果
print ("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \
(fname, lname, age, sex, income ))
這個是多余的, 會破壞HTML 的頭。 如果需要輸出三行, 可以考慮存到串列里。 在
print ("<h2> 你的資訊是 %s,%s,%s,%s,%s</h2>" % (fname, lname, age, sex, income))
位置做個 for 回圈。
你試試吧 資料庫里的 print() 注釋掉, 看看程式是否正常。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/31587.html
