Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript else语句逻辑未运行_Javascript_Php_Jquery_Ajax - Fatal编程技术网

Javascript else语句逻辑未运行

Javascript else语句逻辑未运行,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我有一个名为goals的数据库表。默认情况下,用户在此表中没有记录,只有在创建目标时才会有记录。然后我有一个进度条,它显示了目标竞争的进度。我最初遇到的问题是这些值是未定义的,因此我尝试向其中添加逻辑来计算行数,如果大于0,则发送调整后的变量,如果不大于0,则发送0。出于某种原因,if条件似乎始终在运行。我认为是这样,因为它试图运行代码的分割行: $goal_completion_rate = $actual_status / $total_status ; $goal_comp

我有一个名为
goals
的数据库表。默认情况下,用户在此表中没有记录,只有在创建目标时才会有记录。然后我有一个进度条,它显示了目标竞争的进度。我最初遇到的问题是这些值是未定义的,因此我尝试向其中添加逻辑来计算行数,如果大于0,则发送调整后的变量,如果不大于0,则发送0。出于某种原因,if条件似乎始终在运行。我认为是这样,因为它试图运行代码的分割行:

$goal_completion_rate = $actual_status / $total_status ;
        $goal_completion_rate_percentage = round((float)$goal_completion_rate * 100) . '%';
        $result = array('total_goals' => $total_status, 'goals_completed' => $actual_status, 'completion_percentage' => $goal_completion_rate_percentage);
以下是错误:

<b>Warning</b>:  Division by zero in <b>/</b> on line <b>26</b><br />
{"total_goals":"0","goals_completed":null,"completion_percentage":"0%"}
阿贾克斯



sql将始终返回一行。聚合函数确保了这一点。如果没有要报告的目标,count(*)函数将在该行中返回0,sum()函数将返回null。因此,
$goal\u count
将始终为1,实际上不是用户的目标记录计数。实际保存目标记录数的变量是
$total\u status
。您应该测试sql是否总是返回一行,而不是
$goal\u count

。聚合函数确保了这一点。如果没有要报告的目标,count(*)函数将在该行中返回0,sum()函数将返回null。因此,
$goal\u count
将始终为1,实际上不是用户的目标记录计数。实际保存目标记录数的变量是
$total\u status
。您应该测试它,而不是
$goal\u count

