增加值按钮“mrk2”

时间:2014-01-20 18:08:35

标签: php html mysql sql

更新帖子:Increase in Value button

我发帖询问如何制作增值按钮。我得到了一个不错的答案,我尝试过它并没有用。

原始

$result = mysqli_query($con, "SELECT * FROM champion_counters_b WHERE champion_name='" . $search_result . "'");

echo "<table class='champion_counters' border='1'><tr><th>Champion Counter</th><th>Up Votes</th><th>Down Votes</th></tr>";
while($row = mysqli_fetch_array($result)) {
    echo "<tr>";
    echo "<td>" . $row['champion_counter'] . "</td>";
    echo "<td>" . $row['upvotes'] . "</td>";
    echo "<td>" . $row['downvotes'] . "</td>";
}

echo "</table>";

当前

    $result = mysqli_query($con, "SELECT * FROM champion_counters_b WHERE champion_name='" . $search_result . "'");

    echo "<table class='champion_counters' border='1'><tr><th>Champion Counter</th><th>Up Votes</th><th>Down Votes</th></tr>";
    while($row = mysqli_fetch_array($result)) {
        echo "<tr>";
        echo "<td>" . $row['champion_counter'] . "</td>";
        echo "<td><a href='action.php?do=up&id=" . $row['upvotes'] . "'>Upvote [" . $row['upvotes'] . "]</a></td>";
        echo "<td><a href='action.php?do=down&id=" . $row['downvotes'] . "'>Downvote [" . $row['downvotes'] . "]</a></td>";
    }
    echo "</table>";
    mysqli_close($con);
    ?>

action.php的:

    $action = $_GET['do'];
    $id = $_GET['id'];

    if ($action=="up") {
        $result = mysqli_query($con, "UPDATE champion_counters_b SET" . $id . "=" . $id+1 . "'");
    }
    elseif ($action=="down") {
        $result = mysqli_query($con, "UPDATE champion_counters_b SET" . $id . "=" . $id-1 . "'");
    }
    else {echo "error: 002 / voting error";}

    mysqli_close($con);
    ?>

正如您所看到的,我实施了建议的更改以及可行的更改,但他们并不是更新数据而是什么也没做。按下"upvote"/"downvote"时,它会将当前值作为$id而不是数据的位置来更新它。

tl; dr:我尝试了上一个帖子的修复,它没有做任何事情。请帮帮忙?

1 个答案:

答案 0 :(得分:1)

对不起,如果我不清楚,让我再试一次:

您在表格中插入了一个链接,该链接调用了action.php。 action.php更新数据库。更新所需的信息作为GET参数传递。

要更新数据库,您需要知道要做什么,其次,WHICH数据库条目实际上会受到影响。

一步一步:

首先,您必须将链接插入表格中:

$result = mysqli_query($con, "SELECT * FROM champion_counters_b WHERE champion_name='" . $search_result . "'");

echo "<table class='champion_counters' border='1'><tr><th>Champion Counter</th><th>Up Votes</th><th></th><th>Down Votes</th><th></th></tr>";
while($row = mysqli_fetch_array($result)) {
    echo "<tr>";
    echo "<td>" . $row['champion_counter'] . "</td>";
    echo "<td>" . $row['upvotes'] . "</td>";
    echo "<td><a href='action.php?do=up&id=" . $row['key'] . "'>Upvote</a></td>";
    echo "<td>" . $row['downvotes'] . "</td>";
    echo "<td><a href='action.php?do=down&id=" . $row['key'] . "'>Downvote</a></td>";
    echo "</tr>";
}

echo "</table>";

点击链接后,我们会向action.php发送两条信息。

  1. 我们必须执行的操作,无论是向上还是向下。它告诉我们该做什么。

  2. 我们必须向上或向下投票的元素的ID。 id告诉我们WHICH元素受到影响,而不是元素的投票数。

  3. 正如我在上一篇文章的回答中所提到的,$row['key']应该包含数据库的主键,例如:唯一标识符。您应该在数据库中有这样的标识符,否则您无法引用特定的数据库条目。但是,由于我们想要更新特定数据库条目的投票计数,我们需要有可能唯一地标识此数据库条目。

    在action.php中,您必须执行以下操作:

    $action = $_GET['do'];
    $id = $_GET['id'];
    
    if ($action=="up") {
        mysqli_query($con, "UPDATE champion_counters_b SET upvotes = upvotes + 1 WHERE key = " . $id . "'");
    }
    elseif ($action=="down") {
        mysqli_query($con, "UPDATE champion_counters_b SET downvotes = downvotes - 1 WHERE key = " . $id . "'");    }
    else {echo "error: 002 / voting error";}
    
    mysqli_close($con);
    

    我们使用id值来选择我们必须更新的数据库条目。这是由UPDATE语句中的WHERE key = $id完成的。当前的投票计数来自数据库本身 - 无需在GET参数中传递当前的投票计数。

    更新数据库后,您可以重定向到原始页面并重新加载表格。然后,更新的投票计数应该显示出来。