Php 从表中删除

Php 从表中删除,php,mysql,Php,Mysql,我正在尝试使登录用户只能删除自己的帖子,但id为1/admin的用户可以删除所有帖子。 我做错了什么 <?php session_start(); ?> <!doctype html> <html> <head> <meta charset="UTF-8"> <title>Untitled Document</title> </head> <body> <?php $post

我正在尝试使登录用户只能删除自己的帖子,但id为1/admin的用户可以删除所有帖子。 我做错了什么

<?php
session_start();
?>

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Untitled Document</title>
</head>

<body>

<?php

$postitid = filter_input(INPUT_POST, 'pid', FILTER_VALIDATE_INT) 
or die ('Missing or illegal id parameter');
$userid = $_SESSION['users_id'];

require_once('dbcon.php');

$mysqlstring = 'DELETE FROM postit WHERE id=? AND users_id=? OR 
users_id=1';
$stmt = $link->prepare($mysqlstring);
$stmt ->bind_param('iii', $postitid, $userid, $userid);
$stmt -> execute();

if ($postitid == $userid ) {
echo 'Deleted '.$stmt->affected_rows.' Post-it notes';
} else {
echo 'You dont have permission to delete this.';
}
?>
</body>
</html>

无标题文件
问题就在这里

$mysqlstring = 'DELETE FROM postit WHERE id=? AND users_id=? OR users_id=1';
此查询删除属于管理员(users_id=1)或登录用户的帖子。你不希望这样,你想检查用户是否是管理员,让他删除id为的给定帖子,如果是用户,那么他应该只删除他是所有者的帖子。为此:

您需要检查user_id=1,如果是,则进行不同的查询

 if (intval($userid) === 1) {
   // admin 
   $mysqlstring = 'DELETE FROM postit WHERE id=?';
   $stmt = $link->prepare($mysqlstring);
   $stmt ->bind_param('i', $postitid);
 } else {
   $mysqlstring = 'DELETE FROM postit WHERE id=? AND users_id=?';
   $stmt = $link->prepare($mysqlstring);
   $stmt ->bind_param('ii', $postitid, $userid);
 }

 $stmt->execute();
问题就在这里

$mysqlstring = 'DELETE FROM postit WHERE id=? AND users_id=? OR users_id=1';
此查询删除属于管理员(users_id=1)或登录用户的帖子。你不希望这样,你想检查用户是否是管理员,让他删除id为的给定帖子,如果是用户,那么他应该只删除他是所有者的帖子。为此:

您需要检查user_id=1,如果是,则进行不同的查询

 if (intval($userid) === 1) {
   // admin 
   $mysqlstring = 'DELETE FROM postit WHERE id=?';
   $stmt = $link->prepare($mysqlstring);
   $stmt ->bind_param('i', $postitid);
 } else {
   $mysqlstring = 'DELETE FROM postit WHERE id=? AND users_id=?';
   $stmt = $link->prepare($mysqlstring);
   $stmt ->bind_param('ii', $postitid, $userid);
 }

 $stmt->execute();

首先是您正在使用的mysqli字符串

$mysqlstring = 'DELETE FROM postit WHERE id=? AND users_id=? OR users_id=1';
因为表中的id是主键,所以您可以直接使用

$mysqlstring = 'DELETE FROM postit WHERE id=? ';


首先是您正在使用的mysqli字符串

$mysqlstring = 'DELETE FROM postit WHERE id=? AND users_id=? OR users_id=1';
因为表中的id是主键,所以您可以直接使用

$mysqlstring = 'DELETE FROM postit WHERE id=? ';


我在这里做错了什么?
问题出在哪里?每次你删除带有用户id和管理员id的帖子时,问题出在哪里?“但是id为1/admin的用户可以删除所有帖子。我在这里做错了什么?”检查查询。。其中id=?和用户_id=?或者users_id=1为什么只需要两个参数时需要三个参数-$stmt->bind_param('iii',$postid,$userid,$userid);您已经在表示管理员的查询中硬编码了users_id=1。另一个建议是将您的查询框架如下-'DELETE FROM posit WHERE id=?和(users_id=?或users_id=1)”;后跟$stmt->bind_param('ii',$postid,$userid);
我在这里做错了什么?
有什么问题?每次你删除带有用户id和管理员id的帖子时,到底是什么问题?”但id为1/admin的用户可以删除所有帖子。我在这里做错了什么?”检查查询..其中id=?和users\u id=?或users\u id=1为什么只需要两个参数-$stmt->bind\u param('iii',$postid,$userid,$userid,$userid);在表示管理员的查询中,您已经硬编码了users_id=1。另一个建议是将您的查询框设置为“DELETE FROM posit WHERE id=?AND(users_id=?或users_id=1)”;后跟$stmt->bind_param('ii',$postid,$userid);