【发布时间】:2020-04-29 20:25:31
【问题描述】:
我在制作一个只有乐队成员才能访问他们自己的乐队页面的页面时遇到了问题。
我的波段表中的每个波段都有四列 $bandm1 $bandm2 $bandm3 和 $bandm4。
我尝试制作一个脚本来绘制会话用户名,然后从 url 中绘制 band_id,并且成功。但是当我尝试时:
脚本不工作。我的 AND/OR 语句有问题吗?
编辑: 这是我的完整代码:
$user = $_SESSION['user_name'];
$get_user = "
select *
from users
where user_name = '$user'
";
$run_user = mysqli_query($con,$get_user);
$row=mysqli_fetch_array($run_user);
$user_name = $row['user_name'];
if(isset($_GET['band_id'])) {
$band_id = mysqli_real_escape_string($con, $_GET['band_id']);
if (ctype_alnum($band_id)){
$q = "SELECT * FROM bands WHERE band_id = '$band_id' ";
$r = mysqli_query($con, $q);
if($r){
while($row=mysqli_fetch_array($r)){
$band_id = $row['band_id'];
$band_name = $row['band_name'];
}
}
}
?>
FROM bands
WHERE band_id = '$band_id'
and (bandm1 = $user_name) OR (bandm2 = $user_name)
OR (bandm3 = $user_name) OR (bandm4 = $user_name)
它有效,但是当我将选择替换为: SELECT * FROM band WHERE band_id = '$band_id' and (bandm1 = $user_name) OR (bandm2 = $user_name) OR (bandm3 = $user_name) OR (bandm4 = $user_name)";
它停止工作
【问题讨论】:
-
您的查询可能会失败,因为用户名周围没有引号。它也容易受到注入攻击。使用准备好的语句可以解决这两个问题。
-
请不要创建这样的模式。枚举列是错误模式的标志。创建一个bandmembers 表并将band memberds 关联到band_id。例如您将如何处理
dave grohl与当前架构和nirvana和foo fighter条目?the script didn't work的描述性也不够。您是否收到错误、访问权限过多、访问权限不足等问题? -
您的代码容易受到 sql 注入 始终使用 prepared statements 参见 stackoverflow.com/questions/60174/…
-
@user3783243 我的系统当前有一个页面,在该页面中,乐队中的用户可以看到其中包含的乐队列表,如果他们的用户名包含在四个列中的任何一个中,那么乐队该列属于显示的 id,并带有指向“编辑乐队信息”页面的链接。
-
为什么有4列?
标签: php html mysql restricted-profiles