Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.10.2019, 11:10
Профессор
Отправить личное сообщение для Manyasha Посмотреть профиль Найти все сообщения от Manyasha
 
Регистрация: 21.09.2015
Сообщений: 196

Данные не всегда отправляются на сервер
Всем добрый день!

Помогите, пожалуйста, советом.

С помощью специальной программы создается онлайн-анкета из нескольких страничек.
На каждой страничке есть несколько вопросов.
Отправка введенных данных происходит при переходе к следующей странице (кнопка submit).

Иногда возникает такая ситуация:
Человек пишет, что заполнил все, а у нас нет никаких данных, как будто он и не открывал анкету вовсе.
Тех. поддержка хостинга говорит, что у них "все норм, ищите проблему в своих скриптах".
Но я не знаю, где искать эти скрипты, я ведь через стороннее ПО все делаю. Там зашито все и посмотреть или поменять нет возможности. Знаю только, что внутри этого ПО нет БД, все данные записываются в cgi- файлики.

Не найдя решения, я соорудила костыль))
Создала базу на хостинге, и на каждой странице анкеты подписала отправку данных в мою базу, в надежде, что хоть там что-то будет сохраняться.
Но проблема с пропажей данных не исчезла.
Когда данных нет в обычной админке (внутри ПО), их нет и у меня в БД.

Такое случается довольно редко, может в 1% случаев заполнения или реже.
Браузеры у всех "пропавших" разные, кто с компа заполнял, кто с планшета.
Зависимости пропажи данных от чего-либо выявить не удалось.

Если нужно, могу выложить свой код. Но проблемы были и до его появления.

Может у вас есть мысли, по каким причинам данные могут пропадать? Или может они вообще не отправляются?
Если не отправляются, то почему срабатывает submit и переход к следующей странице...

Буду рада любым советам!
Ответить с цитированием
  #2 (permalink)  
Старый 16.10.2019, 11:20
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Если отправка методом GET, то отправление можно видеть и в адресной строке. А получать данные естественно на страницах, на которые отправляются формы. А вы что делаете?
Ответить с цитированием
  #3 (permalink)  
Старый 16.10.2019, 12:24
Профессор
Отправить личное сообщение для Manyasha Посмотреть профиль Найти все сообщения от Manyasha
 
Регистрация: 21.09.2015
Сообщений: 196

