while循环内的do-while语句是否可能语法?

时间:2018-09-18 00:06:47

标签: php mysqli do-while

平台上的用户选择社交媒体服务,然后选择预算范围。我收集信息并通过ajax发布到PHP。现在,利用这些信息,我试图为他创建一个随机计划,并在其预算范围内定价。我在while循环中使用do-while,但它会永久加载并且无法正常工作。基本上,如果用户选择每月预算为30美元的Facebook,Twitter和YouTube,则该应用应返回Facebook Bronze,Twitter Bronze和YouTube Bronze。然后加上15美元的预付款,并显示总计30美元。我真的很想尝试这项工作。

Db表看起来像这样

id | social   | price | level
1  | Facebook | 5     | Bronze
2  | Facebook | 7     | Silver
3  | Facebook | 9     | Gold
4  | Twitter  | 5     | Bronze
5  | Twitter  | 7     | Silver
6  | Twitter  | 9     | Gold
7  | YouTube  | 5     | Bronze
8  | YouTube  | 7     | Silver
9  | YouTube  | 9     | Gold
...

服务器端

$monthlybudget = $_POST['monthlybudget'];
$mysocialmediachoice = $_POST['mysocialmediachoice'];
$upfront = 15;

$query = "SELECT * FROM `services` WHERE social IN ($mysocialmediachoice)";//yes I do know this is prone to injections this is just a demo for here NOT the actual code
$webstsm = $conn->prepare($query);
$webstsm->execute();
$result = $webstsm->get_result();

if ($monthlybudget =='30') {
    $level ='Bronze';
}
if ($monthlybudget =='200') {
    $level ='Silver';
}
if ($monthlybudget =='400') {
    $level ='Gold';
}

while ($row = $result->fetch_assoc()) {
    if (($row['level'] == $level)) {
        $subtotal +=($row['price'] + $upfront);//sum of total of array
        //var_export($row); //testing
        do {
            echo $row['social'];
        } while ($subtotal < $monthlybudget);
    }
}
$sumtotal = ($subtotal);
echo $sumtotal;//print total of recommended plan

2 个答案:

答案 0 :(得分:4)

您有一个无限循环:

do {
    echo $row['social'];
} while($subtotal < $monthlybudget);

只要条件为真,这将执行。由于$ subtotal或$ monthlybudget都不会在循环内更改,因此一旦进入循环,就永远不会退出。

答案 1 :(得分:3)

问题在于,do-while的条件永远不会从TRUE变为FALSE。如果条件$subtotal < $monthlybudget以TRUE开头,则循环中的指令将永远运行。