0

開発中のアプリでユーザーの任意のログインシステムを作成し、mysqli を使用して MySQL から切り替えています。ただし、入力したデータに関係なく正常にログインできるため、歯が生える問題があります。明らかにこれは間違っており、私の fetch ステートメントと関係があると思います。コードは次のとおりです。

$sid = /* arbitrary value */
$con = new mysqli($mysql_host,$mysql_user,$mysql_password,$mysql_database);

$stmt = $con->prepare("SELECT uid, pwd FROM schools WHERE uid=?");

$stmt->bind_param("i", $sid);
$stmt->execute();

$stmt->bind_result($schoolid, $password);
$stmt->fetch();

$stmt->close();

ここで何が起こっているかを知っていて、比較的コーディングの初心者に平易な英語で説明できる人はいますか?

編集: コードの残りの部分は、チェック システムの場合は次のようになります。入力されたユーザー ID は$sidで、入力され暗号化されたパスワードは$cleanpwdです。

if ($sid == $schoolid and $cleanpwd == $password) {
    header('Location: loginsuccess.php');
    }

else {
    header('Location: login.php?error=1'); }
4

1 に答える 1

0

これがログインフォームの場合、最初にデータを取得してから、データが正しいかどうかを処理しているようです。または、それが正しいかどうかを処理しようとしていますか(SQLのユーザーIDとパスワードの組み合わせ)?これは、ユーザーIDを入力し、入力したパスワードがそのユーザーIDに関連付けられているデータベースパスワードと一致するかどうかを確認せずに、ユーザーIDとパスワードを取得するだけだからです。

SQLでパスワードとユーザー名が一致するかどうかを確認したい場合は、次のことを試してください。

$stmt = $con->prepare("SELECT uid, pwd FROM schools WHERE uid=? AND pass=?");
$stmt->bind_param("is", $sid,$form_password);
$stmt->execute();

それ以外の場合は、後でデータが一致するかどうかを確認する必要があります。

if($_POST['form_pass'] == $password){
//log the user in
}
于 2013-01-17T22:38:21.233 に答える