2015-11-02 48 views
0

我正在尝试构建一个非常简单的登录页面,要求用户提供他的register_no,usernamepassword。当他按下提交按钮时。我正在尝试检查它是现有用户还是新用户并相应地显示消息。通过CGI从sqlite3检索数据时出错

我的文件夹结构是这样的

[email protected]:~/Downloads/souvik_refactoring$ tree 
. 
├── cgi-bin 
│   ├── creating_user_base_table.py 
│   ├── user_base.db 
│   └── usr_check.py 
├── index.html 
└── keyCheck.py 

1 directory, 5 files 

我曾尝试:

对于index.html

<!DOCTYPE html> 
<html> 
<head> 
    <title>Login page</title> 
</head> 
<body> 
    <div style = "text-align : center ; "> 
     <h1>Login page</h1> 
     <form action="/cgi-bin/usr_check.py" method="get"> 
      Registration number : <input type="number" name="register_no" min="1" max="2000000000"> 
      <br><br> 
      Username : <input type="text" name="username"> 
      <br><br> 
      Password : <input type="password" name = "password"> 
      <br><br> 
      <input type="submit" value = "Login"> 
     </form> 
    </div> 
</body> 
</html> 

对于creating_user_base_table.py

#!/usr/bin/env python3.4 

import sqlite3 
import os 

db_name = "user_base.db" 

if db_name in os.listdir(): 
    print("removing the user_base.db and creating a fresh copy of it") 
    os.system("rm user_base.db") 

print("Creating the database") 
conn = sqlite3.connect(db_name) 
cur = conn.cursor() 

user_table = "CREATE TABLE users(reg_no INTEGER PRIMARY KEY, user_name TEXT, pass TEXT)" 

new_users = (
    (1081310251, 'admin', 'admin'), 
    (1081310234, 'foo', 'admin123') 
) 

cur.execute(user_table) 
print("table created") 
cur.executemany('INSERT INTO users VALUES(?, ?, ?)', new_users) 
conn.commit() 
print("default users created \n\ndisplaying them") 

cur.execute('SELECT * FROM users') 
print(cur.fetchall()) 

最后

#/usr/bin/env python3.4 

import cgi, cgitb 
import os 
import sqlite3 

cgitb.enable() 

form = cgi.FieldStorage() 
register_no = form.getvalue('register_no') 
username = form.getvalue('username') 
passwd = form.getvalue('password') 

print("Content-type:text/html\r\n\r\n") 
print("<html>") 
print("<head>") 
print("<h1>Shit gets real here</h1>") 
print("</head>") 
print("<body>") 
print('<div style = "text-align:center ; "') 
# print("</div>") 
print("") 

conn = sqlite3.connect('user_base.db') 
cur = conn.cursor() 

## now to check whether the entered data is for 
## -> new user 
## -> an old user 

cur.execute('SELECT user_name FROM users WHERE register_no = ?', (register_no,)) 
rows = cur.fetchall() 
print("<br><br>") 
if len(rows) == 0: 
    print("<p>User : <b>", username , "</b> does not exist.</p>") 
    cur.execute('INSERT INTO users VALUES(?, ?, ?)', (register_no, username, passwd)) 
    print("<p>User was created successfully</p>") 
    print("Done") 

else: 
    print("<p>Welcome<b>", username ,"</b>. Good to have you back") 
    print("<br><p>Your account details</p>") 
    print("<ul>") 
    print("<li>Register number : ", register_no, " </li>") 
    print("<li>Username " , username, "</li>") 
    print("</ul>") 

错误日志

[email protected]:~/Downloads/souvik_refactoring$ python -m CGIHTTPServer 
Serving HTTP on 0.0.0.0 port 8000 ... 
127.0.0.1 - - [02/Nov/2015 12:43:23] "GET /index.html HTTP/1.1" 200 - 
127.0.0.1 - - [02/Nov/2015 12:44:03] "GET /cgi-bin/usr_check.py?register_no=1081310234&username=foo&password=admin123 HTTP/1.1" 200 - 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/CGIHTTPServer.py", line 252, in run_cgi 
    os.execve(scriptfile, args, env) 
OSError: [Errno 8] Exec format error 
127.0.0.1 - - [02/Nov/2015 12:44:03] CGI script exit status 0x7f00 

在此之后sqlite3 insert using python and python cgi我有文件的权限

[email protected]:~/Downloads/souvik_refactoring$ ll 
total 36 
drwxrwxr-x 3 prodicus prodicus 4096 Nov 2 08:30 ./ 
drwxr-xr-x 15 prodicus prodicus 20480 Nov 2 11:29 ../ 
drwxrwxrwx 2 prodicus prodicus 4096 Nov 2 12:23 cgi-bin/ 
-rw-rw-r-- 1 prodicus prodicus 629 Nov 2 08:38 index.html 
-rwxrwxr-x 1 prodicus prodicus 463 Nov 2 08:29 keyCheck.py* 

[email protected]:~/Downloads/souvik_refactoring/cgi-bin$ ll 
total 20 
drwxrwxrwx 2 prodicus prodicus 4096 Nov 2 12:23 ./ 
drwxrwxr-x 3 prodicus prodicus 4096 Nov 2 08:30 ../ 
-rwxrwxrwx 1 prodicus prodicus 710 Nov 1 23:12 creating_user_base_table.py* 
-rwxrwxrwx 1 prodicus prodicus 2048 Nov 2 12:23 user_base.db* 
-rwxrwxrwx 1 prodicus prodicus 1576 Nov 2 08:26 usr_check.py* 

令人惊讶的是,cgitb未显示错误。我哪里错了?从早上起就一直打破我的头脑!

回答

0

终于弄明白了这是什么问题。正在犯一个非常愚蠢的错误!感谢@cas让我接受它。

做了#!/usr/bin/env python3.4

第二个是的#/usr/bin/env python3.4代替,我不得不放弃当脚本试图连接到数据库user_base.db

这解决了这个问题对我来说是绝对路径。

相关问题