1

私は、ユーザーがシステム内の画像にコメントを追加できるようにするphpWebサイトを作成してきました。

私のコードが現在機能している方法は、その画像のすべてのコメントを取得し、whileループを使用してそれらをテーブルに配置することです。

$commResult = mysql_query("SELECT u.userID, u.USERNAME, c.COMMENT, c.DATE_ADDED, c.ACTIVE, c.id FROM USERS u, COMMENTS c WHERE u.id = c.user_id and c.box_id = $boxId ORDER BY c.DATE_ADDED DESC");

while ($row = mysql_fetch_array($commResult))
    {
        if ($row[4] != 0)
        {
            echo "<tr><td><a href='User.php?uid=$row[0]'>$row[1]</a></td>";
            echo "<td style='text-align:right;'>" . date("d M y g:iA", strtotime($row[3])) ;
            if (isLoggedIn())
                echo " - DELETE";
            echo "</td></tr>";
            echo "<tr><td colspan='2'>" . $row[2] . "</td></tr>";
        }
    }

私が抱えている問題は、DELETEという単語がある場所に送信ボタンを配置したいということです。これにより、コメント行ごとにボタンが作成されるため、クリックした場合、コードはどのボタンが押されたかを認識しません。とにかくこれを回避する方法はありますか?各ボタンには個別のIDがあり、コードが送信されると、コメントのIDがわかります。したがって、そのコメントIDのデータベーステーブルで削除を処理できます。

DELETEという単語が次のようなコードを追加してみました。

if (isLoggedIn())
                echo " - <button type='submit' name='delCom_sub' value='$row[5]' >X</button>";

ただし、次のコードを使用してボタンクリックを処理しようとすると、次のようになります。

if (!empty($_POST['delCom_sub']))
{
    echo "test";
}

ボタンをクリックすると、「テスト」という単語は表示されません。

4

1 に答える 1

3

コメント行ごとに個別のフォームで行うことができます。コメントの ID は隠しフィールドに保存されます。この方法を使用すると、ネストされたフォームを防ぐために親フォームを削除する必要があります。

        if (isLoggedIn())
        {
            echo '<form action="delete.php" method="post">
                  <input type="hidden" name="id" value="' . (int)$row['id'] . '" />
                  <input type="submit" value="Delete" />
                  </form>';
        }

投稿先のページ、つまりdelete.php:

if(isset($_POST['id']) && isLoggedIn())
{
    // do the delete with $_POST['id']
}

それ以外に、ボタンがクリックされたときに非表示フィールドにデータを入力することで、Javascript でそれを行うことができます。もう 1 つのオプションは、コメント ID を送信ボタンのname属性に格納することです。これを行うには、投稿変数をループして ID を解析する必要があります。

ボタンを使用した例name:

if (isLoggedIn())
            echo " - <input type='submit' name='delete_" . (int)$row['id'] . "' value='Delete' />";

受信ページで:

if($_SERVER['REQUEST_METHOD'] == 'POST' && isLoggedIn())
{
    foreach($_POST as $key => $value)
    {
        if(strpos($key, 'delete_') === 0)
        {
            $id = substr($key, 7);
            // do the delete for $id
        }
    }
}
于 2013-02-04T12:08:01.967 に答える