Почему цикл while извращает запрос на добавление записей в таблицу базы данных?
Ввожу данные в поля
<div class="modal-body">
<label>
<span class = "title"> Процессор </span>
<input type="text" name="cpu">
</label>
<label>
<span class = "title"> Видеокарта </span>
<input type="text" name="gpu" autocomplete="off">
</label>
<label>
<span class = "title"> Объём ОЗУ</span>
<input type="text" name="ram">
</label>
<label>
<span class = "title"> Материнская плата </span>
<input type="text" name="mb" >
</label>
<label>
<span class = "title"> Объём хранилища </span>
<input type="text" name="drive">
</label>
<label>
<span class = "title"> Блок питания </span>
<input type="text" name="psu">
</label>
<label>
<span class = "title" > Количество </span>
<input type="text" name="count" value=1>
</label>
Передаю через fetch:
var send= document.querySelector("#send");
send.onclick = function () {
var inp_cpu = document.querySelector('input[name=cpu]').value;
var inp_gpu = document.querySelector('input[name=gpu]').value;
var inp_ram = document.querySelector('input[name=ram]').value;
var inp_mb = document.querySelector('input[name=mb]').value;
var inp_drive = document.querySelector('input[name=drive]').value;
var inp_psu = document.querySelector('input[name=psu]').value;
var inp_count = document.querySelector('input[name=count]').value;
var formData = new FormData();
formData.append("cpu", inp_cpu);
formData.append("gpu", inp_gpu);
formData.append("ram", inp_ram);
formData.append("mb", inp_mb);
formData.append("drive", inp_drive);
formData.append("psu", inp_psu);
formData.append("coun", inp_count);
fetch('enterpc.php', {
method: 'POST',
body: formData
})
modal.style.display = "none";
}
В PHP-скрипт на добавление данных в базу:
if (isset($_POST)) { $kolvo=$_POST[coun]; do {
$stmt = $conn->prepare("INSERT INTO `pc` (`cpu`, `gpu`, `ram`, `mb`, `drive`, `psu`)
VALUES ('".$_POST[cpu]."', '".$_POST[gpu]."', '".$_POST[ram]."', '".$_POST[mb]."', '".$_POST[drive]."', '".$_POST[psu]."')");
$kolvo-1;
$stmt->execute();} while ($kolvo>0);
}
Я знаю про уязвимость к SQL-инъекциям - сейчас не про них. В итоге в таблицу добавляется тысячи строк, хотя я указывал, например, 10 или даже 2. Ещё возвращает ошибку maximum execution time of 30 seconds exceeded
. Циклом while я без проблем вывожу данные через SELECT.
Команда добавляет указанное количество строк с циклом for:
if (isset($_POST)) { $kolvo=$_POST[coun];
for($i=0;$i< $kolvo;$i++) {
$stmt = $conn->prepare("INSERT INTO `pc` (`cpu`, `gpu`, `ram`, `mb`, `drive`, `psu`)
VALUES ('".$_POST[cpu]."', '".$_POST[gpu]."', '".$_POST[ram]."', '".$_POST[mb]."', '".$_POST[drive]."', '".$_POST[psu]."')");
$stmt->execute();
}
}
$conn->close();
Повторяю вопрос: Почему while извращает команду?