Пользователь на платформе выбирает услуги социальных сетей, а затем выбирает диапазон бюджета. Я собираю информацию и отправляю на php через сообщение ajax. Теперь, имея информацию, я пытаюсь создать для него случайный план с ценами в пределах его бюджета. Я использую do-while внутри цикла while, но он загружается вечно и не работает. Обычно, если пользователь выбирает Facebook, Twitter и YouTube с ежемесячным бюджетом в 30 долларов, приложение должно вернуть Facebook Bronze, Twitter Bronze и YouTube Bronze. Затем добавьте предоплату в размере 15 долларов и покажите общую сумму 30 долларов. Я действительно застрял, пытаясь заставить это работать.
Таблица БД выглядит примерно так
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, ни $ monthbudget не изменяются внутри цикла, после входа в цикл он никогда не выйдет.
Проблема в том, что условие do-while никогда не меняется с ИСТИНА на ЛОЖЬ. Если условие $subtotal < $monthlybudget начинается как ИСТИНА, инструкции в цикле будут выполняться бесконечно.
В принципе, нет ничего плохого в
do-whileвнутриwhile, однако ваш циклdo-whileникогда не завершится, потому что ничто внутри цикла не изменяет значения переменных, тестируемых в условииwhile.