laimas,
какая отправка внутри ПО не знаю((
Через GET что-то по-любому передается, т.к. при переходе к следующей странице у ссылки появляется хвостик
"ciwweb.pl?s=17271717000006" (в s=всегда какие-то цифры).
Вот тестовый пример такой анкеты (все что создается программой, без моих скриптов): http://www.maronline.ru/marina/test/testlogn.htm

Я отправляю методом POST.
js:
$("form[name='mainform']").attr("onSubmit", "return false;")
$("form").on("submit", function(event){
	event.preventDefault();
	if(SSI_subVerify() == true){// Внутренняя функция, которая проверяет корректность введенных данных
		var elems = $("[type='radio'],[type='checkbox'],[type='text'],select,textarea");
		var answ = elems.serializeArray()
		answ_str = '';
		$.each(answ, function(i, e){
			answ_str += '\n' + e.name + "=" + e.value
		})

		var data = {
			"tbl": "WH_feedback",
			"pass": [%pass%],// Внутренняя переменная, хранит пароль на анкету
			"field": "page_"+[%PageNumber()+0%],// Внутренняя переменная, хранит номер страницы
			"answers": answ_str
		}
				
		$.ajax({
			type: "POST", 
			url: "../../../data_source/send_fb_page.php",
			dataType:"text",
			data: data
		}).always(function(response){
			if (response != "OK"){
				alert( "Произошла ошибка при отправке данных. Свяжитесь с разработчиком.\n" +response );
			}else{
				window.document.mainform.hid_javascript.value = 1;
				document.mainform.submit();
			}
		})
	}
})


php:
<?php
include 'config.php';

$tbl = $_POST['tbl'];
$pass = $_POST['pass'];
$field = $_POST['field'];
$answers = $_POST['answers'];

$res = mysqli_query($mysqli, 'SELECT * FROM '.$tbl.' WHERE pass = '.$pass);
$count = mysqli_num_rows($res);

if( $count > 0 ){
	$row = mysqli_fetch_array($res, MYSQLI_ASSOC);
	if ($row[$field]){
		$upd_answ = $row[$field] . PHP_EOL . date("Y-m-d H:i:s") . ': ' . $answers;
	}else{
		$upd_answ = date("Y-m-d H:i:s") . ': ' . $answers;
	}
	$stmt = mysqli_query($mysqli, 'UPDATE '.$tbl.' SET '.$field .'="'.$upd_answ .'" WHERE pass='.$pass);
	if ( false===$stmt ) {
	  die('update failed: ' . mysqli_error($mysqli));
	}
	printf('OK');
}else{
	$upd_answ = date("Y-m-d H:i:s") . ': ' . $answers;
	$stmt = mysqli_query($mysqli, 'INSERT INTO '.$tbl.' (pass, '.$field .') VALUES ('.$pass.', "'.$upd_answ.'")');
	if ( false===$stmt ) {
	  die('insert failed: ' . mysqli_error($mysqli));
	}
	printf('OK');
}

mysqli_close($stmt);
?>
Ответить с цитированием
  #4 (permalink)  
Старый 16.10.2019, 17:31
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Manyasha
Отправка введенных данных происходит при переходе к следующей странице
Как это может быть если запрос асинхронный, а в его результате нет перехода? Серверу его производить бесполезно, если только не ради сброса POST, на страницу с ответом "Ок".

Ничего необычного нет, и если до вашего кода нет иного обработчика запроса, который может сбрасывать $_POST, то все должно работать. Что отправляется серверу и чем он отвечает в отладчике проверяли?

Можно было бы предположить, что используется XForms, а ее данные это xml, которые нужно получать как $HTTP_RAW_POST_DATA (сырец), поэтому у вас и не выходит. А так то все нормально, по крайней мере по тому, что тут написано. Если подставить свою форму с тестовыми данными, выбросив все переменные %, то проблем с получением точно не будет.

Последний раз редактировалось laimas, 16.10.2019 в 17:35.
Ответить с цитированием
  #5 (permalink)  
Старый 17.10.2019, 10:41
Профессор
Отправить личное сообщение для Manyasha Посмотреть профиль Найти все сообщения от Manyasha
 
Регистрация: 21.09.2015
Сообщений: 196

laimas, спасибо за внимание к моему вопросу!

Сообщение от laimas Посмотреть сообщение
Что отправляется серверу и чем он отвечает в отладчике проверяли?
В своих скриптах проверяла. Все нормально, в response всегда "OK".
У меня самой не получается выловить проблему пропажи данных, все работает.
Делала тест на открытие 1000 ссылок, все 1000 сработали как надо.

Сообщение от laimas Посмотреть сообщение
Можно было бы предположить, что используется XForms, а ее данные это xml, которые нужно получать как $HTTP_RAW_POST_DATA (сырец), поэтому у вас и не выходит
У меня все выходит))

Сообщение от laimas Посмотреть сообщение
Если подставить свою форму с тестовыми данными, выбросив все переменные %, то проблем с получением точно не будет.
В том-то и загвоздка, что проблемы с получением возникают очень редко, и возникают не у меня, я даже не могу посмотреть, что там в отладчике на момент ошибки((
Причем бывает такое, что у человека при заполнении данные не сохранились, мы просим его повторно все заполнить, и со второго раза у него все работает
Ведь, если бы ошибка была в скрипте, второй раз бы тоже ничего не сохранялось...

Я предполагаю, что проблема более глобальна.
Может нужно что-то в htaccess добавить
(сейчас там только Options +ExecCGI)
Или проблема в нашем хостинге, он достаточно старый...

Я еще не пробовала писать в тех поддержку самого ПО.
Надо попробовать, может они что-нибудь скажут
Ответить с цитированием
  #6 (permalink)  
Старый 17.10.2019, 10:52
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Да htaccess к этому отношения не имеет. Если есть завязь этого действия на сессию, то возможно она умирает, а поэтому и не происходит должная обработка полученных данных.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа JS с БД zgmoru jQuery 16 28.12.2015 14:23
Как собрать все данные из таблицы, и отправить массив на сервер optsar AJAX и COMET 14 11.12.2015 07:58
Как отправляются данные djonA Общие вопросы Javascript 4 05.06.2015 11:17
КАк отправлять данные компьютера на сервер и наоборот, но без браузера (!!!) ? name123123 Общие вопросы Javascript 1 01.04.2013 20:50
Не могу отправить данные на сервер dmitry111 Общие вопросы Javascript 2 20.02.2013 11:24