Добрый день, уже существует база данных, далее есть страница на которой отображаются все данные данной базы с формой для редактирования некоторых параметров, после чего данный массив передается на страницу обработки этих всех данных методом POST, также существует страница обработки и отправки всего массива параметром UPDATE в базу данных. На проверку о получении массива страницей обработки, проверка проходит, но в базу не записывается, как я понял требуется правильная обработка этого массива для того чтобы можно было занести массивы в переменные и применить уже в UPDATE. Пожалуйста подскажите как обработать этот массив и возможно есть видео ролики подобной задачи с решением. Файлы во вложении. Скрипт формы: table-tabel.txt Скрипт обработки: update-tabel.txt
оу щит... --- Добавлено --- убери в table все скобки [] по селектам select name="m31[]" с тебя 100 рублей. шутка
Извини, бюджета вообще нет, пытаюсь себе работу облегчить, считаю зп сотрудникам(работаю экономистом), это делаю табель учета рабочего времени, там просто много условий при табелировании, все вроде как должно работать, но проблема в том что данные массивов уходят, но уходят на страницу обработки не в полном объеме, получается в табель отображает ~150 человек (в базе на каждого человека чуть более 40 параметров), методом POST передают, а на странице принимаемой приходит только массив до 30 человек, и только по ним соответственно UpDATE осуществляется. Если в Табеле до 30 человек, то программа работает исправно. Здесь какие-то ограничения по отправке методом POST, post_max_size увеличил до 400М (по максимуму), ничего не дает, вероятно есть какое-то ограничение по числу символов. На разных форумах пытался найти аналоговую проблему, но никто про такие большие массивы не пишет. Может есть решение по увеличению кол-ва символов? Если кто поможет решить проблему, чисто от себя могу 2000рублей перевести. Извините более средствами не располагаю. Для кого-то может это быстро решаемый вопрос. Приложил скрин того что только отдает, т.е. по все коду читает, но не до конца передает массивы. --- Добавлено --- Если в name уберу [] то не будет передаваться массив, а только первые полученные данные
Если в name уберу [] то не будет передаваться массив, а только первые полученные данные, глят Не тот скрипт обработки закинул Вам, вот верный: <?php ini_set('max_execution_time',60); set_time_limit(60); $ogms = $_GET['ogm']; $data = $_POST['data']; $shifrs = $_POST['shifrs']; $months = $_POST['months']; $fioman = $_POST['fioman']; $developer = $_POST['developer']; $id = $_POST['id']; $ogms_j = $_POST['ogmj']; $m1 = $_POST['m1']; $m2 = $_POST['m2']; $m3 = $_POST['m3']; $m4 = $_POST['m4']; $m5 = $_POST['m5']; $m6 = $_POST['m6']; $m7 = $_POST['m7']; $m8 = $_POST['m8']; $m9 = $_POST['m9']; $m10 = $_POST['m10']; $m11 = $_POST['m11']; $m12 = $_POST['m12']; $m13 = $_POST['m13']; $m14 = $_POST['m14']; $m15 = $_POST['m15']; $m16 = $_POST['m16']; $m17 = $_POST['m17']; $m18 = $_POST['m18']; $m19 = $_POST['m19']; $m20 = $_POST['m20']; $m21 = $_POST['m21']; $m22 = $_POST['m22']; $m23 = $_POST['m23']; $m24 = $_POST['m24']; $m25 = $_POST['m25']; $m26 = $_POST['m26']; $m27 = $_POST['m27']; $m28 = $_POST['m28']; $m29 = $_POST['m29']; $m30 = $_POST['m30']; $m31 = $_POST['m31']; $ktu = $_POST['ktu']; require_once '../connect-tabel.php'; foreach($id as $key => $value) { mysqli_query($connect, "UPDATE `ogm` SET `shifr` = '".$shifrs[$key]."', `m1` = '".$m1[$key]."', `m2` = '".$m2[$key]."', `m3` = '".$m3[$key]."', `m4` = '".$m4[$key]."', `m5` = '".$m5[$key]."', `m6` = '".$m6[$key]."', `m7` = '".$m7[$key]."', `m8` = '".$m8[$key]."', `m9` = '".$m9[$key]."', `m10` = '".$m10[$key]."', `m11` = '".$m11[$key]."', `m12` = '".$m12[$key]."', `m13` = '".$m13[$key]."', `m14` = '".$m14[$key]."', `m15` = '".$m15[$key]."', `m16` = '".$m16[$key]."', `m17` = '".$m17[$key]."', `m18` = '".$m18[$key]."', `m19` = '".$m19[$key]."', `m20` = '".$m20[$key]."', `m21` = '".$m21[$key]."', `m22` = '".$m22[$key]."', `m23` = '".$m23[$key]."', `m24` = '".$m24[$key]."', `m25` = '".$m25[$key]."', `m26` = '".$m26[$key]."', `m27` = '".$m27[$key]."', `m28` = '".$m28[$key]."', `m29` = '".$m29[$key]."', `m30` = '".$m30[$key]."', `m31` = '".$m31[$key]."', `ktu` = '".$ktu[$key]."', `ogm_j` = '".$ogms_j[$key]."' WHERE `ogm`.`id` = '".$id[$key]."' "); } header("Location: ogm.php?month=$months&year=$data&ogm=$ogms"); ?>
PHP: <?php $default_array = array('id' => 'default value', 'name' => 'default value', 'address' => 'default value', 'zipcode' => 'default value', 'phone' => 'default value', 'email' => 'default value', 'sex' => 'default value', 'old' => 'default value' ); $new_array = array(); foreach($default_array as $key => $value) { if(isset($_POST[$key])) { $new_array[$key] = $_POST[$key]; // my_function($key, $_POST[$key]); //предобработка ввода } // else // { // $new_array[$key] = $value; // } } if(count($new_array) == count($default_array)) { $sql = sprintf("UPDATE `tablename` SET `name` = '%s', `address` = '%s', `zipcode` = '%s', `phone` = '%s', `email` = '%s', `sex` = '%s', `old` = '%s' WHERE `id` =%s;", $new_array['name'], $new_array['address'], $new_array['zipcode'], $new_array['phone'], $new_array['email'], $new_array['sex'], $new_array['old'], $new_array['id']); echo $sql; } else { echo 'something wrong<pre>'; print_r($new_array); } ?>
У тебя 30 полей для 30 человек, если нужно для 40 человек, то и полей должно быть больше. А ещё запрос на UPDATE тоже рассчитан только на 30 записей.
я просто проверяю передачу данных POST, на другую страницу, он еще до UPDATE не все данные передает, т.е. я просто закомментировал передачу данных в БД и отобразил полученные данные на странице, получается он не все данные передает
на каждого человека по разному в зависимости от заполнения, но если брать 150 человек, то в среднем 75*31 значений переменных m1-m31
Значит каждая переменная m это массив. Массив чего? Почему передается именно массив в каждой такой переменной? Это действительно необходимо, передавать столько данных за одну отправку формы?
У меня есть табель учета рабочего времени, где есть необходимость редактировать каждого человека, добавляя или убирая дни. На самом деле я просто не вижу другой возможности сохранить данные изменения, как передать на UPDATE все параметры сразу ( сохранять каждую строчку по отдельности нет возможности, так как это затруднит работу человеку который должен заполнять этот табель. Если есть возможность сохранить все изменения разом каким-то другим способом, мне бы очень сильно это помогло, так как я не могу найти нигде другую информацию как это осуществить
Поля m в базе данных имеют тип varchar и размер 11? Может быть такой длины недостаточно для сохранения всех данных?