<?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的人
它不会阻止配置文件页面加载
答案 0 :(得分:3)
感谢弗雷德,有效--KIXEYE
让它成为一个答案,尽可能快地回答 - KIXEYE
根据OP的愿望:
您对$row
使用了错误的功能。使用一个将行作为数组获取,或将if($row['banned'] == 1)
更改为if($row == 1)
以使用mysql_num_rows
。
脚注:
您目前的代码向SQL injection开放。使用mysqli
with prepared statements或PDO 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
行包含1
或0
以检查它们是否已被禁止,请在where
子句中添加另一个参数。即:WHERE username ='$login_session' AND banned !=1
如果禁止列是int
类型。如果没有,请将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()
或类似功能。