Перейти к содержимому


Оформление заказа на одной странице


  • Вы не можете ответить в тему
Сообщений в теме: 21

#1 Pascal

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 46 сообщений
Репутация: 13
Начинающий

Отправлено 03 July 2012 - 08:07 AM

Уважаемые форумчане, кто-нибудь делал модуль "Оформление заказа на одной странице" типа такого?

И в тему этого модуля (так как сам его сейчас делаю) возникли проблемы с кодировкой. При отправке данных формы на сервер вылезают кракозябры. Кто знает как исправить эту проблему?

Вот код:
function _order_onepage_load(el){
  var s = $("#order_onepage").find("form").serialize();
  if($("#order_onepage").find("select[name=countryID]").val() == -1 ){
   alert("{/literal}{$smarty.const.ADMIN_ZONE_INIT}{literal}");
   return;
  }
  var oopurl = "";
  if ($("#order_onepage").find("input[name=order_onepage_url]").val() ){
   oopurl = $("#order_onepage").find("input[name=order_onepage_url]").val();
  }
  else oopurl = 'index.php?do=cart';
  $.ajax({
   type: "POST",
   url: oopurl,
   data: s,
   cache: false,
   success: function(result){
	//alert(result);
	document.getElementById('order_onepage').innerHTML = result;
   }
  });
}

  • 0

#2 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 03 July 2012 - 08:26 AM

Я делал и уже сделал, но нужно многое подправить и из-за ИЕ он жрет много ресурсов сервера.
На моем то работает, но не у всех хостеров тянет.
Посмотрим что у тебя получится ))
  • 0

#3 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 03 July 2012 - 09:14 AM

При отправке данных формы на сервер вылезают кракозябры

Данные формы = iconv('UTF-8','CP1251',данные формы)) :)
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#4 Pascal

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 46 сообщений
Репутация: 13
Начинающий

Отправлено 03 July 2012 - 09:45 AM

Данные формы = iconv('UTF-8','CP1251',данные формы)) :)

сделал так и не работает:
$post = $_POST;
foreach ($post as $key => $val) iconv('UTF-8','CP1251', $_POST[$key]);

  • 0

#5 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 03 July 2012 - 10:00 AM

делал так и не работает:

Было бы странно, если бы работало. В каком месте и чему у Вас присваивается сконвертированное значение?

PS. Также я подозреваю, что выполнение кода

#!/usr/bin/php
<?php
$A = array(1,1,1,1,1,1);
foreach ($A as $B) $B = 2;
foreach ($A as $B) echo $B;
?>

Вас неимоверно удивит :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#6 Pascal

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 46 сообщений
Репутация: 13
Начинающий

Отправлено 03 July 2012 - 10:11 AM

JS:

s = [];
$("#order_onepage").find("form").find("input,select").each(function(){
s.push($(this).attr("name")+'='+encodeURIComponent( $(this).val() ) );
});
var str = s.join('&');
  $.ajax({
   type: "POST",
   url: oopurl,
   data: str,
   cache: false,
   success: function(result){
	//alert(result);
	document.getElementById('order_onepage').innerHTML = result;
   }
  });

PHP:
foreach ($_POST as $key => $val) iconv('UTF-8','CP1251', $_POST[$key]);

итог не изменился
  • 0

#7 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 03 July 2012 - 10:15 AM

Повторяю вопрос: "В каком месте и чему у Вас присваивается сконвертированное значение?"
Может таки зайти на php.su и прочитать описание функции?

PS. $x=90;sin($x) не превратит $x в ноль.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#8 Pascal

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 46 сообщений
Репутация: 13
Начинающий

Отправлено 03 July 2012 - 10:29 AM

Повторяю вопрос: "В каком месте и чему у Вас присваивается сконвертированное значение?"

А не легче было написать, что надо так?
foreach ($_POST as $key => $val) $_POST[$key] = iconv('UTF-8','CP1251', $_POST[$key]);

Спасибо, теперь все работает.
  • 0

