Вам не нужен этот цикл:
foreach($data as $key => $array){
$sql1 ->execute(array(':result' => $result, ':id' => $Id));
}
Он постоянно обновляет один и тот же идентификатор, поскольку $Id
не изменяется в цикле.Просто сделайте:
$sql1->execute(array(':result' => $result, ':id' => $Id));
один раз.
Вы также можете получить небольшие улучшения, выполнив:
$sql1 = $db->prepare("UPDATE teams SET result = :result WHERE id = :id ");
$sql2 = $db->prepare("UPDATE teams SET note = :note WHERE team_id = :teamid AND group_id = :group_id");
только один раз, перед любым из циклов.
Другая проблема состоит в том, что у вас есть этот цикл:
foreach($data as $key => $array){
$sql2->execute(array(':note' => $array['Note'], ':teamid' => $array['team_id'], ':group_id' => $groupId ));
}
внутри цикла for()
, но он не использует ни одну из переменных, которые изменяются каждый раз в цикле.Таким образом, он повторяет все те же запросы для каждого идентификатора в $Id_array
.
. Извлеките его из цикла.
Со всеми этими изменениями код теперь выглядит следующим образом:
$groupId = $_POST['group_id'];
$Id_array = $_POST['Id'];
$result_array = $_POST['result'];
$sql1 = $db->prepare("UPDATE teams SET result = :result WHERE id = :id ");
$sql2 = $db->prepare("UPDATE teams SET note = :note WHERE team_id = :teamid AND group_id = :group_id");
$data = array();
if(count($_POST['data']) > 0 && !empty ($_POST['data'])){
foreach($_POST['data'] as $key => $array){
$row = array();
$row['team_id'] = intval($array['team_id']);
$row['Note'] = strip_tags(trim(strval($array['Note'])));
$data[$key] = $row;
}
foreach ($Id_array as $i => $Id) {
$Id = intval($Id);
$result = strip_tags(trim(strval($result_array[$i])));
$sql1 ->execute(array(':result' => $result, ':id' => $Id));
}
foreach($data as $key => $array){
$sql2->execute(array(':note' => $array['Note'], ':teamid' => $array['team_id'], ':group_id' => $groupId ));
}
}