【问题标题】:PHP Progress Bar: % Of 2 NumbersPHP 进度条:2 个数字的百分比
【发布时间】:2016-08-28 13:28:40
【问题描述】:

我对进度条百分比有疑问。我正在使用 MySQL 数据库创建投票系统(是/否),如果 2 个数字加起来超过 100,则进度条无法正常工作。 http://i.stack.imgur.com/uTpdM.png

我所需要的只是将数字“转换”为百分比,即使投票超过 100。例如,如果有 1000 票(750 代表是,250 代表否),结果应该是 '75%是,25% 否。

提前谢谢你!

    <body>
    <?php
        define('HOST', 'localhost');
        define('USER', 'root');
        define('PASSWORD', '');
        define('DB', 'rating');

        $db_connection = new mysqli(HOST, USER, PASSWORD, DB);

        $SQL_REQUEST = "SELECT Yes, No FROM `ratings`";

        $RESULT = $db_connection->query($SQL_REQUEST);

        if($RESULT->num_rows > 0)
        {
            while($ROW = $RESULT->fetch_assoc())
            {
                $gp = $ROW['Yes'];
                $bp = $ROW['No'];
            }
        }
    ?>

    <div class="container">
        <div class="panel panel-default panel-margin-top">
            <div class="transparent">
                <div class="panel-heading">
                    <div class="panel-title">
                        Rate It
                    </div>
                </div>
            </div>

            <div class="panel-body">
                <div class="progress">
                    <div class="progress-bar progress-bar-success" style="width:<?php echo $gp ?>%"><?php echo $gp ?>% users voted Yes</div>

                    <div class="progress-bar progress-bar-danger" style="width:<?php echo $bp ?>%"><?php echo $gp ?>% users voted No</div>
                </div>
            </div>
        </div>
    </div>
</body>

【问题讨论】:

    标签: php mysql twitter-bootstrap progress-bar percentage


    【解决方案1】:

    您在每次迭代时覆盖 yesno

    while($ROW = $RESULT->fetch_assoc())
        {
        $gp = $ROW['Yes'];
        $bp = $ROW['No'];
        }
    

    您重新分配值。我会这样做:

    $gp = 0;
    $bp = 0;
    while($ROW = $RESULT->fetch_assoc())
        {
        $gp = !empty($ROW['Yes']) ? $gp + 1 : $gp;
        $bp = !empty($ROW['No']) ? $bp + 1 : $bp;
        }
    

    或者如果 $ROW['Yes']$ROW['No'] 是 tinyints....

    $gp = 0;
    $bp = 0;
    while($ROW = $RESULT->fetch_assoc())
        {
        $gp += $ROW['Yes'];
        $bp += $ROW['No'];
        }
    

    由于您只有一行,因此您不需要循环提取。

    if($RESULT->num_rows > 0)
       {
            $ROW = $RESULT->fetch_assoc())
            $gp = empty($ROW['Yes']) ? 0 : $ROW['Yes'];
            $bp = empty($ROW['No']) ? 0 : $ROW['No'];
            $yes_vote_average = round(($gp / ($gp + $bp)) ,2) * 100;
            $no_vote_average = round(($bp / ($gp + $bp)), 2) * 100;
       }
    

    然后分别在&lt;div&gt;...&lt;/div&gt; 输出中使用$yes_vote_average$no_vote_average

    【讨论】:

    • 感谢您的回答,但您的方法中没有一个不起作用。
    • 你能改写一下吗?有错误吗?数据不正确?表格中是否只有一行带有百分比?
    • 这就是我从你的第一种方法中得到的:i.imgur.com/mUHoPuv.png |第二种方法:i.imgur.com/tigchd9.png |这些是我的数据库的值:i.imgur.com/q5L1VIv.png
    • 这个答案也总是假设$RESULT-&gt;num_rows 总是正确的,否则你会得到未定义的变量错误。您可以将变量初始化为默认值以避免这种情况。如果这解决了您的问题,请记住接受它。
    • 你使用新变量了吗?
    猜你喜欢
    • 1970-01-01
    • 2012-12-23
    • 1970-01-01
    • 2011-06-10
    • 2015-06-03
    • 2010-11-22
    • 2017-08-03
    相关资源
    最近更新 更多