Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.06.2018, 07:10   #1
spoon100500
Форумчанин
 
Аватар для spoon100500
 
Регистрация: 14.10.2016
Сообщений: 406
По умолчанию Передать данные формы с одной страницы на другую

Всю голову сломал) не получается передать данные формы с помощью ajax.
index.php
Код HTML:
<html lang="ru">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>Тест</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
	<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
	<script type="text/javascript">
$(document).ready(function(){
    $('form').submit(function() { 
     var form_data = $(this).serialize();
            $.ajax({
            type: "POST", 
            url: "a.php",
            success: function() {alert(form_data);} 
            });
    });
});    
</script>
</head>
<body>
<div>
<form>
<input type="radio" id="radio1"   name="pro[]" value="да"/> &nbsp;<label for="vide_a" name="vide_a"> Radio 1</label><br>
<input type="radio" id="radio2"   name="pro[]" value="нет" /> &nbsp;<label  for="vide_b" name="vide_b"> Radio 2</label><br>
<input type="radio" id="radio3"   name="pro[]" value="тот"/> &nbsp;<label  for="vide_c" name="vide_c"> Radio 3</label><br>
<input id="svet_a" name="a[]" type="checkbox" value="но">
<button type="submit">Отправить заявку</button>
<a href='a.php'>Отправить заявку</a>
</form>
</div>
</body>
</html>
файл a.php
PHP код:
<?php
    $adapt 
'';
if (empty(
$_POST["pro"]))
{
$adapt "Пусто";}
elseif (!empty(
$_POST["pro"]) && is_array($_POST["pro"]))
{
$adapt implode(" "$_POST["pro"]);}

$seo '';
if (empty(
$_POST["a"]))
{
$seo "Пусто";}
elseif (!empty(
$_POST["a"]) && is_array($_POST["a"]))
{
$seo implode(" "$_POST["a"]);}
?>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
    <p><?php echo $adapt?></p>
    <p><?php echo $seo?></p>
    <p><?php print_r($_POST); ?></p>
</body>
</html>
Проверка alert(form_data); выводит вот такую штуку
Код:
pro=%D0%B4%D0%B0&a=%D0%BD%D0%BE
Простым post запросом работает всё хорошо
Код HTML:
<head>
</head>
<body>
<form action="a.php" method="POST" >
<input type="radio" id="radio1"   name="pro[]" value="да"/> &nbsp;<label for="vide_a" name="vide_a"> Radio 1</label><br>
<input type="radio" id="radio2"   name="pro[]" value="нет" /> &nbsp;<label  for="vide_b" name="vide_b"> Radio 2</label><br>
<input type="radio" id="radio3"   name="pro[]" value="тот"/> &nbsp;<label  for="vide_c" name="vide_c"> Radio 3</label><br>
<input id="svet_a" name="a[]" type="checkbox" value="но">
<button type="submit">Отправить заявку</button>
<a href='a.php'>Отправить заявку</a>
</form>
</body>
Еду медленно, но верно!

Последний раз редактировалось spoon100500; 14.06.2018 в 09:23.
spoon100500 вне форума Ответить с цитированием
Старый 14.06.2018, 14:58   #2
spoon100500
Форумчанин
 
Аватар для spoon100500
 
Регистрация: 14.10.2016
Сообщений: 406
По умолчанию

Переделал, получил данные в виде json.
index.php
Код HTML:
<html lang="ru">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>Тест</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
	<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
	<script type="text/javascript">
$(document).ready(function(){
    $('form').on('submit', function(e){
    e.preventDefault();
    var $that = $(this),
	fData = $that.serialize(); // сериализируем данные
        // ИЛИ
        // fData = $that.serializeArray();
    $.ajax({
      url: $that.attr('action'), // путь к обработчику берем из атрибута action
      type: $that.attr('method'), // метод передачи - берем из атрибута method
      data: {form_data: fData},
      dataType: 'json',
      success: function(json){
        // В случае успешного завершения запроса...
        if(json){
          $('#f').replaceWith(json); // заменим форму данными, полученными в ответе.
        }
      }
    });
  });
});    
</script>
</head>
<body>
<div>
<form action="a.php" method="post">
<input type="radio" id="radio1"   name="pro" value="да"/> &nbsp;<label for="vide_a" name="vide_a"> Radio 1</label><br>
<input type="radio" id="radio2"   name="pro" value="нет" /> &nbsp;<label  for="vide_b" name="vide_b"> Radio 2</label><br>
<input type="radio" id="radio3"   name="pro" value="тот"/> &nbsp;<label  for="vide_c" name="vide_c"> Radio 3</label><br>
<input id="svet_a" name="a" type="checkbox" value="но">
<button type="submit">Отправить заявку</button>
<a href='a.php'>Отправить заявку</a><br>
<p id="f"></P>
</form>
</div>
</body>
</html>
Обработчик a.php
PHP код:
<?php
if(isset($_POST['form_data'])){
  
$req false// изначально переменная для "ответа" - false
  
parse_str($_POST['form_data'], $form_data); // разбираем строку запроса
  // Приведём полученную информацию в удобочитаемый вид
  
ob_start();
  echo 
'До обработки: ' $_POST['form_data'];
  echo 
'После обработки:';
  echo 
'<pre>';
  
print_r($form_data);
  echo 
'</pre>';
  
$req ob_get_contents();
  
ob_end_clean();
  echo 
json_encode($req); // вернем полученное в ответе
  
exit;
}
?>
Теперь вопрос, как сохранить данные json?
Еду медленно, но верно!
spoon100500 вне форума Ответить с цитированием
Старый 14.06.2018, 16:00   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от spoon100500 Посмотреть сообщение
Теперь вопрос, как сохранить данные json?
у меня встречный вопрос - куда Вы хотите сохранить данные?

