За последние 24 часа нас посетил 18891 программист и 1605 роботов. Сейчас ищут 1099 программистов ...

Данные при отправке через POST записываются в MYSQL только один раз

Тема в разделе "PHP для новичков", создана пользователем Яценко Артем, 9 сен 2022.

  1. Яценко Артем

    Яценко Артем Новичок

    С нами с:
    9 сен 2022
    Сообщения:
    13
    Симпатии:
    0
    Когда отправляю данные из 1С на сайт через POST они прилетают в массив $_POST, но записываются в MYSQL только один раз, заметил такую закономерность, если я удалю строки из базы данных и снова отправлю, тогда они запишутся, в другом случае просто прилетают в массив $_POST.
    PHP:
    1. <?php
    2.     include ("app/database/user.php");
    3.     if(isset($_POST['surname'])){
    4.        $surname = $_POST['surname'];
    5.        $name = $_POST['name'];
    6.        $middlename = $_POST['middlename'];
    7.        $dateofbirth = $_POST['dateofbirth'];
    8.        $snils = $_POST['snils'];
    9.        $email = $_POST['email'];
    10.        $login = $_POST['login'];
    11.        $organization = $_POST['organization'];
    12.        $admin = $_POST['admin'];
    13.        $сounterparty = $_POST['сounterparty'];
    14.        $datestart = $_POST['datestart'];
    15.        $dateend = $_POST['dateend'];
    16.        $completed_status = $_POST['completed_status'];
    17.        $password = $_POST['password'];
    18.        $demand = $_POST['dateend'];
    19.        $index_registrator = $_POST['index_registrator'];
    20.        $datalaboratory = $_POST['datalaboratory'];
    21.        $website = $_POST['website'];
    22.        $comment = $_POST['commentsite'];
    23.        $numbertube = $_POST['numbertube'];
    24.         tt($_POST);
    25.        $existence = selectOne('basa', ['login' => $login]);
    26.        if($login != $existence['login']){
    27.             insert('basa', ['login' => $login, 'password' => $password, 'name' => $name, 'middlename' => $middlename, 'surname' => $surname, 'dateofbirth' => $dateofbirth,
    28.             'snils' => $snils, 'email' => $email, 'admin' => $admin]);
    29.             echo 'Данные пациента успешно записаны. ';
    30.         }
    31.         else{
    32.             update('basa', $existence['id'], ['login' => $login, 'password' => $password, 'name' => $name, 'middlename' => $middlename, 'surname' => $surname, 'dateofbirth' => $dateofbirth,
    33.             'snils' => $snils, 'email' => $email, 'admin' => $admin]);
    34.             echo 'Данные пациента успешно записаны. ';
    35.         }
    36.         $id_patient = $existence['id'];
    37.         $existence_analyz = selectOne('patient_tests', ['index_registrator' => $index_registrator]);
    38.         //tt($existence_analyz);
    39.         if($index_registrator != $existence_analyz['index_registrator']){
    40.             insert('patient_tests', ['created' => $datestart, 'demand' => $demand, 'organization' => $organization, 'сounterparty' => $сounterparty, 'completed_status' => $completed_status, 'id_patient' => $id_patient,
    41.              'index_registrator' => $index_registrator, 'datalaboratory' => $datalaboratory, 'website' => $website, 'comment' => $comment, 'numbertube' => $numbertube] );
    42.             echo 'Данные заявки успешно записаны. ';
    43.         }
    44.         else{
    45.             updateDemand('patient_tests', $existence_analyz['index_registrator'], ['created' => $datestart, 'demand' => $demand, 'organization' => $organization, 'сounterparty' => $сounterparty, 'completed_status' => $completed_status, 'id_patient' => $id_patient,
    46.             'index_registrator' => $index_registrator, 'datalaboratory' => $datalaboratory, 'website' => $website, 'comment' => $comment, 'numbertube' => $numbertube] );
    47.             echo 'Данные заявки успешно записаны. ';
    48.         }
    49.     }
    50.  
    51.  
    52.    
    Вот функции которыми записываю все в БД

    PHP:
    1. function selectOne($table, $params = []){
    2.     global $pdo;
    3.  
    4.     $sql = "SELECT * FROM $table";
    5.     if(!empty($params)){
    6.         $i = 0;
    7.         foreach($params as $key => $value){
    8.             if(!is_numeric($value)){
    9.                 $value = "'" . $value ."'";
    10.             }
    11.             if($i === 0){
    12.                 $sql = $sql . " WHERE $key = $value";
    13.             }else{
    14.                 $sql = $sql . " AND $key = $value";
    15.             }
    16.          $i++;
    17.         }
    18.      
    19.     }
    20.     $sql = $sql . " LIMIT 1";
    21.     $query = $pdo->prepare($sql);
    22.     $query->execute();
    23.     dbCheckError($query);
    24.  
    25.  
    26.     return $query->fetch();
    27. }
    28.  
    29.  
    30.  
    31. // запись в базу данных
    32. function insert($table, $params){
    33.     global $pdo;
    34.     $i = 0;
    35.     $coll = '';
    36.     $mask = '';
    37.     foreach ($params as $key => $value){
    38.         if ($i === 0){
    39.             $coll = $coll . $key;
    40.             $mask = $mask . "'" . $value . "'";  
    41.         }else{
    42.             $coll = $coll . ", $key";
    43.             $mask = $mask . ", '" . "$value" . "'";
    44.         }
    45.         $i++;
    46.     }
    47.     $sql = "INSERT INTO $table ($coll) VALUES ($mask)";
    48.  
    49.     $query = $pdo->prepare($sql);
    50.     $query->execute($params);
    51.     dbCheckError($query);
    52.  
    53. }
    54.  
    55. // Обновление строки в таблице
    56. function update($table, $id, $params){
    57.     global $pdo;
    58.     $i = 0;
    59.     $str = '';
    60.     foreach ($params as $key => $value){
    61.         if ($i === 0){
    62.             $str = $str . $key .  " = '" . $value . "'";  
    63.         }else{
    64.             $str = $str . ", " . $key .  " = '" . $value . "'";
    65.         }
    66.         $i++;
    67.     }
    68.     $sql = "UPDATE $table SET $str WHERE id = $id ";
    69.     $query = $pdo->prepare($sql);
    70.     $query->execute($params);
    71.     dbCheckError($query);
    72.  
    73. }
    74.  
    75. // Обновление строки заявки в таблице
    76.  
    77. function updateDemand($table, $id, $params){
    78.     global $pdo;
    79.     $i = 0;
    80.     $str = '';
    81.     foreach ($params as $key => $value){
    82.         if ($i === 0){
    83.             $str = $str . $key .  " = '" . $value . "'";  
    84.         }else{
    85.             $str = $str . ", " . $key .  " = '" . $value . "'";
    86.         }
    87.         $i++;
    88.     }
    89.     $sql = "UPDATE $table SET $str WHERE index_registrator = $id ";
    90.     $query = $pdo->prepare($sql);
    91.     $query->execute($params);
    92.     dbCheckError($query);
    93.  
    94. }
    Помогите разобраться, почему нужно каждый раз удалять строки в mysql
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.854
    Симпатии:
    748
    Адрес:
    Татарстан
    че так сложно то все.....
    выведите $sql перед записью в БД
    есть ощущение что вы туда и ИД пихаете, он дублируется - потому не записывается
     
  3. Яценко Артем

    Яценко Артем Новичок

    С нами с:
    9 сен 2022
    Сообщения:
    13
    Симпатии:
    0
    вот массив $_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
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.854
    Симпатии:
    748
    Адрес:
    Татарстан
    я просил массив, или $_POST ?
    я попросил итоговый SQL который у вас в переменной $sql

    ну и вдогонку- какова структура таблицы, нет ли там уникальный полей?
     
  5. Яценко Артем

    Яценко Артем Новичок

    С нами с:
    9 сен 2022
    Сообщения:
    13
    Симпатии:
    0
    Ответ: <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] => Андреевна

    Удалю все строки из БД и отправлю ее отдельно, то все записывается, что за магия?"!
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.854
    Симпатии:
    748
    Адрес:
    Татарстан
    те три поля что указали - уникальные?
     
  7. Яценко Артем

    Яценко Артем Новичок

    С нами с:
    9 сен 2022
    Сообщения:
    13
    Симпатии:
    0
    Нет это сайт возвращет ответ виде 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>
     
  8. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.854
    Симпатии:
    748
    Адрес:
    Татарстан
    ты задолбал если честно... одно и то же 4-й раз постишь
    тебя спрашивают конкретный вопросы - ты на все их - свой массив пихаешь нам...
    не интересно это и не нужно!
    структура таблицы какая тебя спрашивают?
    знаешь что такое структура? какие поля- какие типы, какие флаги, какие ключи...
    есть там уникальные?

    а то что сайт возвращает - это где-то у вас стоит вывод через print_r
     
  9. Яценко Артем

    Яценко Артем Новичок

    С нами с:
    9 сен 2022
    Сообщения:
    13
    Симпатии:
    0
    Вот структура, две таблицы

    upload_2022-9-9_17-29-56.png
    upload_2022-9-9_17-30-25.png
     
  10. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.209
    Симпатии:
    185
    Выведи отдельно переменную $sql.
     
  11. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.209
    Симпатии:
    185
    Теперь напрямую выполни его в своём phpmyadmin и посмотри что получится.
     
  12. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.854
    Симпатии:
    748
    Адрес:
    Татарстан
    При update строки не добавляются, а обновляются... Чего вы хотите то?
    --- Добавлено ---
    Index_registrstor строка, значение в кавычках должно быть, ну и пароль в открытом виде хранить не кошерно
     
  13. Яценко Артем

    Яценко Артем Новичок

    С нами с:
    9 сен 2022
    Сообщения:
    13
    Симпатии:
    0
    Строки при update обновляются только если они уже записаны в бд
     
  14. Яценко Артем

    Яценко Артем Новичок

    С нами с:
    9 сен 2022
    Сообщения:
    13
    Симпатии:
    0
    Кому интересно, решил проблему тем что в mysql убрал индекс для email, так как многие email повторялись, строки не записывались. upload_2022-9-11_13-11-39.png
     
  15. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.209
    Симпатии:
    185
    email должен быть уникальным, переделывай.
     
  16. Яценко Артем

    Яценко Артем Новичок

    С нами с:
    9 сен 2022
    Сообщения:
    13
    Симпатии:
    0
    Да емейл уникальный, я сам затупил, когда проверял создавал пользователей с одинаковым емейлом
     
  17. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    914
    Симпатии:
    143
    Условие уникальности email разумное, но вовсе необязательное.