首先,
if($goal\u total\u stmt=$con->prepare($goal\u total\u sql)){
您分配的是
=
而不是测试是否相等
=
==
显然,$actual\u状态是在满足触发if语句的条件后触发错误的。您需要做的是测试$actual\u状态,然后再除以它,从而触发if语句。
=/code>在作业中,
==
==
是比较的。我从if
if($goal\u total\u stmt=$con->prepare($goal\u total\u sql)){
中取出了这个($goal\u total\u stmt=$con->prepare($goal\u total\u sql)
好,首先,
if($goal\u total\u stmt=$con prepare($goal\u total\u sql)){
您分配的是
=
而不是测试是否相等
=
==
显然,$actual\u状态是在满足触发if语句的条件后触发错误的。您需要做的是测试$actual\u状态,然后再除以它,从而触发if语句。
=/code>是作业,
==
==
是比较的。我从if
if($goal\u total\u stmt=$con->prepare($goal\u total\u sql)){
中取出了这个
多亏了这个技巧!现在唯一的一件事是,我的进度条抛出了一堆未定义的错误,因为它的值是0。有没有办法让它在没有所有错误的情况下读取0?当没有目标时,不要将
$result
设置为
0
,试着将它设置为
数组('total_goals'=>1,'goals_completed'=>1,'completion_percentage'=>100%);
。或者您可以使用
0
而不是
1
。这实际上就是我所做的。我忘了更新代码。下面是我写的:
$result=array('total_goals'=>0,'goals_completed'=>0,'completion_percentage'=>0)
在你的javascript中有
goals\u completed/total\u goals
,如果你使用
0
而不是
1
,这会给你一个被零除的错误。也许你应该使用
var-total\u-goals=Math.max(result.total\u-goals,1);
谢谢。我这样做了,如果(total\u-goals>=1){bar.animate),它就成功了(目标完成/总目标);}其他{bar.animate(0);}非常感谢您的帮助。感谢您的帮助!现在唯一的问题是,由于值为0,我的进度条抛出了一堆未定义的错误。有没有办法让它在没有所有错误的情况下读取0?当没有目标时,不要将
$result
设置为
0
,尝试将其设置为
数组('total_goals'=>1,'goals_completed'=>1,'completion_percentage'=>100%);
。或者您可以使用
0
而不是
1
。这实际上就是我所做的。我忘了更新代码。下面是我写的:
$result=array('total_goals'=>0,'goals_completed'=>0,'completion_percentage'=>0)
在你的javascript中有
goals\u completed/total\u goals
,如果你使用
0
而不是
1
,这会给你一个被零除的错误。也许你应该使用
var-total\u-goals=Math.max(result.total\u-goals,1);
谢谢。我这样做了,如果(total\u-goals>=1){bar.animate),它就成功了(goals_completed/total_goals);}其他{bar.animate(0);}我感谢您的帮助。
$goal_total_sql = "
        SELECT sum(status) as sumna,
        COUNT(*) as cnt
        FROM goals
        WHERE user_id = ?
    ";
    $total_status = 0;
    $actual_status = 0;
    $goal_completion_rate_percentage = 0;
    $goal_count = 0;
    if ($goal_total_stmt = $con->prepare($goal_total_sql)) {
        $goal_total_stmt->execute(array($user_id));
        $rows = $goal_total_stmt->fetchAll(PDO::FETCH_ASSOC);
        $goal_count = $goal_total_stmt->rowCount();
        foreach ($rows as $row) {
            $actual_status = $row['sumna'];
            $total_status = $row['cnt'];
        }
    }
    if ($goal_count > 0) {
        $goal_completion_rate = $actual_status / $total_status ;
        $goal_completion_rate_percentage = round((float)$goal_completion_rate * 100) . '%';
        $result = array('total_goals' => $total_status, 'goals_completed' => $actual_status, 'completion_percentage' => $goal_completion_rate_percentage);
            echo json_encode($result);
    }
    else {
        $result = 0;
        echo json_encode($result);
    }
function goalBar(){
        $.ajax({
                url: "ajax-php/goal-bar.php",
                type: "get",
                dataType : 'json',
                success: function (result) {
                  //console.log(result);
                    if (result == "Error!") {
                        alert("Unable to retrieve goal bar info!");
                        alert(result);
                    } else {
                        var total_goals = result.total_goals;
                        var goals_completed = result.goals_completed;
                        var goal_percent = result.completion_percentage;
                        var percent_symbol = '%';
                        $('#total-goals').html(total_goals);
                        $('#goals-completed').html(goals_completed);
                        $('#goal-percentage').html(goal_percent);
                        var bar = new ProgressBar.Circle('#goal-bar-container', {
                          color: '#aaa',
                          // This has to be the same size as the maximum width to
                          // prevent clipping
                          strokeWidth: 8,
                          trailWidth: 2,
                          easing: 'easeInOut',
                          duration: 1400,
                          text: {
                            autoStyleContainer: false
                          },
                          from: { color: '#aaa', width: 1 },
                          to: { color: '#38c', width: 6 },
                          // Set default step function for all animate calls
                          step: function(state, circle) {
                            circle.path.setAttribute('stroke', state.color);
                            circle.path.setAttribute('stroke-width', state.width);

                            var value = Math.round(circle.value() * 100);
                            if (value === 0) {
                              circle.setText('0');
                            } else {
                              circle.setText(value);
                            }

                          }
                        });
                        bar.text.style.fontFamily = '"Raleway", Helvetica, sans-serif';
                        bar.text.style.fontSize = '2rem';

                        bar.animate(goals_completed/total_goals);  // Number from 0.0 to 1.0
                    }
                },
                error: function (xhr, textStatus, errorThrown) {
                    alert(textStatus + " | " + errorThrown);
                    console.log("error"); //otherwise error if status code is other than 200.
                }
        });
    }   
    goalBar();