Данные не всегда отправляются на сервер
Всем добрый день!
Помогите, пожалуйста, советом. С помощью специальной программы создается онлайн-анкета из нескольких страничек. На каждой страничке есть несколько вопросов. Отправка введенных данных происходит при переходе к следующей странице (кнопка 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, время: 13:44. |