データベースからデータを取得してフォームに表示しています。
値を編集してから、フォームを再送信すると、対応する行に基づいてテーブルのデータが更新されますが、インデックス値4のみに基づいてテーブルが更新されます。の他のすべてのデータteamid
は、4
インデックスの配列内のデータに置き換えられています。
var_dump
フォームが送信されたときは次のとおりです(これは変更されたデータを示しているため、正しく送信されたため、ループの問題を想定しています)
array (size=12)
'teamid' => string '1' (length=1)
'activity' => string 'Mill 1' (length=6)
'activity2' => string 'Enter Details' (length=13)
'info' => string 'Auto process' (length=12)
'info2' => string 'Enter Details' (length=13)
'wsno' => string '1' (length=1)
'labour' =>
array (size=5)
0 => string 'Admin' (length=5)
1 => string 'QC Manager' (length=10)
2 => string 'Supervisor' (length=10)
3 => string 'Team Leaders' (length=12)
4 => string 'Line Operators' (length=14)
'hours' =>
array (size=5)
0 => string '1' (length=1)
1 => string '1' (length=1)
2 => string '2' (length=1)
3 => string '8' (length=1)
4 => string '8' (length=1)
'noworkers' =>
array (size=5)
0 => string '2' (length=1) << CHANGED THIS FROM 1 TO 2
1 => string '1' (length=1)
2 => string '1' (length=1)
3 => string '1' (length=1)
4 => string '3' (length=1)
'rateperhour' =>
array (size=5)
0 => string '11.00' (length=5)
1 => string '10.00' (length=5)
2 => string '9.00' (length=4)
3 => string '8.50' (length=4)
4 => string '8.00' (length=4)
'totalcost' =>
array (size=5)
0 => string '22' (length=2) << THIS IS THE NEW CALCULATED VALUE
1 => string '10.00' (length=5)
2 => string '18.00' (length=5)
3 => string '68.00' (length=5)
4 => string '192.00' (length=6)
'addteam' => string '' (length=0)
私が変更した値は最初のインデックス(0
)にありました-ワーカーなしが2であり、送信時に値が正しいため
if(!isset($_GET['team'])) {
$teamid = 1;
} else {
$teamid = $_GET['team'];
}
$teamlq = mysqli_query($dbc,"SELECT * FROM `teams` WHERE `teamid` = '$teamid'");
$teamlr = mysqli_fetch_assoc($teamlq);
$actq = mysqli_query($dbc,"SELECT * FROM `teams` GROUP BY `activity` ASC");
$act = mysqli_fetch_assoc($actq);
$infoq = mysqli_query($dbc,"SELECT * FROM `teams` GROUP BY `info` ASC");
$info = mysqli_fetch_assoc($infoq);
$wsq = mysqli_query($dbc,"SELECT * FROM `workstation_costing` GROUP BY `wsno` ASC");
$ws = mysqli_fetch_assoc($wsq);
if(isset($_POST['addteam'])) {
$labour[] = $_POST['labour'];
$hours[] = $_POST['hours'];
$noworkers[] = $_POST['noworkers'];
$rateperhour[] = $_POST['rateperhour'];
$totalcost[] = $_POST['totalcost'];
$maxrows = 5;
$i = 0;
$info = $_POST['info'];
if($_POST['info'] == 'other') {
$info = $_POST['info2'];
}
$activity = $_POST['activity'];
if($_POST['activity'] == 'other'){
$activity = $_POST['activity2'];
}
echo "<pre>";
var_dump($_POST);
echo "</pre>";
do {
$labour = $_POST['labour'][$i];
$rateperhour = $_POST['rateperhour'][$i];
$hours = $_POST['hours'][$i];
$noworkers = $_POST['noworkers'][$i];
$totalcost = $_POST['totalcost'][$i];
$insert = mysqli_query($dbc,"UPDATE `teams` SET `activity` = '$activity',`info` = '$info',`wsno` = '$_POST[wsno]',`labour` = '$labour',`rateperhour`='$rateperhour',`hrsengaged` = '$hours',`noworkers`='$noworkers',`totalcost`='$totalcost' WHERE `teamid` = '$_POST[teamid]'");
echo mysqli_error($dbc);
$i++;
}while ($i < $maxrows);
}
ループ内で次のことを行うことに注意してください。
$insert = mysqli_query($dbc,"UPDATE `teams` SET `activity` = '$activity',`info` = '$info',`wsno` = '$_POST[wsno]',`labour` = '$labour',`rateperhour`='$rateperhour',`hrsengaged` = '$hours',`noworkers`='$noworkers',`totalcost`='$totalcost' WHERE `teamid` = '$_POST[teamid]'");
ただし、更新することは決してない$_POST[teamid]
ので、各反復ですべてのフィールドを$_POST[teamid]
ループの現在のデータで更新します->テーブルに対するこの原因には、そのすべての行の最後のループ値のみが含まれteamid
ます。
これを克服するためにID
、テーブルに列を追加し、ループで行を更新するのではID
なく、行を更新することができますteamid
->これにより、反復ごとに1行が更新されます
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加