Php while循环中的do while语句可能是语法吗?

Php while循环中的do while语句可能是语法吗?,php,mysqli,do-while,Php,Mysqli,Do While,平台上的用户选择社交媒体服务,然后选择预算范围。我收集信息并通过ajax post发布到php。现在有了这些信息,我正试图为他创建一个随机计划,定价在他的预算之内。我在while循环中使用do-while,但它会永远加载,并且不太起作用。基本上,如果用户选择每月预算为30美元的Facebook、Twitter和YouTube,应用程序应该返回Facebook Bronze、Twitter Bronze和YouTube Bronze。然后加上15美元的预付费,显示总共30美元。我真的被困在这件事上

平台上的用户选择社交媒体服务,然后选择预算范围。我收集信息并通过ajax post发布到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

你有一个无限循环:

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

只要条件为真,就会执行此操作。由于$subtotal和$monthlybudget在循环中都没有更改,因此一旦进入循环,它将永远不会退出。

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

在一段时间内执行do while原则上没有问题,但是do while循环将永远不会完成,因为循环中的任何内容都不会更改在while条件下测试的变量的值。@Nick:Argh。当然我现在几乎想删除这个。这可能是正确的做法。一旦你理清了这个循环的条件,就要问一个新问题。