2013-04-14 63 views
1

这是删除链接代码:数据库清理检查所有者

<a href="picture_manager.php?do=delete&id=<?php print $picturedata['id']; ?>" >Delete</a> 

这是我目前的数据库语法:

if (array_key_exists('do', $_GET) && $_GET['do'] == "delete" && array_key_exists('id', $_GET)) 
{ 
    $pictureid = trim(sanitize($_GET['id'])); 

    if ($picture->delete($pictureid) === true) 
    { 
     header('Location: picture_manager.php?success=removed'); 
    } 
} 

有了上面的代码中,其他用户可以删除其他用户的图片像= picture_manager。 php?do =删除& id =(受害者)。

现在我找到了解决方案,以防止滥用其他用户,我改变,因为下面的旧语法:

这是我的新的数据库语法:

if (!array_key_exists('id', $_GET) || $_GET['id'] == "" || $picture->pictureExists(trim(sanitize($_GET['id']))) === false || $picture->checkOwn($user->getUserID(trim(sanitize($_SESSION['key']))), trim(sanitize($_GET['id']))) === false) 
{ 
    header('Location: picture_manager.php'); 
} 
else  
{ 
    $pictureid = trim(sanitize($_GET['id'])); 

    if ($picture->delete($pictureid) === true) 
    { 
     header('Location: picture_manager.php?success=removed'); 
    } 
} 

可悲的是,它不工作“的页面没有正确重定向 - 说火狐浏览器”

现在专家展望。

我发现在下面回答的解决方案。

现在编辑: 其难度我,当我编写如下:?

if (isset($_GET['do']) && $_GET['do'] == 'delete' && (!array_key_exists('id', $_GET) || $_GET['id'] == "" || $picture->pictureExists(trim(sanitize($_GET['id']))) === false || $picture->checkOwn($user->getUserID(trim(sanitize($_SESSION['key']))), trim(sanitize($_GET['id']))) === false)) 
{ 
    header('Location: picture_manager.php'); 
} 
else  
{ 
    $pictureid = trim(sanitize($_GET['id'])); 

    if ($picture->delete($pictureid) === true) 
    { 
     header('Location: picture_manager.php?success=removed'); 
    } 
} 

当我点击即picture_manager.php做=删除的文件不会删除& ID = 6125

请告诉我错我的代码?

+0

正在寻找解决方案。谢谢 – user2279205

回答

2

无限重定向!array_key_exists( '身份证',$ _ GET)会一直继续。您需要添加?do =删除以验证,如

<?php if (isset($_GET['do']) && $_GET['do'] == 'delete' && (!array_key_exists('id', $_GET) || $_GET['id'] == "" || $picture->pictureExists(trim(sanitize($_GET['id']))) === false || $picture->checkOwn($user->getUserID(trim(sanitize($_SESSION['key']))), trim(sanitize($_GET['id']))) === false)) 
+0

谢谢,请检查我的更新帖子。 – user2279205

+1

您需要添加其他相同的检查器,只需使用其他if()。或添加if(isset($ _ GET ['do'])&& $ _GET ['do'] =='delete'){...}在代码 – monkeyinsight

+0

的所有部分前面,请您举个例子。真的很头疼。 – user2279205