页面将不会死()如果该人被禁止php mysql

时间:2015-06-09 02:33:43

标签: php mysql mysqli

<?php
include('session.php');
?>
<?php 
require_once('mysql_connect.php');
$query2 ="SELECT  id, username, banned FROM login WHERE username ='$login_session'";
$result2 = mysql_query($query2) OR die($mysql_error());
$row = mysql_num_rows($result2);

if($row['banned'] == 1) {
die();
}

?>

session.php文件

<?php
// Establishing Connection with Server by passing server_name, user_id and password as a parameter
$connection = mysql_connect("localhost", "", "");
// Selecting Database
$db = mysql_select_db("", $connection);
session_start();// Starting Session
// Storing Session
$user_check=$_SESSION['login_user'];
// SQL Query To Fetch Complete Information Of User
$ses_sql=mysql_query("select username from login where username='$user_check'", $connection);
$row = mysql_fetch_assoc($ses_sql);
$login_session =$row['username'];
if(!isset($login_session)){
mysql_close($connection); // Closing Connection
header('Location: login.php'); // Redirecting To Home Page
}
?>

正如您所看到的,我试图阻止那些被禁止加载profile.php的人

它不会阻止配置文件页面加载

3 个答案:

答案 0 :(得分:3)

  

感谢弗雷德,有效--KIXEYE

     

让它成为一个答案,尽可能快地回答 - KIXEYE

根据OP的愿望:

您对$row使用了错误的功能。使用一个将行作为数组获取,或将if($row['banned'] == 1)更改为if($row == 1)以使用mysql_num_rows

脚注:

您目前的代码向SQL injection开放。使用mysqli with prepared statementsPDO with prepared statements它们更安全

https://stackoverflow.com/a/6620252/

取消的示例
$user = "bob";
$user = mysql_real_escape_string($user);
$result = mysql_query("SELECT COUNT(*) AS num_rows FROM my_table WHERE username='{$user}' LIMIT 1;");
$row = mysql_fetch_array($result);
if($row["num_rows"] > 0){
   //user exists
}

修改

如果您的banned行包含10以检查它们是否已被禁止,请在where子句中添加另一个参数。即:WHERE username ='$login_session' AND banned !=1如果禁止列是int类型。如果没有,请将1括在引号中。

  • 这转换为WHERE用户名存在并且是'John'并且禁止不等于1.或者将其设为0,这是您的选择。

答案 1 :(得分:2)

那你为什么不抓取未被禁止的用户:

$ses_sql = mysql_query("SELECT username FROM login WHERE username='$user_check' AND banned <> 1",$connection);
$numofresult = mysql_num_rows($ses_sql);

然后检查它是否有结果:

if($numofresult > 0){
   /* SUCCESS */
}
else {
   /* BANNED */
}

要妥协SQL injections,请使用mysql_real_escape_string()功能。

$user = mysql_real_escape_string($username,$connection);

但更好的建议是使用mysqli_* prepared statement或PDO。

if($stmt = $connection->prepare("SELECT username FROM login WHERE username='$user_check' AND banned <> 1")){
  $stmt->execute();
  $stmt->store_result();
  $numofresult = $stmt->num_rows;
  $stmt->close();
}

答案 2 :(得分:-1)

mysql_num_rows()会返回多行,而不是行本身。

您应该使用mysql_fetch_assoc()或类似功能。