За последние 24 часа нас посетили 20623 программиста и 1113 роботов. Сейчас ищут 410 программистов ...

Запись в данных из формы в базу

Тема в разделе "PHP и базы данных", создана пользователем luxman, 30 окт 2019.

  1. luxman

    luxman Новичок

    С нами с:
    30 окт 2019
    Сообщения:
    10
    Симпатии:
    0
    Всем привет, я всегда разбираюсь во всем сам, но тут я в тупике и не могу найти решение.

    Передо мной стоит задача: нужно записать данные из формы в базу и после этого перейти по url отправив эти данные в обработчик на сайте. Вот мой код:

    <? php
    if ($_POST['submit_btn']) {
    $dbh = new PDO('mysql:host=localhost:xxxx;dbname=db_name', 'user_name', 'password');
    $dbh->exec("set names utf8");
    $sql = "INSERT INTO orders (order_name,price,date,time,user_id) VALUES ('x','x','x','x','x')";
    $sth = $dbh->query($sql);
    $sth = null;
    $dbh = null;
    }
    ?>

    <form name="payment_form" method="post" action="https://website.com">
    <input type="hidden" name="input1" value="<?=$x?>">
    <input type="hidden" name="input2" value="<?=$y?>">
    <input type="hidden" name="input3" value="<?=$z?>">
    <input type="submit" name="submit_btn">
    </form>

    Проблема заключается в том, что, если в форме присутствует действие action="https://website.com", то все работает, как нужно, НО данные не пишутся в базу, из-за того, что сначала выполняется переход на сайт.

    Когда я убираю action="https://website.com", данные пишутся в базу, но естественно не передаются в обработчик на сайте.

    Как мне передать данные в обработчик сайта, но при этом успеть записать их в базу?

    Заранее спасибо за ответы.
     
  2. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Опиши, что технически происходит, когда ты убираешь action="https://website.com" ?
    есть такая штука как перенаправление (редирект) header()
     
  3. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    PHP:
    1. if ($_POST['submit_btn']) {
    2.  $dbh = new PDO('mysql:host=localhost:xxxx;dbname=db_name', 'user_name', 'password');
    3.  $dbh->exec("set names utf8");
    4.  $sql = "INSERT INTO orders (order_name,price,date,time,user_id) VALUES ('x','x','x','x','x')";
    5.  $sth = $dbh->query($sql);
    6.  $sth = null;
    7.  $dbh = null;
    8.  header('Location: https://website.com');
    9. }
     
  4. luxman

    luxman Новичок

    С нами с:
    30 окт 2019
    Сообщения:
    10
    Симпатии:
    0
    Когда убираю action="https://website.com" данные пишутся в базу. Больше ничего не происходит и не может происходить, т.к. никаких команд кроме этого нет.

    Редирект почему-то не работает... Может из-за того, что нажатие на кнопку "отлавливается" через POST? Но редирект вряд ли поможет, ведь это просто переход на страницу, а на страницу нужно передавать данные из формы
     
  5. luxman

    luxman Новичок

    С нами с:
    30 окт 2019
    Сообщения:
    10
    Симпатии:
    0
    Не работает, в базу пишет, но никуда не переходит
     
  6. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @luxman, у тебя нет базовых знаний, отсюда и растут ноги твоих проблем. Нет абсолютно никакого желания тратить на тебя время. Начни читать книги, возможно что-то измениться в данной ситуации, без этого ты просто даже не понимаешь, что тебе говорят, а разжёвывать базовые понятия сомнительное удовольствие. Тем более, что это описано в любой книге по РНР.
     
    #6 Valick, 30 окт 2019
    Последнее редактирование: 30 окт 2019
  7. luxman

    luxman Новичок

    С нами с:
    30 окт 2019
    Сообщения:
    10
    Симпатии:
    0
    Я был бы благодарен хоть какому-то предложенному решению, в интернете я не нашел ничего подобного.
     
  8. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Это естественно, потому что ты даже понятия не имеешь, что нужно искать.
    Во первых в редиректе никто не запрещает передать ГЕТ параметры. Если нужны именно ПОСТ данные, это тоже решаемо. А когда ты убираешь экшн из формы, то форма передаёт данные в тот скрипт в котором она написана (именно такой должен был быть твой ответ)
     
  9. luxman

    luxman Новичок

    С нами с:
    30 окт 2019
    Сообщения:
    10
    Симпатии:
    0
    В этом скрипте только прописан внос данных в базу и все. Поэтому я и написал, что ничего больше не происходит, кроме этого.

    Редирект не работает даже без параметров. Есть идеи почему?
     
  10. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Включи отображение ошибок (это первое что надо сделать на этапе отладки) скорее всего заголовки уже отправлены (скрипт должен быть в кодировке UTF-8 без BOM)
     
  11. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.787
    Симпатии:
    646
    CURL. Или у себя еще на клиенте начинаешь сохранять (AJAX), не запрещая обычную отправку, чтобы данные также ушли на сторонний сайт.
    --- Добавлено ---
    Если нет др. ошибок редирект должен работать, но ты прав в том, что тебе это не поможет, потому что браузеры будут его делать методом GET (все тело с данными «отвалится»).
     
  12. luxman

    luxman Новичок

    С нами с:
    30 окт 2019
    Сообщения:
    10
    Симпатии:
    0
    Изначально так и хотел сделать - сохранять на клиенте и через ajax передавать на сервер, но столкнулся с тем, что это работает только, если тип кнопки input type="button", как только ставлю input type="submit", что нужно для отправки на сторонний сайт, передача через ajax перестает работать. Вернее php не успевает обработать команды, т.к. после сабмита скрипт прекращает работу. В этом и проблема.

    Есть какой-то способ внести данные в базу после нажатия на сабмит, но ДО ТОГО, как произойдет отправка на сторонний сайт?

    cURL не подойдет потому, что сторонний сайт требует отправку через форму.
    Редирект через js работает, но пока не вижу, как мне это может помочь...
     
  13. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @luxman, скажите честно, вы бы долго смогли ходить по улице голым с трусами на голове?
    И если с первого поста трусы были у вас в руках, то последним постом вы их натянули себе на голову.
    Пытаюсь объяснить как выглядят ваши рассуждения со стороны.
    Если нет желания, что-то изучать и получать новую информацию (что само по себе мягко говоря удивительно), просто наймите студента-программиста он вам сделает #занедорого.
     
  14. luxman

    luxman Новичок

    С нами с:
    30 окт 2019
    Сообщения:
    10
    Симпатии:
    0
    Если не можете (или не хотите) ничем помочь, то зачем вообще что-то отвечать? Есть определенный тип людей, которые набивают себе цену, выставляя других дураками, видимо, это про Вас. Если по делу нечего написать, просто забудьте эту тему и все.

    Да, и если Вы такой крутой программист, каким пытаетесь себя показать, то Вам бы ничего не стоило предложить решение поставленной задачи и не было бы необходимости писать про трусы и подобные вещи.
     
  15. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @luxman, https://php.ru/ http://phpforum.su http://softtime.ru/forum/
    На софттайме я с 2007-го года, на остальных чуть меньше. Кому как и когда я помогаю вы бы смогли увидеть, если бы заглядывали не только в свою тему. Вы на форуме всего один день и уже отнесли меня к "определённому типу людей".
    Решение я уже предложил и даже не одно и даже объяснил причину по которой вы не в состоянии понять о чём идёт речь.

    P.S. Нравиться ходить по форумам с "трусами на голове", это ваше право. Обещаю в дальнейшем проходить мимо ваших тем.
     
  16. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.787
    Симпатии:
    646
    Да. Хоть механизм и называется AJAX, он позволяет отправлять данные себе синхронно ;)
    --- Добавлено ---
    А вообще все это бред. Потому что так не должно быть:
    А если вы пытаетесь сотворить что-то нештатное, то должны мучиться :)
     
  17. luxman

    luxman Новичок

    С нами с:
    30 окт 2019
    Сообщения:
    10
    Симпатии:
    0
    И какое же решение Вы предложили, которое я не в состоянии понять? Читать книги? Да, я не в состоянии понять, зачем отправлять человека в библиотеку, если у него есть конкретный вопрос.

    Форумы существуют для того, чтобы помогать другим людям, а не высмеивать их за то, что они чего-то не знают.
    Я не считаю, что задавать вопросы(пусть они даже кажутся Вам глупыми) на форуме равнозначно хождению с "трусами на голове".

    Вот Вам не мешало бы подучить русский язык, но я же не отправляю Вас в школу.
     
    #17 luxman, 31 окт 2019
    Последнее редактирование: 31 окт 2019
  18. luxman

    luxman Новичок

    С нами с:
    30 окт 2019
    Сообщения:
    10
    Симпатии:
    0
    Ну да, есть такое :)

    Я нашел одно решение, оно состоит в том, чтобы отказаться от использования передачи данных на сторонний сайт из формы через action и сформировать ссылку со всеми параметрами, после чего сделать редирект по этой ссылке с помощью js.

    Но тогда в строке отображаются все передаваемые параметры, пусть и в зашифрованном виде. Может быть, есть более элегантное решение?
     
  19. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    PHP:
    1. $url = 'http://localhost/post.php';
    2. $params = array(
    3.     'param1' => '123', // в http://localhost/post.php это будет $_POST['param1'] == '123'
    4.     'param2' => 'abc', // в http://localhost/post.php это будет $_POST['param2'] == 'abc'
    5. );
    6.     'http' => array(
    7.         'method'  => 'POST',
    8.         'header'  => 'Content-type: application/x-www-form-urlencoded',
    9.         'content' => http_build_query($params)
    10.     )
    11. )));
    12.  
    13. echo $result;
    альтернатива CURL который гораздо мощнее и позволяет не то, что форму подделать, а чёрта лысого отправить на сайт в красивой упаковке
     
    #19 Valick, 31 окт 2019
    Последнее редактирование: 31 окт 2019
  20. luxman

    luxman Новичок

    С нами с:
    30 окт 2019
    Сообщения:
    10
    Симпатии:
    0
    Спасибо