0

Python と pgdb を使用してアクセスする SQL データベースがあります。ユーザーのグループにアクセスを開く予定なので、ユーザーに関するデータベースの情報と照合されるユーザー名とパスワードを受け取るログイン機能を組み込みたいと考えています。私はPythonをあまり使用しないので、これにはかなりの時間がかかり、ほとんど結果が得られませんでした. PHP を使用した場合に役立つスレッドが見つかりましたが、残念ながら Python では見つかりませんでした。そのため、このスレッドを開始することにしました。

以下は私のコードです。基本的に、ユーザーが特定のパスワードで存在する場合に true を返すログイン関数が必要です。以下のコードは応答しません。

パラメータ参照を使用して .execute を正しく設定していませんか? それともif文が間違っていますか?

def Login(username,password):

    cursor.execute('select %s from db') % username
    dbuser = cursor.fetchone()
    if dbuser == username:
        cursor.execute('select %s from db') % password
        dbpass = cursor.fetchone()
        if dbpass == password:
            return "True"
       else:
            return "Password is incorrect."

   else:
       return "Username is incorrect."

どんな助けでも大歓迎です!初心者の質問で申し訳ありません...

4

2 に答える 2

1

関数に渡されCOLUMNた変数と等しい をデータベースから選択しようとしています。usernameLogin

あなたの構文は完全に間違っています。

正しい構文については、SQL Select のこのPostgreSQL リンクを参照してください。

基本的に、データベースから列全体を (列名で) 選択し、変数WHEREを使用または一致する句を追加する必要があります。username

cursor.execute('SELECT username,password FROM db WHERE username=%s') % (username)

免責事項:上記は SQL インジェクション防止のための安全でないコードです。現在の質問が尋ねたものの代わりに、使用する正しい構文を理解するのを助けるためにのみ示されています.

于 2012-03-22T20:11:59.160 に答える
1

三つのこと...

まず、使用している SQL には意味がありません。基本的な構文はselect columns from table where stuff is true. select <a username> from tableユーザー名が意味をなさない列名であるはずの場所を試しています。もっと似たようなことをしようとしていたと思いますselect username from db where password=%s

第 2 に、ユーザー名が存在しないことをユーザーに伝えると、誰かが試行錯誤を繰り返して有効なすべてのユーザー名のリストを作成できるようになります。代わりに、資格情報が一致しないことを一般的に伝え、どの部分が壊れているかは伝えないでください。

3 番目に、ユーザー入力 (ユーザー名とパスワードが入力されます) を SQL に直接埋め込んでいます。SQL インジェクションについて読んで、代わりにパラメーター化されたクエリを使用して、ユーザーがサイトに対して非常に悪いことをしないようにしてください。

編集

最後の考慮事項。これはすべて、パスワードをテーブルにプレーンテキストで保存していることを意味します。パスワードハッシュについても調査してください。

于 2012-03-22T19:57:26.780 に答える