2017-01-30 8 views
-1

banstatusが「禁止」のユーザーをウェブサイトにアクセスできないようにすることができないのはなぜですか?エラーは今、phpがbanstatusが禁止されていなくても、すべてのユーザーがWebサイトにアクセスすることを禁止しているということです。私は長い間、エラーを解決しようとしていて、それをまだ解決することができなかったので、エラーを識別するのを助けてください。事前にありがとう:)SQLで禁止されているアカウントが動作しない

これらは私のコードです:

if(!empty($_POST['username'])){ 
    $username=$_POST['username']; 
    } 
    else 
    { 
    $username=null; 
    echo "<font color='red'> Please enter your username! </font></p>"; 
    } 

    if(!empty($_POST['password'])){ 
    $password= md5($_POST['password']); 
    } 
    else 
    { 
    $password=null; 
    echo "<font color='red'> Please enter your password! </font></p>"; 
    } 

    if ($username && $password) { 


     $connection = mysql_connect("", "", "", ""); 

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

     $db = mysql_select_db("", $connection); 

     $query = mysql_query("SELECT * FROM users WHERE username='$username' and password='$password' and active=1", $connection); 
     $rows = mysql_num_rows($query); 
     if ($rows == 1) { 
      if ($rows['banstatus'] == '') { 
      session_start(); 
      $_SESSION['username'] = $username; 
      header("Location:somewhere.php"); 
      } 
      else{ 
       echo "<br><br><br><b><font color='red'>Your account has been banned. Please contact the administrator.</font></b><br><br>"; 
      } 
     }   
     else { 
     echo "<br><br><br><b><font color='red'> Login is not successful.</font></b><br><br>"; 
     } 
     mysql_close($connection); // Closing Connection 
     } 
+2

** ** **非推奨となり、安全でない** 'mysql_ *' -functionsを使用しないでください。 PHP 5.5以降(2013年)は廃止され、PHP 7では完全に削除されました。代わりにMySQLiまたはPDOを使用してください。 –

+0

*編集済み: 'if($ row ['banstatus'] == '禁止'){echo"あなたは禁止されています!! "; } 'フェッチ関数/ループの内部。あなたは今失敗しています。 'while($行= mysql_fetch_array($クエリ)){...}'。そして、mysql_error()はそれについてあなたに言ったでしょう –

+2

**パスワードをデータベースに保存しないでください**。 PHPの['password_hash()'](http://php.net/manual/en/function.password-hash.php)と['password_verify()'](http://php.net/manual/en /function.password-verify.php)。 5.5よりも低いバージョンのPHPを実行している場合は、[password_compat library](https://github.com/ircmaxell/password_compat)を使用して同じ機能を使用できます。 –

答えて

0
if(!empty($_POST['username'])){ 
$username=$_POST['username']; 
} 
else 
{ 
$username=null; 
echo "<font color='red'> Please enter your username! </font></p>"; 
} 

if(!empty($_POST['password'])){ 
$password= md5($_POST['password']); 
} 
else 
{ 
$password=null; 
echo "<font color='red'> Please enter your password! </font></p>"; 
} 

if ($username && $password) { 


    $connection = new mysqli($your_db_IP_ADDR, $your_db_username, $your_db_pass, $your_db_database_name); 

    /*$username = stripslashes($username);*/ //if you using mysqli real_escape_string you don't need to stripslashes 
    /*$password = stripslashes($password);*/ //MD5 is an hash. You don't need to stripslashes it 
    $username = $connection->real_escape_string($username); 
    /*$password = $connection->real_escape_string($password)*/ // your $password is an MD5 hash. You don't need to escape it; 



    $results = $connection->query("SELECT * FROM users WHERE username='$username' and password='$password' and active = 1"); 

    if ($results->num_rows === 1) { 
     $row = $results->fetch_assoc(); //call it row, it just one 
     if ($row['banstatus'] === '') { 
      session_start(); 
      $_SESSION['username'] = $username; 
      $connection->close(); // Closing Connection also HERE before redirect 
      header("Location:somewhere.php"); 
     } else { 
      echo "<br><br><br><b><font color='red'>Your account has been banned. Please contact the administrator.</font></b><br><br>"; 
     } 
    } else { 
    echo "<br><br><br><b><font color='red'> Login is not successful.</font></b><br><br>"; 

    } 
    $mysqli->close(); 
} 
+0

***良い回答** *はいつも何が行われたのか、なぜそれがOPのためだけでなく、将来の訪問者のためにそうした方法で行われたのかについての説明を持っています。 –

+0

個人の好奇心。あなたの意見は否定的な批判、忠告、または建設的な批判ですか?キーエリアでコメントしてコードを修正しました –

+0

*建設的です*。コード自体にコメントをつけることは、OPや将来の訪問者が変更や改変についての明確な説明がないコードの壁であるので、OPや将来のビジターに役立つことはありません。 –

関連する問題