ユーザー認証システムを変更していて、管理者用のセッションを設定できません。 reguser
セッションはうまく設定されていますが、なぜadmin
が設定されないのかわかりません。クエリ結果からセッション変数を設定する
userlevel
が9のユーザーは管理者です。はい、私はSQLインジェクションから保護する方法を知っています。私は今のところそれをシンプルで読みやすいようにしています。これはおそらく何にも使われないでしょう、私はちょうどPHPでいくつかの経験を得ています。
皆さん、ありがとうございます!私はそれを働かせました。私はそれをずっと見つめていたので、私の心は明らかではありませんでした。昨日、それから休憩して今日に戻ってきて、5分もかからずにそれを見つけ出すことができました!あなたたちは素晴らしいです、私はstackoverflowが大好き!
function checklogin($email, $pass) {
$server = 'localhost';
$user = 'root';
$password = '';
$connection = mysql_connect($server, $user, $password) or die(mysql_error());
mysql_select_db(udogoo, $connection) or die(mysql_error());
$pass = md5($pass);
$result = mysql_query("SELECT userid from users WHERE email = '$email' AND password = '$pass'");
$user_data = mysql_fetch_array($result);
$no_rows = mysql_num_rows($result);
if ($no_rows == 1)
{
$_SESSION['reguser'] = true;
$_SESSION['userid'] = $user_data['userid'];
$userid = $user_data['userid'];
$isadmin = mysql_query("SELECT userlevel FROM users WHERE userid = '$userid'");
$isadmin2 = mysql_fetch_array($isadmin);
$isadmin3 = $isadmin2['userlevel'];
if ($isadmin3 == "9"){
$_SESSION['admin'] = true;
return true;
}
}
else
{
return FALSE;
}
}
まあ、 '$のresult'、そもそもHTTP([リソースは'するmysql_query() 'から返さ]されます。 net/manual/en/function.mysql-query.php)、それを 'SELECT userlevel ...'に含めると、 'userid'で実際には探しているとは限りません。おそらく 'Resource ID#XX'か何かを探しています。 –
パスワードに通常の 'md5()'値を使用する代わりに、 '' crypt() '](http://php.net/manual/en/function.crypt.php)を見て、' 'CRYPT_BLOWFISH 'ハッシュ型のソルト値を使用すると、パスワードの保存がより安全になります。 –