2013-12-17 21 views
0

这是我的数据库讲师表名人员为指定的用户是可以删除自己的表使用登录

ID FirstName LastName Email 
100 alex  alex  - 
102 ali  ali  - 

这是我的表USER_SUBJECT

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">&nbsp;</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> 

问题是,当我想删除主题,如果我作为阿里访问我能够删除子亚历克斯的项目。

我想要做的就是喜欢当亚历克斯进入drop_subject.php系统只显示自己的数据是ID 100主题AAA和ID 100主题BBB,他能够放弃自己只受

我应该如何限制特定用户访问他们自己的数据库而不是每个人的数据库?

+2

您的代码易受SQL注入攻击!看看'$ del_query。=“'”这一行。 (int)$ data。 “”,”;'。想象一下,如果某人发布了以下数据会发生什么:'123'); DROP TABLE user_subject; --'。你真的应该弄清楚。 – Dan

+0

是的,我同意修复允许SQL注入的部分,这是一个很好的做法。你可以阅读http://www.php.net/manual/en/security.database.sql-injection.php – ChunLin

+0

@dan:'(int)'123'); DROP TABLE ..'会导致只是'123' ...字符串被类型转换为一个int,并且sql位将被删除。 –

回答

2

应该是

  1. 能够捕捉到当前正在访问该网页的用户的用户ID所采取的步骤;
  2. 使用WHERE语句连同ID:WHERE id = <the id of the user>一起筛选结果。
+0

我可以得到任何示例???或链接作为参考 – BestNOne

+0

例如,如果您通过查询字符串以下列格式传递当前访问用户的标识:drop_subject.php?user_id = 100,那么在您的PHP代码中,您可以先通过执行' $ user_id = $ _GET [“id”]'。之后,您可以使用该信息通过执行以下过程来筛选结果:'$ query ='SELECT persons.ID,persons.FirstName,user_subject.subject FROM persons INNER JOIN user_subject ON persons.ID = user_subject.ID WHERE person.ID ='。(int)$ user_id。' ORDER BY persons.ID';'。如果我错了,请纠正我。 – ChunLin

+0

我跟着你对我说的,我得到一个错误,这是未定义的索引:ID,甚至我改为http://localhost/Project/testing.php?user_id = 100,但如果我改变为$ user_id = 100;我只能得到100个数据库。它有任何程序可以用于1到很多用户吗?谢谢 – BestNOne

相关问题