кстати, рекомендую заменить
Цитата:
Сообщение от spoon100500 Посмотреть сообщение
Код:
if(json){
          $('#f').replaceWith(json); // заменим форму данными, полученными в ответе.
        }
на
Код:
        // В случае успешного завершения запроса...
        if(json){
          $('#f').html(json); // заменим форму данными, полученными в ответе.
        }
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.06.2018, 16:18   #4
spoon100500
Форумчанин
 
Аватар для spoon100500
 
Регистрация: 14.10.2016
Сообщений: 406
По умолчанию

Сохранить например в файле a.php, он же обработчик, если такое логично.
Еду медленно, но верно!
spoon100500 вне форума Ответить с цитированием
Старый 14.06.2018, 16:19   #5
spoon100500
Форумчанин
 
Аватар для spoon100500
 
Регистрация: 14.10.2016
Сообщений: 406
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
$('#f').html(json);
так лучше, реально, спасибо
Еду медленно, но верно!
spoon100500 вне форума Ответить с цитированием
Старый 14.06.2018, 16:21   #6
spoon100500
Форумчанин
 
Аватар для spoon100500
 
Регистрация: 14.10.2016
Сообщений: 406
По умолчанию

Может вообще json не нужен, я уже не знаю))), запутался), каким методом лучше сохранять данные формы на другой странице без перезагрузки, типа, что то корзины.
Еду медленно, но верно!
spoon100500 вне форума Ответить с цитированием
Старый 14.06.2018, 16:56   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от spoon100500 Посмотреть сообщение
каким методом лучше сохранять данные формы на другой странице без перезагрузки, типа, что то корзины.
я никогда не делал интернет-магазин (и корзину с товарами), но, очевидно,
что выбранные элементы нужно где-то хранить.
Лучше всего их хранить в БД. Пользователь авторизовался. Что-то выбрал, нажал "купить" - товар помещается в таблицу покупок.
При открытии любой страницы идёт обращение к БД, оттуда читается количество товаров (сумма, список и т.п.) и выводится на страницу.
Преимущество такого подхода - если Вы поместите товар в корзину на одном компьютере. Потом выключите его. включите другой компьютер (дома, например), залогинитесь, то там будет корзина с вашими товарами.

иногда такие глобальные вещи не нужны.
и нужно передавать данные из одной страницы в другую в рамках одного компьютера/одного сеанса работы.

для этого есть много способов.
можно передавать данные через URL, можно использовать сохранение информации в сессии или локальном хранилище (localstorage).
про сессии можно почитать тут
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.06.2018, 17:05   #8
spoon100500
Форумчанин
 
Аватар для spoon100500
 
Регистрация: 14.10.2016
Сообщений: 406
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
можно передавать данные через URL
Это простой метод post он работает но с переходом на страницу где сохранил данные т.е. перезагружает.

Можно пример передачи данных формы в переменную сессии или в сессию из json?
Еду медленно, но верно!
spoon100500 вне форума Ответить с цитированием
Старый 14.06.2018, 19:33   #9
Stanislav
Квадрокоптерист
Участник клуба Подтвердите свой е-майл
 
Регистрация: 29.09.2007
Сообщений: 1,824
По умолчанию

spoon100500 ты не обижайся конечно, видно что ты учишься и все такое, но голову включать то нужно все равно! естественно данные корзины нужно хранить в таблице. даже если это не юзер, по IP (хотя бывают предприятия и у них один внешний IP но думаю тебе еще рано думать об этом) + отметка времени и каждый раз проверять timestamp если записи устарели (скажем интервал 30 минут) удаляем их.

Цитата:
Проверка alert(form_data); выводит вот такую штуку
Код:
а чего прости ты ожидал то? знаешь почему то происходит загуглил посмотрел а что и как функция работает ну его н... да?

погуглить за тебя? https://api.jquery.com/serialize/


Код:
    $adapt = '';
if (empty($_POST["pro"]))
{$adapt = "Пусто";}
elseif (!empty($_POST["pro"]) && is_array($_POST["pro"]))
{$adapt = implode(" ", $_POST["pro"]);}
проимплоидить и проверить на is_array не проще?


Код:
$mass = implode(" ", $_POST["pro"]);
if(is_array($mass)) можно условие на count добавить
{
// делай что хочешь 

}
Я часть той силы, что вечно хочет зла, но вечно совершает благо..
Stanislav вне форума Ответить с цитированием
Старый 14.06.2018, 19:49   #10
spoon100500
Форумчанин
 
Аватар для spoon100500
 
Регистрация: 14.10.2016
Сообщений: 406
По умолчанию

json разобрался.
Речь не про корзину, мне до корзины далеко, речь про передачи данные формы на другую страницу, но без перезагрузки т.е. человек натыкался чеков и радио нажал кнопку сохранить, эти данные сохранились на странице , например cart.php, на которую клиент переходит при нажатии кнопки "Посмотреть карту", ну а тут уже, если его все устроило, нажимает Сохранить и данные отправляются на почту и сохраняются в базу.
Еду медленно, но верно!
spoon100500 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передать результат с одной страницы на другую Вероника99 PHP 16 03.05.2016 00:03
Данные из одной формы в другую Thez Microsoft Office Excel 7 08.04.2015 19:48
Как в VB передать данные с одной формы в другую Vceznayka Microsoft Office Excel 1 26.12.2011 17:13
Как правильно передать несколько разнородных данных из одной формы в другую? tumanovalex C# (си шарп) 2 21.05.2011 10:05
C#: Передать значение переменной из одной формы в другую Veiron Общие вопросы .NET 3 29.06.2009 17:43