Передать данные формы ajax + php + mysql

wcb-falcon

Новичок
Помогите правильно собрать последовательность кодирований для передачи и декодирований для чтения

есть форма (очень большая объектов на 500)
в одно из полей вводим следующий набор символов
абв "asd" <asd> asd / asd / asd "asd" / "zячс13ячс" `1234567890-~!@#$%^*()_/*-{}[]|":;'\/.,+&=
после заполнения делаю обработку на javascript (jquery)
str = decodeURIComponent(form.serialize());
Пример заполнения одного поля в этом случае выглядет так
абв+\"asd\"++asd+/+asd+/+asd+\"asd\"+/+\"zячс13ячс\"+`1234567890-~!@#$%^*()_/*-{}[]|\":;\'\\/.,+&=
эту переменную передаю с помощью ajax (методом post) в обработку файла на php в котором данные дополнительно кодирую
PHP:
$answer = base64_encode($str);
после чего пишу значение в базу

При прочтении получаем строку вида
string(122) "terredenici=абв+\"asd\"++asd+/+asd+/+asd+\"asd\"+/+\"zячс13ячс\"+`1234567890-~!@#$%^*()_/*-{}[]|\":;\'\\/.,+"
Где уже видно что потеряны символы & и =
а также добавлены символы \ которые мы не вводили
Для дальнейшей разборки использую
PHP:
$post = base64_decode($line['answer']);
и дальше пытаюсь заного разобрать строку в массив для подстановки всех данных в свои поля и избавиться от лишних символов
PHP:
$post = explode('&',$post);
$postnew = array();
foreach($post as $key=>$value){
	$post2 = explode('=',$value);
	$v = urldecode($post2[1]);
	$v = str_replace(array("\""), '&quot;', $v);
	$v = str_replace(array("'"), '&quot;', $v);
	$v = str_replace(array("\\"), '/', $v);
	$v = str_replace(array("//"), '/', $v);
	$v = str_replace(array("/\""), '&quot;', $v);
	$v = str_replace(array("/&quot;"), '&quot;', $v);
	$postnew[$post2[0]] = $v;
}
$post = $postnew;
Тем самым добиваюсь того что попытка записи строки вида
абв "asd" <asd> asd / asd / asd "asd" / "zячс13ячс" `1234567890-~!@#$%^*()_/*-{}[]|":;'\/.,+&=
при прочтении дает результат вида
абв "asd" <asd> asd / asd / asd "asd" / "zячс13ячс" `1234567890-~!@#$%^*()_/*-{}[]|":;"//.,
т.е. идет потеря всего 5 символов
точнее символ \ заменяется на / а символ ' заменяем на ", это в принципи устраивает но вот как мне всеже сделать так чтобы такие символы как + и = тоже присутствовали. (знак амперсенда не обязателен но если можно и его вернуть то былобы хорошо)

Прошу помощи у знатоков.
 

wcb-falcon

Новичок
Знаю что описал все не фонтан :( просто приводить целые куски кода это будет еще хуже (файл формы вообще содержит более 8000 строк)

нашел смежное решение поставив после
PHP:
$post = base64_decode($line['answer']);
вот эту обработку
PHP:
$post = stripslashes($post);
тем самым убрав поиск и замену
PHP:
$v = str_replace(array("\""), '&quot;', $v);
    $v = str_replace(array("'"), '&quot;', $v);
    $v = str_replace(array("\\"), '/', $v);
    $v = str_replace(array("//"), '/', $v);
    $v = str_replace(array("/\""), '&quot;', $v);
    $v = str_replace(array("/&quot;"), '&quot;', $v);
т.е. тут на выходе я теряю всего 3 символа
Если поможите их сохранить (при записи) и вернуть (при прочтении) то вопрос будет исчерпан :)
 

Фанат

oncle terrible
Команда форума
не будет.
символы-то тебе вернуть - не проблема.
но весь вот этот ужас в коде так и останется
 

Фанат

oncle terrible
Команда форума
ты можешь, например, объяснить, зачем тебе base64_encode?
 

wcb-falcon

