Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Данные не всегда отправляются на сервер (https://javascript.ru/forum/server/78663-dannye-ne-vsegda-otpravlyayutsya-na-server.html)

Manyasha 16.10.2019 11:10

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

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

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

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

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

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

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

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

Буду рада любым советам!

laimas 16.10.2019 11:20

Если отправка методом GET, то отправление можно видеть и в адресной строке. А получать данные естественно на страницах, на которые отправляются формы. А вы что делаете?

Manyasha 16.10.2019 12:24

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);
?>

laimas 16.10.2019 17:31

Цитата:

Сообщение от Manyasha
Отправка введенных данных происходит при переходе к следующей странице

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

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

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

Manyasha 17.10.2019 10:41

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

Цитата:

Сообщение от laimas (Сообщение 514116)
Что отправляется серверу и чем он отвечает в отладчике проверяли?

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

Цитата:

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

У меня все выходит))

Цитата:

Сообщение от laimas (Сообщение 514116)
Если подставить свою форму с тестовыми данными, выбросив все переменные %, то проблем с получением точно не будет.

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

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

Я еще не пробовала писать в тех поддержку самого ПО.
Надо попробовать, может они что-нибудь скажут

laimas 17.10.2019 10:52

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


Часовой пояс GMT +3, время: 13:44.