0

私はPHPが初めてで、以下のコードについて助けが必要です。「ユーザー ID が存在しません」というメッセージを表示する代わりに間違ったユーザー ID を入力すると、「パスワードと ID が一致しません。どこが間違っているのか教えてください。

<?php
    session_start();
    $id = $_POST['userid'];
    $pwd = $_POST['paswd'];
    $con = mysqli_connect("localhost", "????", "????", "??????");
    if ($con) {
        $result = mysqli_query($con, "SELECT * FROM users WHERE userid=$id");
        if ($result) {
            $row = mysql_fetch_array($result);
            if ($row["userid"] == $id && $row["paswd"] == $pwd) {
                echo "Welcome! You are a authenticate user";
                if ($id == $pwd)
                //my default login id and password are same
                {
                    header("Location: changepwd.html");
                } else {
                    header("Location: dataentry.html");
                }
            } else {
                echo "ID/Password Mismatch";
            }
        } else {
            echo "User does not Exist !!!";
        }
    } else {
        echo "Connection failed - ".mysqli_error()." -- ".mysqli_errno();
    }
?>
4

6 に答える 6

0

追加のチェックが必要です。

select * return 1 行 (0 ではなく、それ以上でもありません)

HTMLフォームによって入力されたデータを保護する必要があります(たとえば、誰かが入力1 or 1してすべての行を返すことができます

<?php
session_start();

$con = mysqli_connect("localhost", "????", "????", "??????");
$id  = mysqli_real_escape_string($_POST['userid']);
$pwd = mysqli_real_escape_string($_POST['paswd']);
if ($con) {
    // don't even do the query if data are incomplete
    if (empty($id) || empty($pwd)
      $result = false;
    else
    {
      // optionnal : if userid is supposed to be a number
      // $id = (int)$id;
      $result = mysqli_query($con, "SELECT * FROM users WHERE userid='$id'");
    }
    if (mysqli_num_rows($result) != 1)
      $result = false;
    if ($result) {
        $row = mysqli_fetch_assoc($result);
        if ($row["userid"] == $id && $row["paswd"] == $pwd) {
            echo "Welcome! You are a authenticate user";
            if ($id == $pwd)
            //my default login id and password are same
                {
                header("Location: changepwd.html");
            } else {
                header("Location: dataentry.html");
            }
        } else {
            echo "ID/Password Mismatch";
        }
    } else {
        echo "User does not Exist, or incomplete input";
    }
} else {
    echo "Connection failed - " . mysqli_error() . " -- " . mysqli_errno();
}
?>
于 2013-10-30T13:07:59.827 に答える
0
else 
{
echo "ID/Password Mismatch"; 
}

if($row["userid"]==$id && $row["passwd"]==$pwd) {

だからあなたは間違ったIDを与えているからです。それは反響します:ID/Password Mismatch また、それ以来、決して表示elseされませんif ($result) {

 $result = mysqli_query($con, "SELECT * FROM users WHERE userid=$id");
于 2013-10-30T13:06:21.200 に答える
-1
You can use this sql compare password as well with userid

$sql= "SELECT * FROM users WHERE userid='".$id.", and password='".$pwd."'";

于 2013-10-30T13:07:16.290 に答える