Я пытаюсь отправить несколько строк из формы в базу данных MySQL, используя PHP (используя Вставить несколько строк в базу данных из формы HTML, используя MySQLi и несколько других статей в качестве ссылки).
Проблема, с которой я сталкиваюсь, заключается в том, что первая строка передает нормально, но последующие строки представляют некоторые значения, которых я не ожидал.
Я пробовал несколько способов циклического перемещения по строкам (см. Закомментированные строки)чтобы решить эту проблему, но решение пока не найдено.
// $number = count($_POST["ps_id"]);
// echo $number;
$ps_id = $_POST["ps_id"];
$ds_id = $_POST["ds_id"];
$hole_id = $_POST["hole_id"];
$strokes = $_POST["strokes"];
$hole_strokes = $_POST["hole_strokes"];
$par = $_POST["hole_par"];
$pkey = $_POST["pkey"];
$c_id = $_POST["c_id"];
$this_hole = $_POST["holeno"];
$stmt = $con->prepare("INSERT INTO strokes (players_id, days_id, hole_id, strokes, points, net_strokes, par, pkey, course_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
// for ($i=0; $i<count($ds_id); $i++) {
// for ($i=0; $i<$number; $i++) {
foreach ($_POST['ps_id'] as $i => $ps_id){
$ds_id = $ds_id[$i];
$hole_id = $hole_id[$i];
$strokes = $strokes[$i];
$hole_strokes = $hole_strokes[$i];
$par = $par[$i];
$pkey = $pkey[$i];
$c_id = $c_id[$i];
// $ps_id = $ps_id[$i];
$net_strokes += ((int)$strokes-(int)$hole_strokes);
$pts += ((int)$par-(int)$net_strokes)+2;
if ($pts < 0) {
$points = 0;
} else {
$points = $pts;
}
$stmt->bind_param('iiiiiiiii', $ps_id, $ds_id, $hole_id, $strokes, $points, $net_strokes, $par, $pkey, $c_id);
// echo "ds_id: ".$ds_id." and hole_id: ".$hole_id." and strokes: ".$strokes." and points: ".$points." and net_strokes: ".$net_strokes." and pts: ".$pts." and pkey: ".$pkey." and par: ".$par." and c_id: ".$c_id." and ps_id: ".$ps_id."<br><br><br>";
$stmt->execute();
// setcookie('g_holeno', $nexthole, 3600, '/');
// header("Location: ../open/index.php?s=1");
}
// echo "Success";
$nexthole += (int)$this_hole[0]+1;
// echo "Next hole: ".$nexthole;
$stmt->close();
Значения для последующих строк корректно форматируются при отправке из формы:
ps_id[]: 1
strokes[]: 4
ds_id[]: 7
pkey[]: 5
holeno[]: 1
hole_id[]: 19
hole_par[]: 4
c_id[]: 4
hole_strokes[]: 1
ps_id[]: 2
strokes[]: 4
ds_id[]: 7
pkey[]: 5
holeno[]: 1
hole_id[]: 19
hole_par[]: 4
c_id[]: 4
hole_strokes[]: 1
ps_id[]: 3
strokes[]: 4
...
... но только для строк 2 и далееps_id (Players_id) и net_strokes правильно отправляет в БД:
id, days_id, hole_id, strokes, points, net_strokes, par, pkey, course_id, players_id
'103','7','19','4','3','3','4','5','4','1'
'104','0','9','0','2','3','0','0','0','2'
'105','0','0','0','1','3','0','0','0','3'
'106','0','0','0','0','3','0','0','0','4'
Я подозреваю, что ошибка каким-то образом связана с вычисленными переменными, но я не смог найти решение самостоятельно.