Php 为能够删除自己表的指定用户使用登录
这是我的数据库讲师表名Php 为能够删除自己表的指定用户使用登录,php,mysql,sql,Php,Mysql,Sql,这是我的数据库讲师表名 ID FirstName LastName Email 100 alex alex - 102 ali ali - 这是我的表格用户主题 ID Subject 100 AAA 100 BBB 102 AAA 102 CCC 这是我的drop_subject.php <html> <head></head> <body> <?php $conn =
ID FirstName LastName Email
100 alex alex -
102 ali ali -
这是我的表格用户主题
ID Subject
100 AAA
100 BBB
102 AAA
102 CCC
这是我的drop_subject.php
<html>
<head></head>
<body>
<?php
$conn = mysql_connect('localhost','root','password');
mysql_select_db('lecturer');
$query = 'SELECT persons.ID , persons.FirstName , user_subject.subject
FROM persons
INNER JOIN user_subject
ON persons.ID = user_subject.ID
ORDER BY persons.ID';
$result = mysql_query($query) or die(mysql_error());
?>
<table width="400" border="0" align="center" cellspacing="1" cellpadding="0">
<tr>
<td><form name="form1" method="post" action="">
<table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td bgcolor="#FFFFFF"> </td>
<td colspan="4" bgcolor="#FFFFFF"><strong>Drop subject</strong> </td>
</tr>
<tr>
<td align="center" bgcolor="#FFFFFF">#</td>
<td align="center" bgcolor="#FFFFFF"><strong>ID</strong></td>
<td align="center" bgcolor="#FFFFFF"><strong>Subject</strong></td>
</tr>
<?php while($row = mysql_fetch_assoc($result)) { ?>
<tr>
<td align="center" bgcolor="#FFFFFF"><input type="checkbox" name="data[]" value="<?php echo $row['ID'];?>" /></td>
<td bgcolor="#FFFFFF"> <?php echo $row['ID']; ?> </td>
<td bgcolor="#FFFFFF"> <?php echo $row['subject']; ?> </td>
</tr>
<?php } ?>
<tr>
<td colspan="3" align="left" bgcolor="#FFFFFF"><input type="submit" value="Delete Checked Rows" /></td>
<td colspan="2" align="right" bgcolor="#FFFFFF"><a href="user_subject.php?pressed=subject">Back</a></td>
</tr>
<?php
if(isset($_POST['data'])) {
$del_query = "DELETE FROM user_subject WHERE No IN (";
foreach($_POST['data'] as $data) {
$del_query .= "'" . (int) $data . "',";
}
$del_query .= "'')";
mysql_query($del_query) or die(mysql_error());
header("Location:" . $_SERVER['PHP_SELF']);
}
mysql_close()
?>
</table>
</form>
</tr>
</table>
</body>
</html>
问题是当我想放弃主题时,如果我以阿里身份访问,我就可以放弃亚历克斯的主题
我想做的是,当alex访问drop_subject.php时,系统只显示他自己的数据,即ID 100 subject AAA和ID 100 subject BBB,他只能删除他自己的主题
我应该使用什么来限制特定用户访问他们自己的数据库而不是每个人的数据库?应该 能够捕获当前访问页面的用户的用户ID; 使用WHERE语句和ID:WHERE ID=一起筛选结果。
您的代码易受SQL注入攻击!看看$del_query.='行。int$data,;。想象一下如果有人发布以下数据会发生什么:123';删除表格用户_subject;-。你真的应该解决这个问题。是的,我同意修复允许SQL注入的部分,这是一个很好的实践。你可以在@dan:int'123'阅读更多内容;放下桌子。。无论如何只会有123个。。。字符串的类型转换为int,sql位将被删除。@MarcB-你说得完全正确。我没有注意到那部分。但我认为这不是防止SQL注入的理想方法。我不知道php的强制转换是如何工作的,但是一些强制转换是否会导致可能会破坏查询字符串的空值?@dan:int可能会导致php NULL,但是将php NULL连接到字符串中会导致空字符串。因为OP在可能的空字符串周围有sql级别的引号,所以php null只会导致,这在sql中是一个有效的空字符串例如,如果您通过以下格式的查询字符串传递当前access用户的id:drop_subject.php?user_id=100,那么在php代码中,您可以首先通过执行$user\u id=$\u GET[id]来检索用户id。之后,您可以使用该信息通过执行以下操作来过滤结果:$query='从persons内部选择persons.ID、persons.FirstName、user_subject.subject加入persons.ID上的user_subject=user_subject.ID,其中persons.ID='.int$user_ID.'ORDER by persons.ID';。如果我错了,请纠正我。我遵循了你对我说的,我得到了一个错误,它是未定义的索引:ID,甚至我更改为,但如果我更改为$user_ID=100;我只能得到100个数据库。它是否有任何程序可供1到多个用户使用?谢谢,抱歉,搞错了。我的代码中有输入错误,应该是$user\u id=$\u GET[user\u id]。因此,如果您想显示其他用户的数据,例如用户102,只需将查询字符串更新为?user_id=102即可。这就是你想要的吗?谢谢你的回复。我想做的是每个用户只能读取他们自己的数据库,当我以alex身份登录时,我只希望alex数据库出现在多用户数据库中,如user_subject,现在我试着通过在网页对于一个简单的HTML示例,您可以选择和。当然,在此基础上,还可以使用for循环生成用户的动态列表。