2014-01-24 3 views
5

У меня есть php-приложение в codeigniter, и у меня возникает следующая проблема. При отправке формы с Ipad в случайном порядке она потеряет данные для сообщения. Я попытался получить доступ к данным сообщения четырьмя различными способами.Данные формы теряются

print_r($this->input->post()); 
print_r($_POST); 
print_r(file_get_contents('php://input')); 
print_r($_REQUEST); 

Все из которых не возвращают ничего или пустого массива. Это происходит только при использовании Ipad или Iphone, однако это произошло. Однажды из 50+ тестов на сафари на рабочем столе. При тестировании в браузере ПК примерно 100 раз (firefox, chrome, IE) это не произошло, только один раз в сафари.

Код формы;

<form id="email_report_form" name="email_report_form" method="post" accept-charset="utf-8" action="/handleajax/email_page" class="email_report_form ajaxform" onsubmit="return validate();"> 
    <div class="form_step_container clearfix"> 
     <div class="element clearfix"> 
      <div class="col_left"> 
       <label>Email: <span class="required">*</span></label> 
      </div> 
      <div class="col_right"> 
       <input type="text" name="form_email_to" id="form_email_to" /> 
       <div>&nbsp;</div> 
       <label>Separate multiple email addresses with a comma</label> 
      </div> 
     </div> 
     <div class="element clearfix"> 
      <div class="col_left"> 
       <label>Your Message:</label> 
      </div> 
      <div class="col_right"> 
       <textarea name="form_email_message" cols="125" rows="5" onkeypress="return checkLength(event, this, 1000);"></textarea> 
       <label>(Maximum of 1000 characters)</label> 
       <br /> 
       <input type="hidden" name="redirect_path" id="redirect_path" value="" /> 
       <input type="submit" value="Send" class="btn btn-primary" /> 
      </div> 
     </div> 
    </div> 
    <div class="element clearfix"> 
     <i>Information entered in this form will not be used for marketing purposes or passed to third parties.</i> 
    </div> 
</form> 

Код для onSubmit validate();

function validate() { 
    element = document.getElementById("form_email_to"); 
    addresses = element.value.split(","); 
    for (var i = 0; i < addresses.length; i++) { 
     address = addresses[i].replace(/^\s*|\s*$/g, ""); 
     if (!validateEmail(address)) { 
      alert('The email address "' + address + '" is invalid.'); 
      element.focus(); 
      return false; 
     } 
    } 

    if (window.location.hash.length > 2) { 
     $('#redirect_path').val(window.location.hash.substring(2)); 
    } else { 
     $('#redirect_path').val(window.location); 
    } 

    $('#email_report').slideUp(); 
    return true; 
} 

Код для функции, которую представляет форма;

public function email_page() { 
    echo "<br/>ci<br/>"; 
    print_r($this->input->post()); 
} 

Как вы можете видеть, именно здесь я повторяю данные сообщения, и на этом этапе данные были потеряны. Кто-нибудь знает, почему я столкнулся с этой проблемой и как ее решить?

+0

Я думаю, что нет никаких ошибок в коде, пожалуйста, проверьте файл config.php и csrf_protection. – Rajnish

+1

Возможной причиной может быть перенаправление 302 или 301. Вы отправляете форму на/handleajax/email_page. Если ваш веб-сервер или php перенаправляет пользователя в другое место, вы потеряете данные формы. Когда это 301 постоянное перенаправление, большинство браузеров автоматически перейдут в новое место после того, как они были перенаправлены один раз раньше. Это всего лишь одна из многих возможностей, но ее легко проверить. – jan

+0

Используете ли вы настоящий ipad или симулятор ipad? –

ответ

0

Возможно, вы заметили, что этот парень обнаружил, что это проблема, когда Negotiate включен на сервере, вы можете проверить свой сервер или поставить какой-то заголовок php-заголовка, проверить свои Accept в ответе HTTP и играть с ними, Вы можете посмотреть на этой

Ну да, я сделал все, что уже и ничего не выявили, , поэтому я обратилась за помощью ... Неудачный запрос трассировки Я было просто самое показательное, что я должен был продолжать.

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

Authentication> Встроенная проверка подлинности Windows> Расширенные настройки

провайдеры> [Negotiate, NTLM] < - Не работает проверка подлинности> Интегрированные окна аутентификации> Расширенные настройки> Провайдеры> [NTLM] < - работы

Так что, похоже, что это ошибка со стеком аутентификации Safari, где пост тело каким-то образом получает завинчивающейся когда согласовывают включена. Это не имеет никакого смысла, почему это произойдет, но на самом деле я вижу много другого нечетного поведения с аутентификацией в 5.1. Много раз, , но не всегда, я получу несколько подсказок пароля, когда он пробует для аутентификации дочернего объекта, который запрашивает страница (css/js/img). I не думаю, что это ошибка с IIS, так как каждый другой браузер даже 5.0 полностью прекрасен, плюс тот факт, что стек NTLM должен быть правильно реализован и нетронутый стабильный в течение длительного времени ... если только последнее обновление Windows в этом область может способствовать ... это стоит проверить на наименее.В понедельник я буду следить за сафари и посмотреть, могу ли я найти .

Благодаря

Ссылка здесь http://forums.iis.net/t/1182376.aspx?IIS7+5+receives+empty+post+body+from+Safari+5+1+

Успехов!

Смежные вопросы