Всем привет, я всегда разбираюсь во всем сам, но тут я в тупике и не могу найти решение. Передо мной стоит задача: нужно записать данные из формы в базу и после этого перейти по 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", данные пишутся в базу, но естественно не передаются в обработчик на сайте. Как мне передать данные в обработчик сайта, но при этом успеть записать их в базу? Заранее спасибо за ответы.
Опиши, что технически происходит, когда ты убираешь action="https://website.com" ? есть такая штука как перенаправление (редирект) header()
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; header('Location: https://website.com'); }
Когда убираю action="https://website.com" данные пишутся в базу. Больше ничего не происходит и не может происходить, т.к. никаких команд кроме этого нет. Редирект почему-то не работает... Может из-за того, что нажатие на кнопку "отлавливается" через POST? Но редирект вряд ли поможет, ведь это просто переход на страницу, а на страницу нужно передавать данные из формы
@luxman, у тебя нет базовых знаний, отсюда и растут ноги твоих проблем. Нет абсолютно никакого желания тратить на тебя время. Начни читать книги, возможно что-то измениться в данной ситуации, без этого ты просто даже не понимаешь, что тебе говорят, а разжёвывать базовые понятия сомнительное удовольствие. Тем более, что это описано в любой книге по РНР.
Это естественно, потому что ты даже понятия не имеешь, что нужно искать. Во первых в редиректе никто не запрещает передать ГЕТ параметры. Если нужны именно ПОСТ данные, это тоже решаемо. А когда ты убираешь экшн из формы, то форма передаёт данные в тот скрипт в котором она написана (именно такой должен был быть твой ответ)
В этом скрипте только прописан внос данных в базу и все. Поэтому я и написал, что ничего больше не происходит, кроме этого. Редирект не работает даже без параметров. Есть идеи почему?
Включи отображение ошибок (это первое что надо сделать на этапе отладки) скорее всего заголовки уже отправлены (скрипт должен быть в кодировке UTF-8 без BOM)
CURL. Или у себя еще на клиенте начинаешь сохранять (AJAX), не запрещая обычную отправку, чтобы данные также ушли на сторонний сайт. --- Добавлено --- Если нет др. ошибок редирект должен работать, но ты прав в том, что тебе это не поможет, потому что браузеры будут его делать методом GET (все тело с данными «отвалится»).
Изначально так и хотел сделать - сохранять на клиенте и через ajax передавать на сервер, но столкнулся с тем, что это работает только, если тип кнопки input type="button", как только ставлю input type="submit", что нужно для отправки на сторонний сайт, передача через ajax перестает работать. Вернее php не успевает обработать команды, т.к. после сабмита скрипт прекращает работу. В этом и проблема. Есть какой-то способ внести данные в базу после нажатия на сабмит, но ДО ТОГО, как произойдет отправка на сторонний сайт? cURL не подойдет потому, что сторонний сайт требует отправку через форму. Редирект через js работает, но пока не вижу, как мне это может помочь...
@luxman, скажите честно, вы бы долго смогли ходить по улице голым с трусами на голове? И если с первого поста трусы были у вас в руках, то последним постом вы их натянули себе на голову. Пытаюсь объяснить как выглядят ваши рассуждения со стороны. Если нет желания, что-то изучать и получать новую информацию (что само по себе мягко говоря удивительно), просто наймите студента-программиста он вам сделает #занедорого.
Если не можете (или не хотите) ничем помочь, то зачем вообще что-то отвечать? Есть определенный тип людей, которые набивают себе цену, выставляя других дураками, видимо, это про Вас. Если по делу нечего написать, просто забудьте эту тему и все. Да, и если Вы такой крутой программист, каким пытаетесь себя показать, то Вам бы ничего не стоило предложить решение поставленной задачи и не было бы необходимости писать про трусы и подобные вещи.
@luxman, https://php.ru/ http://phpforum.su http://softtime.ru/forum/ На софттайме я с 2007-го года, на остальных чуть меньше. Кому как и когда я помогаю вы бы смогли увидеть, если бы заглядывали не только в свою тему. Вы на форуме всего один день и уже отнесли меня к "определённому типу людей". Решение я уже предложил и даже не одно и даже объяснил причину по которой вы не в состоянии понять о чём идёт речь. P.S. Нравиться ходить по форумам с "трусами на голове", это ваше право. Обещаю в дальнейшем проходить мимо ваших тем.
Да. Хоть механизм и называется AJAX, он позволяет отправлять данные себе синхронно --- Добавлено --- А вообще все это бред. Потому что так не должно быть: А если вы пытаетесь сотворить что-то нештатное, то должны мучиться
И какое же решение Вы предложили, которое я не в состоянии понять? Читать книги? Да, я не в состоянии понять, зачем отправлять человека в библиотеку, если у него есть конкретный вопрос. Форумы существуют для того, чтобы помогать другим людям, а не высмеивать их за то, что они чего-то не знают. Я не считаю, что задавать вопросы(пусть они даже кажутся Вам глупыми) на форуме равнозначно хождению с "трусами на голове". Вот Вам не мешало бы подучить русский язык, но я же не отправляю Вас в школу.
Ну да, есть такое Я нашел одно решение, оно состоит в том, чтобы отказаться от использования передачи данных на сторонний сайт из формы через action и сформировать ссылку со всеми параметрами, после чего сделать редирект по этой ссылке с помощью js. Но тогда в строке отображаются все передаваемые параметры, пусть и в зашифрованном виде. Может быть, есть более элегантное решение?
PHP: $url = 'http://localhost/post.php'; $params = array( 'param1' => '123', // в http://localhost/post.php это будет $_POST['param1'] == '123' 'param2' => 'abc', // в http://localhost/post.php это будет $_POST['param2'] == 'abc' ); $result = file_get_contents($url, false, stream_context_create(array( 'http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => http_build_query($params) ) ))); echo $result; альтернатива CURL который гораздо мощнее и позволяет не то, что форму подделать, а чёрта лысого отправить на сайт в красивой упаковке