如何将 +1 值添加到 php

Posted

技术标签:

【中文标题】如何将 +1 值添加到 php【英文标题】:How to add +1 value to php 【发布时间】:2015-09-03 23:14:19 【问题描述】:

所以我正在制作一个仅使用 php 和 Ajax 的饼图。但我看不出我必须如何进一步编码才能使其工作(见第一张图片)。因此,当有人单击按钮 A B C 或 D 时,必须看到(无需加载页面)您已投票支持其中之一,并且在图表中也可以看到。其实就是这样!第二张图片显示了我的数据库。

在我忘记告诉我我的数据库中没有要更改的图片之前。

我希望你们中的一些人可以帮助我解决这个问题。我的一些代码:

<p><h1>Breng jou stem uit</h1></p><br />
<form action = "<?php
echo $_SERVER['PHP_SELF'];
?>" method = "GET"> 
<button type="button" name="a">Partij A</button><br />
<button type="button" name="b">Partij B</button><br />
<button type="button" name="c">Partij C</button><br />
<button type="button" name="d">Partij D</button>
 </form>
<?php

// Connects to your Database

include('../../../connection.php');

$sql = mysql_query("SELECT * FROM votes");

while ($row = mysql_fetch_array($sql)) 
echo $partijA = $row['partijA'];
$partijB = $row['partijB'];
$partijC = $row['partijC'];
$partijD = $row['partijD'];
if (isset($_GET['a'])) 
    echo $resultA = $partijA + 1;
 else 
    echo "1";


$resultB = $partijB + 1;
$resultC = $partijC + 1;
$resultD = $partijD + 1;


// Name of our cookie

$cookie = "Voted";

// A function to display our results - this refrences vote_pie.php which we     will also make

function pie()

    $data = mysql_query("SELECT * FROM votes") or die(mysql_error());
    $result = mysql_fetch_array($data);
    $total  = $result[partijA] + $result[partijB] + $result[partijC] +      $result[partijD];
    $one    = round(360 * $result[partijA] / $total);
    $two    = round(360 * $result[partijB] / $total);
    $per1   = round($result[partijA] / $total * 100);
    $per2   = round($result[partijB] / $total * 100);
    $per3   = round($result[partijC] / $total * 100);
    $per4   = round($result[partijD] / $total * 100);
    echo "<img src=vote_pie.php?one=" . $one . "&two=" . $two . "><br/>";
    Echo "<font color=000000>Partij A</font> = $result[partijA] votes = $per1 <br /> 
         <font color=000000>Partij B</font> = $result[partijB] votes = $per2 <br />
         <font color=000000>Partij C</font> = $result[partijC] votes =  $per3 <br /> 
         <font color=000000>Partij D</font> = $result[partijD] votes = $per4 <br />";


// displays the poll results

pie();
?>

【问题讨论】:

忘了说这是我的基本代码...github.com/Goatella/PHPGraphicalPoll But I can't see how I must code further to make it work... - 什么不起作用?你有任何错误吗? 您好,欢迎来到 ***!让您的代码同事更容易阅读您的问题。请避免对话式写作,而应专注于您遇到的核心问题。可以使用 img 标签将图像内嵌在您的帖子中。请进一步详细说明您面临的问题,目前尚不清楚您遇到了什么问题。 没有错误!问题是我是 PHP 的初学者,但我完全无法控制我必须做什么才能使这个图表工作。我知道对于更高级的程序员来说这是一件简单的事情。它所要做的就是在按 A B C 或 D 时添加一个值 +1,它必须显示在 votes= 之后和图表中。 停止使用mysql 扩展程序,read the red warning box:该扩展程序已弃用,将来将被删除。如果您没有看到E_DEPRECATED 通知,请将错误级别设置为E_ALL|E_STRICT 并打开display_errors。详情请check the docs 【参考方案1】:

您的代码中存在许多问题,但导致您遇到的实际问题是您的函数 pie 不会增加您从数据库中获取的值,这是在外部完成的函数,但没有使用增量值:

