-4

ユーザーがログインしようとしたときに検証されているかどうかを確認しようとしていますが、何か間違っています

$validationsql = mysql_query("SELECT Validation FROM users WHERE Username = '".$username."' AND Password = '".$password."'");
$validationresult = mysql_query($validationsql) or die('error');
if ($validationresult == "'FALSE'")
{
         echo "<h1>Validation Error</h1>";
         die;
}
4

3 に答える 3

2

あなたは多くのことを間違ってやっています。認証のために、データベースに顧客によって送信されたユーザーがいるかどうかを確認する必要があります。そのためには、次のようなものを使用する必要があります。

$validationsql = mysql_query("SELECT Validation FROM users WHERE Username = '".$username."' AND Password = '".$password."'"); //Retrives data from database
$usersfound = mysql_num_rows($validationsql) or die('error'); //counts how many records have been retrieved
/*
 *If number of data is not 1 (assuming you have unique users) validation fails
*/
if ($usersfound !== 1)
{
         echo "<h1>Validation Error</h1>";
         die;
}

ただし、プリペアドステートメントを使用しない場合は、セキュリティのためにデータをエスケープする必要があります(SQLインジェクション)。これを行うには、を使用できますmysql_real_escape_string。この後、コードは次のようになります。

$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);

$validationsql = mysql_query("SELECT Validation FROM users WHERE Username = '".$username."' AND Password = '".$password."'"); //Retrives data from database
$usersfound = mysql_num_rows($validationsql) or die('error'); //counts how many records have been retrieved
/*
 *If number of data is not 1 (assuming you have unique users) validation fails
*/
if ($usersfound !== 1)
{
         echo "<h1>Validation Error</h1>";
         die;
}

そして、それでもあなたがすべてを正しくやっているという意味ではありません。mysql_*関数は非推奨になりました。PDOまたはmysqli_*関数のいずれかを使用する必要があります。また、プリペアドステートメントを積極的に使用する必要があります。

于 2013-01-29T06:51:13.643 に答える
0

まず第一に、そのようなパスワードを保存しないでください。MD5または他のハッシュ方法のようなものを使用してください。

以下のコードを試してください

if (!$validationresult)
{
         echo "<h1>Validation Error</h1>";
         die;
}
于 2013-01-29T06:50:23.780 に答える
0

データベーステーブルに「Validation」という名前のフィールドがあると仮定します。フィールドがない場合は、次のように変更します。SELECT * FROM ...

$validationsql = "SELECT Validation FROM users WHERE Username = '".$username."' AND Password = '".$password."'";
$validationresult = mysql_query($validationsql) or die('error');
if (mysql_num_rows($validationresult) == 0)
{
         echo "<h1>Validation Error</h1>";
         die;
}

安全なmysqliまたはPDOを使用することをお勧めします。コードには多くの脆弱性があります

于 2013-01-29T06:53:01.650 に答える