Данные не всегда отправляются на сервер
Всем добрый день!
Помогите, пожалуйста, советом. С помощью специальной программы создается онлайн-анкета из нескольких страничек. На каждой страничке есть несколько вопросов. Отправка введенных данных происходит при переходе к следующей странице (кнопка submit). Иногда возникает такая ситуация: Человек пишет, что заполнил все, а у нас нет никаких данных, как будто он и не открывал анкету вовсе. Тех. поддержка хостинга говорит, что у них "все норм, ищите проблему в своих скриптах". Но я не знаю, где искать эти скрипты, я ведь через стороннее ПО все делаю. Там зашито все и посмотреть или поменять нет возможности. Знаю только, что внутри этого ПО нет БД, все данные записываются в cgi- файлики. Не найдя решения, я соорудила костыль)) :write: Создала базу на хостинге, и на каждой странице анкеты подписала отправку данных в мою базу, в надежде, что хоть там что-то будет сохраняться. Но проблема с пропажей данных не исчезла. Когда данных нет в обычной админке (внутри ПО), их нет и у меня в БД.:cray: Такое случается довольно редко, может в 1% случаев заполнения или реже. Браузеры у всех "пропавших" разные, кто с компа заполнял, кто с планшета. Зависимости пропажи данных от чего-либо выявить не удалось. Если нужно, могу выложить свой код. Но проблемы были и до его появления. Может у вас есть мысли, по каким причинам данные могут пропадать? Или может они вообще не отправляются? Если не отправляются, то почему срабатывает submit и переход к следующей странице... Буду рада любым советам! |
Если отправка методом GET, то отправление можно видеть и в адресной строке. А получать данные естественно на страницах, на которые отправляются формы. А вы что делаете?
|
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);
?>
|
Цитата:
Ничего необычного нет, и если до вашего кода нет иного обработчика запроса, который может сбрасывать $_POST, то все должно работать. Что отправляется серверу и чем он отвечает в отладчике проверяли? Можно было бы предположить, что используется XForms, а ее данные это xml, которые нужно получать как $HTTP_RAW_POST_DATA (сырец), поэтому у вас и не выходит. А так то все нормально, по крайней мере по тому, что тут написано. Если подставить свою форму с тестовыми данными, выбросив все переменные %, то проблем с получением точно не будет. |
laimas, спасибо за внимание к моему вопросу!:thanks:
Цитата:
У меня самой не получается выловить проблему пропажи данных, все работает. Делала тест на открытие 1000 ссылок, все 1000 сработали как надо. Цитата:
Цитата:
Причем бывает такое, что у человека при заполнении данные не сохранились, мы просим его повторно все заполнить, и со второго раза у него все работает:blink: Ведь, если бы ошибка была в скрипте, второй раз бы тоже ничего не сохранялось... Я предполагаю, что проблема более глобальна. Может нужно что-то в htaccess добавить (сейчас там только Options +ExecCGI) Или проблема в нашем хостинге, он достаточно старый... Я еще не пробовала писать в тех поддержку самого ПО. Надо попробовать, может они что-нибудь скажут |
Да htaccess к этому отношения не имеет. Если есть завязь этого действия на сессию, то возможно она умирает, а поэтому и не происходит должная обработка полученных данных.
|
| Часовой пояс GMT +3, время: 07:14. |