В двух словах на «page1.php» у меня есть калькулятор, который состоит из HTML-формы, а затем код PHP суммирует ввод и отображает общую цену. Ниже цены также отображается ссылка на «page2.php», которая содержит форму HTML, в которой они могут вводить свои контактные данные. После отправки формы, которые они сделали на странице «page1.php» в калькуляторе цен, а также информация о контакте на странице «page2.php» отправляются мне по электронной почте, и они перенаправляются на домашнюю страницу.
В электронном письме, которое мне представляется, я получаю контактную информацию с «page2.php», но я ничего не получаю от «page1.php», поэтому переменные не получают правильного представления. В дополнение к PHP на каждой странице я использую скрытые значения в HTML-форме на странице «page2.php», чтобы повторить данные, введенные в HTML-форме на странице «page1.php». Я знаю, что одна из моих проблем заключается в том, что у меня есть пара полей $_GET
когда моя форма «post».
Однако, когда я меняю его так, что все $_POST
, калькулятор больше не работает. Я попытался привести это в целом с различными фрагментами кода, предложенными другими. Форма на странице «page1.php» имеет 13 полей, названных «один» – «тринадцать». $ total отображает значения 1-13.
<?php $submit = $_GET['submit']; if($submit == "true") { $total = ($_POST['one'] + $_POST['two'] + $_POST['three'] + $_POST['four'] + $_POST['five'] + $_POST['six'] + $_POST['seven'] + $_POST['eight']+ $_POST['nine'] + $_POST['ten']+ $_POST['eleven'] + $_POST['twelve']+ $_POST['thirteen']); echo " Your Price is \$ " .number_format ($total, 2, '.', ','). "<BR>"; echo ('">Get Your Project Started</a>'); } ?>
Вторая форма использует скрытые значения для эха информации из page1.php и имеет еще три поля с именем «имя», «электронная почта» и «подробности».
<?php $to = "jessica@designs.com"; $message = "Pages:\t$_POST[one]\n"; $message .= "Pages:\t$_POST[two]\n"; $message .= "Pages:\t$_POST[three]\n"; $message .= "Ecommerce:\t$_POST[four]\n"; $message .= "No Ecommerce:\t$_POST[five]\n"; $message .= "CMS:\t$_POST[six]\n"; $message .= "No CMS:\t$_POST[seven]\n"; $message .= "Audio or Video:\t$_POST[eight]\n"; $message .= "Flash Intro:\t$_POST[nine]\n"; $message .= "Image Gallery:\t$_POST[ten]\n"; $message .= "Graphic Design or Logo:\t$_POST[eleven]\n"; $message .= "Copy:\t$_POST[twelve]\n"; $message .= "Images:\t$_POST[thirteen]\n"; $message .= "Price Total:\t$_POST[total]\n"; $message .= "Name:\t$_POST[name]\n"; $message .= "Email:\t$_POST[email]\n"; $message .= "\n"; $message .= "\n"; $message .= "Details:\t$_POST[details]\n"; mail($to, $subject, $message, $headers) ; } ?>
Итак, каков был бы правильный PHP для «page1.php» и «page2.php»? Извините, код такой беспорядок, если кто-то может указать мне в правильном направлении, это было бы здорово.
PHP является апатридом, если вы не сохраните вещи в сеансе (что небезопасно?)
Вам нужно будет сделать page2.php читать все значения из page1.php и хранить их либо в состоянии (сеансе) на стороне сервера, либо в состоянии клиента (файлы cookie или, возможно, скрытые поля в форме)
Если вы хотите любой из этих безопасных или секретных, то вы должны также рассмотреть все это. Ничто из того, что я объяснял, не секретно и не защищено.
EDIT: вот пример page1.php, который отправляет значения page1.php на page2.php в качестве параметров get. Вы можете сделать это со скрытыми полями, куки или сеансами.
Важно помнить, что page2.php полностью не знает о page1.php и не может получить значения, как вы могли бы его программировать. Каждая страница начинается и заканчивается ее жизнью, когда вы видите полную веб-страницу, поэтому вам нужно использовать некоторые дополнительные трюки для сохранения значений. Эти трюки – это сеансы, файлы cookie, сообщения в форме или их получение.
<html> <head> <title>Page 1</title> </head> <body> <?php //set defaults assuming the worst $total = 0; $one =0; $two=0; //verify we have that value in $__POST if (isset($_POST['submit'])) { $submit = $_POST['submit']; //If it is true, try some math if($submit == "sub-total") { if (isset($_POST['one'])) { $one = $_POST['one']; //Add checks to see if your values are numbers if ( ! is_numeric($one)) { $one = 0;} } if (isset($_POST['two'])) { $two = $_POST['two']; if ( ! is_numeric($two)) { $two = 0;} } $total = $one + $two; echo " Your Price is \$ " .number_format ($total, 2, '.', ','). "<BR>"; } if($submit == "submit" ) { //go to page two, with the total from page1.php passed as a $__GET value header("Location: page2.php?total=".$total); } } ?> <form method="post" action="page1.php?submit=true"> <input type="text" name="one" id="one" value="<?=$one?>"/> <input type="text" name="two" id="two" value="<?=$two?>"/> <input type="submit" name="submit" value="sub-total" /> <input type="submit" name="submit" value="submit" /> </form> </body> </html>
Вы можете попробовать использовать $_REQUEST
вместо $_GET
или $_POST
– он работает для обоих. Кроме того, если вы поместите <input type='hidden'
в форму на стр. 2 с вашими переменными, отправленными со страницы 1, они должны пройти прямо.
ваши страницы php не имеют состояния, поэтому вам нужно получить опубликованные переменные и отправить их через скрытые поля ввода.
<input type="hidden".....
Вы также можете использовать сеансы, но немного грубо использовать их с формами, если вы спросите меня.
Это зависит от атрибута method
вашей HTML- form
как переменные передаются в ваш PHP-скрипт.
В этом случае похоже, что page1.php
не имеет никакого побочного эффекта и просто передает значения, поэтому форма на page1.php
должна использовать method=get
, а код page2.php
который читает эти поля, может найти их в $_GET
.
Кнопка Submit на page2.php
(предположительно) имеет побочные эффекты на стороне сервера, поэтому она должна использовать method=post
, который вы можете прочитать с $_POST
на стороне сервера.
Кроме того, посмотрите на источник HTML page2.php
после заполнения первой страницы, чтобы проверить, правильно ли переданы значения.
немного поздно в ответ, да, лучший способ – использовать type=hidden
как уже упоминали другие.
page1 отправляет _POST на страницу2, который «сохраняет» все это в скрытых полях, поэтому он может отправлять все вместе на финальную (или другую) страницу.
но что более важно, и, перейдя к более широкой теме, рассматривает вопрос о том, зачем использовать страницы для разделения формы!
извините за то, что касается этой темы здесь, мне просто хотелось дать 2 цента.
Я бы сказал, что лучше всего избегать пейджинга, насколько это возможно, и только веские причины для этого, так это будет, если вам нужна проверка сервера и обратная совместимость с браузерами, которые не будут принимать javascript.
макет и дизайн могут быть достигнуты с использованием javascript и CSS , которые оба предназначены для этого. даже если вы сделаете так, чтобы пользователь «нажал следующий», используйте dhtml и все в 1 файле. нужна проверка сервера? ajax .
если вы не используете HTML-фреймы (что вам, вероятно, и не нужно), загрузка всей страницы – это избыточная и ненужная загрузка сервера и клиента, которая занимает больше времени при использовании и программировании (чтобы позаботиться о передаче информации о форме с одного места на другое другой).
и это далеко не лучший способ сохранить состояние того, что делается. дано, это целый сложный вопрос сам по себе, но опять же, ajax будет лучше всего здесь.