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=delete&id=(victim) のように他のユーザーの写真を削除できます。

他のユーザーによる悪用を防ぐための解決策を見つけたので、古い構文を次のように変更します。

これは私の新しいデータベース構文です:

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?do=delete&id=6125 をクリックしてもファイルが削除されない

私のコードの何が問題なのですか?

4

1 に答える 1

2

無限リダイレクト、!array_key_exists('id', $_GET) は常に続行されます。次のように、検証に ?do=delete を追加する必要があります

<?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))
于 2013-04-14T14:20:46.483 に答える