function pie()

    //this query was already performed, pass the result resource to this function, don't re-run the query
    $data = mysql_query("SELECT * FROM votes") or die(mysql_error()); //google or die must die
    $result = mysql_fetch_array($data);//mysql is deprecated
    //array keys need to be quoted
    $total  = $result[partijA] + $result[partijB] + $result[partijC] +      $result[partijD];
    $one    = round(360 * $result[partijA] / $total);
    $two    = round(360 * $result[partijB] / $total);
    $per1   = round($result[partijA] / $total * 100);
    $per2   = round($result[partijB] / $total * 100);
    $per3   = round($result[partijC] / $total * 100);
    $per4   = round($result[partijD] / $total * 100);
    //functions return, they don't echo
    echo "<img src=vote_pie.php?one=" . $one . "&two=" . $two . "><br/>";
    Echo "<font color=000000>Partij A</font> = $result[partijA] votes = $per1 <br /> 
         <font color=000000>Partij B</font> = $result[partijB] votes = $per2 <br />
         <font color=000000>Partij C</font> = $result[partijC] votes =  $per3 <br /> 
         <font color=000000>Partij D</font> = $result[partijD] votes = $per4 <br />";

我冒昧地添加了一些 cmets 来指出代码的几个问题。

只需删除在pie 函数之外查询和递增的代码,并让您的函数完成所有工作。将它需要的值传递给它(即$_GET,并让它返回结果,而不是回显它)。 我会重写函数以接受这样的参数(此时不打算不使用 mysql):

function getPie(array $params, $connection)

    //added limit 1, seeing as you're only processing the first result
    $result = mysql_query($connection, 'SELECT * from votes LIMIT 1');
    $row = mysql_fetch_assoc($result);
    if (isset($params['a'])) 
        $row['partijA'] += 1;
     else if (isset($params['b'])) 
        $row['partijB'] += 1;
     //add more else's for all parties
    $percentages = [];//array
    foreach ($row as $key => $val) 
        $percentages[$key] = round(($val/$total) * 100);
    
    $total = array_sum($row);//total of all votes
    $markup = '<img src=vote_pie.php?one=' .
      $percentages['partijA']*360 . '&two=' . $percentages['partijB']*360 . '><br>';
    foreach ($percentages as $k => $perc) 
        $markup .= '<font color=000000>Partij ' . str_replace('partij', $k) . '</font> = '.
            $row[$key] . ' votes = ' . $perc . '<br>';
    
    return $markup;

然后像这样调用这个函数:

if ($_GET) //if a get form was submitted
    echo getPie($_GET, $db);//where $db holds the mysql resource

不过,这只是一个快速解决方案……还有很长的路要走……

我改变了什么:

快速浏览我所做的实际更改:

向函数传递参数:该函数现在接受 2 个参数、一个数组(在本例中为 $_GET 值)和要使用的数据库连接。 循环而不是重复:我没有重复 round($resutl['key']/total*100),而是使用了循环,因此我只需编写一次此语句,并将其应用于所有值 为百分比使用数组:我没有将每一方的百分比分配给新变量,而是选择使用数组。这样可以将属于一起的数据保存在一起,嗯......在一起 循环创建标记:虽然我发现将标记串在一起是不好的做法,但我注意到大多数 html 实际上是相同的,因此我没有对所有内容进行硬编码,而是简单地遍历 $row$percentages数组(它们都有相同的键),并填写具体的值。这也意味着我可以安全地添加派对,而无需更改创建标记的代码

【讨论】:

以上是关于如何将 +1 值添加到 php的主要内容,如果未能解决你的问题,请参考以下文章

如何将数组值添加到数组的中间?

如何将 parse.com php sdk 添加到 symfony

如何将数组值添加到关联数组的中间?

在 PHP 中,如何将对象元素添加到数组中?

如何将多个值添加到python中的字典键? [关闭]

如何将值添加到从颤振到 Firestore 的数组中