#9 Pascal

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 46 сообщений
Репутация: 13
Начинающий

Отправлено 03 July 2012 - 01:26 PM

Ну вроде как сделал для незарегистрированных юзеров! Если кому не сложно, протестируйте, пожалуйста. Сайт http://shopcms.donello.ru
Как раз таки в IE 6 только вроде как не работает
  • 0

#10 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 03 July 2012 - 01:50 PM

Гм..... да плевать собственно на ИЕ6 главное в других работает, но где выбор вариантов доставки и оплаты?
  • 0

#11 Pascal

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 46 сообщений
Репутация: 13
Начинающий

Отправлено 03 July 2012 - 02:34 PM

заполните форму и нажмите отправить
  • 0

#12 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 03 July 2012 - 03:03 PM

заполните форму и нажмите отправить


Гм )) так смысл теряется.... какая разница переход на другую страницу или подружается аяксом!?!? кол-во шагов то не меняется.
Посмотри плиз мое сообщение в ЛС.
  • 0

#13 Pascal

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 46 сообщений
Репутация: 13
Начинающий

Отправлено 07 July 2012 - 08:25 AM

Данные формы = iconv('UTF-8','CP1251',данные формы)) :)


Вылезает ошибка, в чем м.б. проблема?
Fatal error: Call to undefined function iconv()

Аналог какой-нибудь есть данной функции?
  • 0

#14 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 07 July 2012 - 09:43 AM

Аналог какой-нибудь есть данной функции?

Аналог не сложно написать самому, но "undefined function iconv()" это ОЧЕНЬ странно, т.к. это штатная (встроенная) функция PHP начиная с PHP5.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#15 Pascal

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 46 сообщений
Репутация: 13
Начинающий

Отправлено 07 July 2012 - 10:46 AM

это штатная (встроенная) функция PHP начиная с PHP5.


(PHP 4 >= 4.0.5, PHP 5) - с сайта php.su

Аналог не сложно написать самому


и как это сделать?
  • 0

#16 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 07 July 2012 - 11:24 AM

(PHP 4 >= 4.0.5, PHP 5)

Эта строка означает, что функция iconv есть с версии 4.0.5. До того ее не было.
А если нажать в той ссылке ссылку "функции iconv", то можно прочитать "Этот модуль является частью PHP начиная с версии 5". Но я не очень понимаю, зачем все эти объяснения и какая разница, что в 4.0.5 этот модуль отдельной либой (что-нибудь типа php_iconv), а в 5 уже встроен. Ведь даже если на хостинге дефолтово установлен PHP4, то iconv это очень спросовая функция и ее отсутствие - это фантастика.

и как это сделать?

Не понял вопроса. Вы не знаете, как пишут функции?

PS. возьмите любую функцию транслитерации и замените в ней таблицы откуда-куда с транслита на перекодировку.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#17 Pascal

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 46 сообщений
Репутация: 13
Начинающий

Отправлено 07 July 2012 - 11:33 AM

PS. возьмите любую функцию транслитерации и замените в ней таблицы откуда-куда с транслита на перекодировку.


Все оказалось на много проще - вот решение!

Проверил версию PHP, строка echo( phpversion() ); вернула 5.2.10
  • 0

#18 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 07 July 2012 - 02:07 PM

Проверил версию PHP, строка echo( phpversion() ); вернула 5.2.10

Раз есть функция от PHP4, практически аналогичная iconv, то проблема решена и фиг с ней.
Но не могу еще раз не удивиться, что в какой-то версии PHP5 нет iconv.
У меня на разных серверах стоят 5.0.16, 5.2.??, 5.3.8 - везде iconv есть.

У меня на разных серверах стоят 5.0.16, 5.2.??, 5.3.8 - везде iconv есть.

?? обычно 17, но неожиданно нашелся и 10.

#!/usr/bin/php
<?php
echo(phpversion()."\n");
echo (iconv('utf-8','cp1251',"abcd\n"));
?>

