Когда отправляю данные из 1С на сайт через POST они прилетают в массив $_POST, но записываются в MYSQL только один раз, заметил такую закономерность, если я удалю строки из базы данных и снова отправлю, тогда они запишутся, в другом случае просто прилетают в массив $_POST. PHP: <?php include ("app/database/user.php"); if(isset($_POST['surname'])){ $surname = $_POST['surname']; $name = $_POST['name']; $middlename = $_POST['middlename']; $dateofbirth = $_POST['dateofbirth']; $snils = $_POST['snils']; $email = $_POST['email']; $login = $_POST['login']; $organization = $_POST['organization']; $admin = $_POST['admin']; $сounterparty = $_POST['сounterparty']; $datestart = $_POST['datestart']; $dateend = $_POST['dateend']; $completed_status = $_POST['completed_status']; $password = $_POST['password']; $demand = $_POST['dateend']; $index_registrator = $_POST['index_registrator']; $datalaboratory = $_POST['datalaboratory']; $website = $_POST['website']; $comment = $_POST['commentsite']; $numbertube = $_POST['numbertube']; tt($_POST); $existence = selectOne('basa', ['login' => $login]); if($login != $existence['login']){ insert('basa', ['login' => $login, 'password' => $password, 'name' => $name, 'middlename' => $middlename, 'surname' => $surname, 'dateofbirth' => $dateofbirth, 'snils' => $snils, 'email' => $email, 'admin' => $admin]); echo 'Данные пациента успешно записаны. '; } else{ update('basa', $existence['id'], ['login' => $login, 'password' => $password, 'name' => $name, 'middlename' => $middlename, 'surname' => $surname, 'dateofbirth' => $dateofbirth, 'snils' => $snils, 'email' => $email, 'admin' => $admin]); echo 'Данные пациента успешно записаны. '; } $id_patient = $existence['id']; $existence_analyz = selectOne('patient_tests', ['index_registrator' => $index_registrator]); //tt($existence_analyz); if($index_registrator != $existence_analyz['index_registrator']){ insert('patient_tests', ['created' => $datestart, 'demand' => $demand, 'organization' => $organization, 'сounterparty' => $сounterparty, 'completed_status' => $completed_status, 'id_patient' => $id_patient, 'index_registrator' => $index_registrator, 'datalaboratory' => $datalaboratory, 'website' => $website, 'comment' => $comment, 'numbertube' => $numbertube] ); echo 'Данные заявки успешно записаны. '; } else{ updateDemand('patient_tests', $existence_analyz['index_registrator'], ['created' => $datestart, 'demand' => $demand, 'organization' => $organization, 'сounterparty' => $сounterparty, 'completed_status' => $completed_status, 'id_patient' => $id_patient, 'index_registrator' => $index_registrator, 'datalaboratory' => $datalaboratory, 'website' => $website, 'comment' => $comment, 'numbertube' => $numbertube] ); echo 'Данные заявки успешно записаны. '; } } Вот функции которыми записываю все в БД PHP: function selectOne($table, $params = []){ global $pdo; $sql = "SELECT * FROM $table"; if(!empty($params)){ $i = 0; foreach($params as $key => $value){ if(!is_numeric($value)){ $value = "'" . $value ."'"; } if($i === 0){ $sql = $sql . " WHERE $key = $value"; }else{ $sql = $sql . " AND $key = $value"; } $i++; } } $sql = $sql . " LIMIT 1"; $query = $pdo->prepare($sql); $query->execute(); dbCheckError($query); return $query->fetch(); } // запись в базу данных function insert($table, $params){ global $pdo; $i = 0; $coll = ''; $mask = ''; foreach ($params as $key => $value){ if ($i === 0){ $coll = $coll . $key; $mask = $mask . "'" . $value . "'"; }else{ $coll = $coll . ", $key"; $mask = $mask . ", '" . "$value" . "'"; } $i++; } $sql = "INSERT INTO $table ($coll) VALUES ($mask)"; $query = $pdo->prepare($sql); $query->execute($params); dbCheckError($query); } // Обновление строки в таблице function update($table, $id, $params){ global $pdo; $i = 0; $str = ''; foreach ($params as $key => $value){ if ($i === 0){ $str = $str . $key . " = '" . $value . "'"; }else{ $str = $str . ", " . $key . " = '" . $value . "'"; } $i++; } $sql = "UPDATE $table SET $str WHERE id = $id "; $query = $pdo->prepare($sql); $query->execute($params); dbCheckError($query); } // Обновление строки заявки в таблице function updateDemand($table, $id, $params){ global $pdo; $i = 0; $str = ''; foreach ($params as $key => $value){ if ($i === 0){ $str = $str . $key . " = '" . $value . "'"; }else{ $str = $str . ", " . $key . " = '" . $value . "'"; } $i++; } $sql = "UPDATE $table SET $str WHERE index_registrator = $id "; $query = $pdo->prepare($sql); $query->execute($params); dbCheckError($query); } Помогите разобраться, почему нужно каждый раз удалять строки в mysql
че так сложно то все..... выведите $sql перед записью в БД есть ощущение что вы туда и ИД пихаете, он дублируется - потому не записывается
вот массив $_POST перед записью Ответ: <pre>Array ( [surname] => Ким [name] => Юлия [middlename] => Андреевна [dateofbirth] => 2022-09-01 [snils] => => the-vegol@yandex.ru [login] => 8745090909 [organization] => ООО "ЭС-МедЛаб" [admin] => 1 [сounterparty] => [datestart] => 09.09.2022 14:05:03 [dateend] => 09.09.2022 14:06:30 [completed_status] => 1 [password] => oRdMvj [index_registrator] => 000000066 [datalaboratory] => 09.09.2022 14:06:33 [website] => 1 [commentsite] => [numbertube] => 234230 ) </pre> ID генерируется в mysql
я просил массив, или $_POST ? я попросил итоговый SQL который у вас в переменной $sql ну и вдогонку- какова структура таблицы, нет ли там уникальный полей?
Ответ: <pre>Array ( [surname] => Сегодний [name] => Сергей [middlename] => Викторович [dateofbirth] => 2022-09-15 [snils] => => the-vegol@yandex.ru [login] => 3434343434 [organization] => ООО "ЭС-МедЛаб" [admin] => 1 [сounterparty] => [datestart] => 09.09.2022 15:39:18 [dateend] => 09.09.2022 15:40:20 [completed_status] => 1 [password] => Iy8vnz [index_registrator] => 000000067 [datalaboratory] => 09.09.2022 15:40:27 [website] => 1 [commentsite] => [numbertube] => 111111 ) Отправляю с 1С пациента с двумя заявками, он записывается, вот $sql UPDATE basa SET login = '3434343434', password = 'Iy8vnz', name = 'Сергей', middlename = 'Викторович', surname = 'Сегодний', dateofbirth = '2022-09-15', snils = '', email = 'the-vegol@yandex.ru', admin = '1' WHERE id = 171 UPDATE patient_tests SET created = '09.09.2022 15:39:18', demand = '09.09.2022 15:40:20', organization = 'ООО "ЭС-МедЛаб"', сounterparty = '', completed_status = '1', id_patient = '171', index_registrator = '000000067', datalaboratory = '09.09.2022 15:40:27', website = '1', comment = '', numbertube = '111111' WHERE index_registrator = 000000067 UPDATE basa SET login = '3434343434', password = 'Iy8vnz', name = 'Сергей', middlename = 'Викторович', surname = 'Сегодний', dateofbirth = '2022-09-15', snils = '', email = 'the-vegol@yandex.ru', admin = '1' WHERE id = 171 UPDATE patient_tests SET created = '09.09.2022 15:39:18', demand = '09.09.2022 15:40:20', organization = 'ООО "ЭС-МедЛаб"', сounterparty = '', completed_status = '1', id_patient = '171', index_registrator = '000000067', datalaboratory = '09.09.2022 15:40:27', website = '1', comment = '', numbertube = '111111' WHERE index_registrator = 000000067 --- Добавлено --- А вот этот запрос не пишется, даже функции не вызываются Ответ: <pre>Array ( [surname] => Ким [name] => Юлия [middlename] => Андреевна [dateofbirth] => 2022-09-01 [snils] => => the-vegol@yandex.ru [login] => 8745090909 [organization] => ООО "ЭС-МедЛаб" [admin] => 1 [сounterparty] => [datestart] => 09.09.2022 14:05:03 [dateend] => 09.09.2022 14:06:30 [completed_status] => 1 [password] => oRdMvj [index_registrator] => 000000066 [datalaboratory] => 09.09.2022 14:06:33 [website] => 1 [commentsite] => [numbertube] => 234230 ) </pre> --- Добавлено --- [surname] => Ким [name] => Юлия [middlename] => Андреевна Удалю все строки из БД и отправлю ее отдельно, то все записывается, что за магия?"!
Нет это сайт возвращет ответ виде post массива ( [surname] => Ким [name] => Юлия [middlename] => Андреевна [dateofbirth] => 2022-09-01 [snils] => => the-vegol@yandex.ru [login] => 8745090909 [organization] => ООО "ЭС-МедЛаб" [admin] => 1 [сounterparty] => [datestart] => 09.09.2022 14:05:03 [dateend] => 09.09.2022 14:06:30 [completed_status] => 1 [password] => oRdMvj [index_registrator] => 000000066 [datalaboratory] => 09.09.2022 14:06:33 [website] => 1 [commentsite] => [numbertube] => 234230 ) </pre>
ты задолбал если честно... одно и то же 4-й раз постишь тебя спрашивают конкретный вопросы - ты на все их - свой массив пихаешь нам... не интересно это и не нужно! структура таблицы какая тебя спрашивают? знаешь что такое структура? какие поля- какие типы, какие флаги, какие ключи... есть там уникальные? а то что сайт возвращает - это где-то у вас стоит вывод через print_r
Я ее выводил выше написал UPDATE basa SET login = '3434343434', password = 'Iy8vnz', name = 'Сергей', middlename = 'Викторович', surname = 'Сегодний', dateofbirth = '2022-09-15', snils = '', email = 'the-vegol@yandex.ru', admin = '1' WHERE id = 171 UPDATE patient_tests SET created = '09.09.2022 15:39:18', demand = '09.09.2022 15:40:20', organization = 'ООО "ЭС-МедЛаб"', сounterparty = '', completed_status = '1', id_patient = '171', index_registrator = '000000067', datalaboratory = '09.09.2022 15:40:27', website = '1', comment = '', numbertube = '111111' WHERE index_registrator = 000000067 UPDATE basa SET login = '3434343434', password = 'Iy8vnz', name = 'Сергей', middlename = 'Викторович', surname = 'Сегодний', dateofbirth = '2022-09-15', snils = '', email = 'the-vegol@yandex.ru', admin = '1' WHERE id = 171 UPDATE patient_tests SET created = '09.09.2022 15:39:18', demand = '09.09.2022 15:40:20', organization = 'ООО "ЭС-МедЛаб"', сounterparty = '', completed_status = '1', id_patient = '171', index_registrator = '000000067', datalaboratory = '09.09.2022 15:40:27', website = '1', comment = '', numbertube = '111111' WHERE index_registrator = 000000067
При update строки не добавляются, а обновляются... Чего вы хотите то? --- Добавлено --- Index_registrstor строка, значение в кавычках должно быть, ну и пароль в открытом виде хранить не кошерно
Кому интересно, решил проблему тем что в mysql убрал индекс для email, так как многие email повторялись, строки не записывались.