CGI-Fehler beim Versuch, von SQLite3 abzurufen

CGI-Fehler beim Versuch, von SQLite3 abzurufen

Ich versuche, eine sehr einfache Anmeldeseite zu erstellen, die den Benutzer nach seinen und fragt register_no. usernameUnd passwordwenn er die Schaltfläche „Senden“ drückt. Ich versuche zu überprüfen, ob es sich um einen bestehenden oder einen neuen Benutzer handelt, und eine entsprechende Meldung anzuzeigen.

Meine Ordnerhierarchie sieht so aus

prodicus@Acer:~/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

Was ich versucht habe:

Für dieindex.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>

Fürcreating_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())

und schlussendlichusr_check.py

#/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>")

Fehlerprotokoll:

prodicus@Acer:~/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

Im Anschluss daranhttps://stackoverflow.com/questions/10793042/sqlite3-insert-using-python-and-python-cgiIch habe die Dateiberechtigungen

prodicus@Acer:~/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*

Und

prodicus@Acer:~/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*

Überraschenderweise cgitbwird kein Fehler angezeigt. Was mache ich falsch?

Antwort1

Endlich habe ich herausgefunden, was daran falsch war. Ich habe einen wirklich dummen Fehler gemacht! Danke an @cas, der mich darauf aufmerksam gemacht hat.

Hatte ein #/usr/bin/env python3.4anstelle von getan #!/usr/bin/env python3.4.

Zweitens musste ich den absoluten Pfad angeben, als das Skript usr_check.pyversuchte, eine Verbindung zur Datenbank herzustellen user_base.db.

Das hat das Problem für mich gelöst.

verwandte Informationen