результат:
[root@zabbix-u-2 tmp]# ./test.php
5.2.10
abcd
[root@zabbix-u-2 tmp]#
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#19 Pascal

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 46 сообщений
Репутация: 13
Начинающий

Отправлено 07 July 2012 - 10:29 PM

Но не могу еще раз не удивиться, что в какой-то версии PHP5 нет iconv.


Чудеса да и только :)
  • 0

#20 Robby

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 162 сообщений
Репутация: 75
Продвинутый

Отправлено 08 July 2012 - 09:19 AM

Pascal, если не работает iconv, то лучше использовать такую функцию перекодировки русского текста из cp1251 (windows-1251) в UTF8.



function cp1251_to_utf8 ($txt)  { 
	$in_arr = array ( 
		chr(208), chr(192), chr(193), chr(194), 
	    chr(195), chr(196), chr(197), chr(168), 
	    chr(198), chr(199), chr(200), chr(201), 
	    chr(202), chr(203), chr(204), chr(205), 
	    chr(206), chr(207), chr(209), chr(210), 
	    chr(211), chr(212), chr(213), chr(214), 
	    chr(215), chr(216), chr(217), chr(218), 
	    chr(219), chr(220), chr(221), chr(222), 
	    chr(223), chr(224), chr(225), chr(226), 
	    chr(227), chr(228), chr(229), chr(184), 
	    chr(230), chr(231), chr(232), chr(233), 
	    chr(234), chr(235), chr(236), chr(237), 
	    chr(238), chr(239), chr(240), chr(241), 
	    chr(242), chr(243), chr(244), chr(245), 
	    chr(246), chr(247), chr(248), chr(249), 
	    chr(250), chr(251), chr(252), chr(253), 
	    chr(254), chr(255) 
	);    
 
	$out_arr = array ( 
	    chr(208).chr(160), chr(208).chr(144), chr(208).chr(145), 
	    chr(208).chr(146), chr(208).chr(147), chr(208).chr(148), 
	    chr(208).chr(149), chr(208).chr(129), chr(208).chr(150), 
	    chr(208).chr(151), chr(208).chr(152), chr(208).chr(153), 
	    chr(208).chr(154), chr(208).chr(155), chr(208).chr(156), 
	    chr(208).chr(157), chr(208).chr(158), chr(208).chr(159), 
	    chr(208).chr(161), chr(208).chr(162), chr(208).chr(163), 
	    chr(208).chr(164), chr(208).chr(165), chr(208).chr(166), 
	    chr(208).chr(167), chr(208).chr(168), chr(208).chr(169), 
	    chr(208).chr(170), chr(208).chr(171), chr(208).chr(172), 
	    chr(208).chr(173), chr(208).chr(174), chr(208).chr(175), 
	    chr(208).chr(176), chr(208).chr(177), chr(208).chr(178), 
	    chr(208).chr(179), chr(208).chr(180), chr(208).chr(181), 
	    chr(209).chr(145), chr(208).chr(182), chr(208).chr(183), 
	    chr(208).chr(184), chr(208).chr(185), chr(208).chr(186), 
	    chr(208).chr(187), chr(208).chr(188), chr(208).chr(189), 
	    chr(208).chr(190), chr(208).chr(191), chr(209).chr(128), 
	    chr(209).chr(129), chr(209).chr(130), chr(209).chr(131), 
	    chr(209).chr(132), chr(209).chr(133), chr(209).chr(134), 
	    chr(209).chr(135), chr(209).chr(136), chr(209).chr(137), 
	    chr(209).chr(138), chr(209).chr(139), chr(209).chr(140), 
	    chr(209).chr(141), chr(209).chr(142), chr(209).chr(143) 
	);    
 
	$txt = str_replace($in_arr,$out_arr,$txt); 
	return $txt; 
}
Если поменять местами $in_arr и $out_arr, то функция заработает в обратном направлении, т.е. будет преобразовывать UTF-8 в CP-1251.
  • 1