Новичок
ты можешь, например, объяснить, зачем тебе base64_encode?
В принципе немного пораскинов серым веществом я уже нашел решение :) но объясню.
base64_encode я делаю для того чтобы записать все данные форм в одно значения поля в базе (при этом не потеряв какие либо символы и не вызвав ошибки запроса к базе).
Возможно с учетом новой модификации оно и не нужно но для безопасности пожалуй оставлю.
теперь опишу что я переделал для того чтобы у меня получилось 100% совпадение того что ввожу и то что получаю
1) в первой обработке на javascript я убрал обработку decodeURIComponent
var rowArr = form.serialize();
2) в обработке на PHP оставил только
PHP:
 $answer = base64_encode($str);
провожу запись
теперь при прочтении
использую
PHP:
$post = base64_decode($line_maa['answer']);
$post = stripslashes($post);
$post = explode('&',$post);
$postnew = array();
foreach($post as $key=>$value){
	$post2 = explode('=',$value);
	$v = urldecode($post2[1]);
	$postnew[$post2[0]] = $v;
}
$post = $postnew;
тем самым введя в форме набор символов вида:
1234567890`~!@#$%^*()-_{}[];:'"\|,<.>/?qwertyuiopasdfghjklzxcvbnmйцукенгшщзхъфывапролджэячсмитьбю+=&
сделав указанные обработки при прочтении я получаю точно такую же строку :)
 

Фанат

oncle terrible
Команда форума
осталось догадаться, что base64_decode, base64_encode и stripslashes тоже не нужно.
и очень сомнительно про urldecode, но тут я не знаю, где ты там ещё чего наплёл

а, дошло.
serialize в жс-е тоже не нужно.
тогда и остальные пляски бубном в пыхе будут не нужны
 

wcb-falcon

Новичок
По вашему получается что передавать данные из формы через ajax можно и не сериализуя ?
интересно увидеть данный кусок примера

мой кусок в данном случае выглядит так
var form = $('form');
var error = $('.error');
var block = $('.block');
var rowArr = form.serialize();
var _data = {'post':rowArr};
$.ajax({
type:'POST',
url:'/ajax_.php',
data:_data,
cache:false,
success:function(resultat){
if(resultat.substr(0,5)=='error'){
error.html(resultat.substr(6,resultat.leaght));
}else{
block.html(resultat);
}
}
});
return false;
 

wcb-falcon

Новичок
По моему мы говорим о разных вещах !
Если вы имели введу стандартную передачу типо
<form action="script.php" metod="post">
то меня это не устраивает я в самом начале написал что данные мне нужно передавать с помощью ajax не перегружая страницу
Если всеже вы утверждаете что ajax может передать данные не сериализуя то приведите пример (дайте ссылку на пример) т.к. в моем варианте убрав сериализацию при попытке передачи я получил ошибку и сбой системы.
 

Фанат

oncle terrible
Команда форума
примеров полно в документации.
если ты где-то допустил ошибку, то это не значит, что сам метод не рабочий.
ошибки надо исправлять, а не накручивать для их обхода кучу мусора
 

wcb-falcon

Новичок
примеров полно в документации.
Это я так понял меня завуалированно послали ну да ладно не хотите отвечать ну и не надо
Ваше выражение было сравнимо с "иди погугли" !

Для меня вопрос исчерпан задача решена

Тему считаю закрытой
 

Фанат

oncle terrible
Команда форума
Ты правильно догадался :)
Если ты думаешь, что кто-то здесь огорчится из-за того, что у тебя так и останется говнокод, то ты малость ошибся
 

WMix

герр M:)ller
Партнер клуба
wcb-falcon
так на всякий случай,...а что по твоему делает?
PHP:
form.serialize();
и почему нельзя было написать
PHP:
$.ajax({
  type:'POST',
  url:'/ajax_.php',
  data: form.serialize(),
  cache:false,
  success:function(resultat){
  ....
});
чувствуешь разницу между,
Код:
/ajax_.php?a=b&c=d
и
Код:
/ajax_.php?post=a%3Db%26c%3Dd
какая base64? зачам она нужна понятие есть?
 

wcb-falcon

Новичок
а что по твоему делает?
PHP:
form.serialize();
и почему нельзя было написать
PHP:
$.ajax({
  type:'POST',
  url:'/ajax_.php',
  data: form.serialize(),
  cache:false,
  success:function(resultat){
  ....
});
чувствуешь разницу между,
Код:
/ajax_.php?a=b&c=d
и
Код:
/ajax_.php?post=a%3Db%26c%3Dd
это ты у Фаната спроси это он утверждает что сериализация ненужна про базе64 возможно и не стоило использовать я об этом потом подумаю
 
Сверху