繁体   English   中英

PHP为什么我的while循环没有为数据库的列中的每一行分配一个单独的ID

[英]PHP Why is my while loop not assigning each row an individual ID from column in database

我有一个问题,我似乎无法分别从数据库的列中为每个DIV分配ID。

方案:我的页面上充满了客户,每个页面旁边是一个投票和投票按钮。 当我单击其中之一时,它仅将+1添加到正列或负列。

有什么问题? 无论我投票给哪个客户,问题都只会更新ClientID'1'

到目前为止,我做了什么?

  • 我正在使用while循环从数据库中检索所有客户端。 我已经为$ _POST ['ClientID']的数据客户端ID提供了每个div。
  • 我有一些类,分别称为表决和表决,因此可以在我的JS脚本中引用它们。
  • 在我的脚本中,我使用表决类和表决类将data-clientid的clientid分配给变量
  • 然后在voteup / down php文件中,我使用此clientid来使用update sql来更新列。

我的代码是什么?

我的主页显示了客户和投票按钮 (缩短到您需要看到的位置,包括与数据库的连接,并且所有这些都工作正常)

<?php

$clientInfo = "SELECT * FROM Clients ORDER BY Client ASC";
$stmt = sqlsrv_query($conn, $clientInfo);

echo "<div style='width: 100%; display: inline-block;'>";

while ($client = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC))
{
    echo "<div class='clientid' style='height: 50px; font-size: 18px; vertical-align: middle; display: inline-block; width: 100%'>" . 

            "
            <div style='width: 35%;'></div>

            <div onclick=\"voteUp()\" style='display: inline-block; width: 5%;'>      
                <span style='font-size: 20px;' class='hover-cursor fa fa-chevron-up vote-up'></span>
            </div>" .

                 "<div class='hover-cursor hvr-underline-reveal voteup votedown' data-clientid='{$client['ClientID']}' style='width: 20%; display: inline-block;'>" . $client['Client'] . "</div>" . 

            "<div onclick=\"voteDown()\" style='display: inline-block; width: 5%;'>
                <span style='font-size: 20px; text-align: right;' class='hover-cursor fa fa-chevron-down vote-down'></span>
            </div>

            <div style='width: 35%;'></div>

         </div> 
        <br />";
}

echo "</div>";

?>

然后,这将使用我的JQuery链接到我的脚本文件 (我将其设置为在控制台中打印ID,这样我就可以看到它正在击中哪个ID。 我只是以Vote Up为例

window.voteUp = function() {
    var clientid = $(".voteup").data("clientid");

    $.post("voteup.php", {clientid: clientid}, function(data) {
       console.log("Data:" + clientid) 
    });
    return false;
}

然后在$ .post中有我所指的voteup.php

<?php

if (isset($_POST['clientid'])) {
    $voteup = "UPDATE Clients SET Pos = (SELECT MAX(Pos) FROM Clients) + 1 WHERE ClientID = " . $_POST['clientid'];

    $stmt = sqlsrv_query($conn, $voteup);
} else {
    echo "Failed";
}

?>

JavaScript问题

如评论中所述,您的Javascript代码仅获得DOM树中的第一个voteup元素。

您需要使用一种动态方式来为您要投票(或投票)的客户端找到特定的voteup div,请尝试以下操作:

while ($client = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC))
{
    echo "<div class='clientid' style='height: 50px; font-size: 18px; vertical-align: middle; display: inline-block; width: 100%'>" . 

            "
            <div style='width: 35%;'></div>

            <div style='display: inline-block; width: 5%;'>      
                <span style='font-size: 20px;' class='hover-cursor fa fa-chevron-up vote-up'></span>
            </div>" .

                 "<div class='hover-cursor hvr-underline-reveal voteup votedown' data-clientid='{$client['ClientID']}' style='width: 20%; display: inline-block;'>" . $client['Client'] . "</div>" . 

            "<div style='display: inline-block; width: 5%;'>
                <span style='font-size: 20px; text-align: right;' class='hover-cursor fa fa-chevron-down vote-down'></span>
            </div>

            <div style='width: 35%;'></div>

         </div> 
        <br />";
}

我刚刚删除了您的投票和投票按钮的onclick事件。

现在您只需要一个脚本:

<script>
    $(".vote-up").click(function(){
        var clientId = $(this).parents(".clientid").find(".voteup").data("clientid");

        $.post("voteup.php", {clientid: clientid}, function(data) {
            console.log("Data:" + clientid)
        });
        return false;
    });

    $(".vote-down").click(function(){
        var clientId = $(this).parents(".clientid").find(".votedown").data("clientid");

        $.post("votedown.php", {clientid: clientid}, function(data) {
            console.log("Data:" + clientid)
        });
        return false;
    });
</script>

基本上,我们获得了表决按钮的顶级父项div.clientid ,并使用它来搜索包含clientid datadiv.voteup


PHP问题

另外,您的UPDATE查询错误,您正在通过不带where子句的子查询从客户端中选择MAX(pox),请尝试以下操作:

$voteup = "UPDATE Clients SET Pos = (SELECT MAX(Pos) FROM Clients WHERE ClientID = " . $_POST['clientid']. ") + 1 WHERE ClientID = " . $_POST['clientid'];

以后,尝试将查询转换为参数化查询,以避免sql注入问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM