данные формы json / ajax скрипт не работает на новом сервере (от windows до linux) - PullRequest
1 голос
/ 23 апреля 2011

Я перемещаю сайт с сервера Windows на сервер Linux под управлением PHP 5.2.15.

На сайте имеется большая форма приложения, которая использует javascript, jquery и ajax для проверки / добавления полей и json для кодирования / декодирования входных данных, а также PHP для отправки электронной почты.

Эта форма отлично работает на учетной записи Windows. Когда я перемещаю его на наш сервер Linux, все работает, за исключением того, что отправленное письмо пусто Есть ошибка PHP, которая распечатывается и отправляется с электронной почтой: Предупреждение: неверный аргумент указан для foreach () в /home/account/public_html/application/application_email.tpl в строке 4

первые несколько строк этого файла выглядят так:

<?php 

 $infoArr = get_object_vars( $info );
 foreach( $infoArr as $key=>$val ) {
    $parts = explode( "_", $key );
    $number = array_pop( $parts );
    if( count( $parts ) >= 1 && is_numeric( $number ) )
    {

Так что для меня ошибка говорит о том, что $ info пусто. Переменная $ info $ php создается в другом файле с именем submitApp.php. Первые несколько строк этого файла:

<?php
 require_once( "emogrifier.php" );

 $info = json_decode( $_REQUEST['data'] );

 ob_start();
 require( "application_email.tpl" );
 $css = file_get_contents("application_email.css");
 $html = ob_get_contents();
 ob_end_clean();

Итак, что-то не происходит с функцией json_decode. Используя живые HTTP-заголовки в Firefox, я вижу, как входные данные формы передаются (через POST) в submitApp.php. Итак, я знаю, что данные туда попадают. Вот строка из LiveHTTPheaders:

POST /~account/application/submitApp.php data=%7B%22name%22%3A%22Test+Name%22%2C%22address%22%3A%22111+Test+Street%22%2C%22city%22%3A%22Testville%22%2C%22state%22%3A%22NJ%22%2C%22zip%22%3A%2212121%22%2C%22email%22%3A%22test%40test.com%22%2C%22

и т. Д.

Таким образом, создается впечатление, что json_decode не работает и поэтому не помещает содержимое $_REQUEST['data'] в переменную $info.

Есть идеи? Я не новичок в php, но я новичок в json, ajax и в этой вещи "emogrifier".

Спасибо!

Ответы [ 2 ]

1 голос
/ 22 июня 2012

У меня была такая же проблема.Мой JSON работает нормально на локальном сервере, который является оконным сервером, в то время как я перешел на Linux, у меня возникла та же проблема, после того, как я попробовал post Mentho для получения данных, он работает нормально.Я заменил json_decode($_REQUEST['json'] на json_decode($_POST['json'] Наконец-то обнаружил, что он работает.

0 голосов
/ 23 апреля 2011

Хорошо, поэтому, если вы считаете, что $ info пуста, вам следует проверить это условие, чтобы вы могли справиться с ним корректно. Следующее может показаться элементарным, но я хотел бы сначала исключить простейшие решения, чтобы убедиться, что мы делаем вещи трудным путем. Поэтому я предпочитаю проверять свои переменные перед тем, как их использовать, потому что устаю от ошибок ссылок NULL.

if( isset($info) )
{
  //... do something
}
else
{
  //... gracefully handle the error
}

Что касается подозрения, что код json не работает, вы должны сначала проверить переменную $ _REQUEST ['DATA']:

if( isset($_REQUEST['data]) )
{
  // DEBUG -- attempt to view the data:
  print_r($_REQUEST['data']);

  // ... perform json extraction
}
else
{
  // ... handle the error gracefully
}

Обычно при использовании элемента формы HTML эти данные отправляются с помощью запроса POST. Я знаю, что запросы GET / POST также попадают в суперглобальный массив REQUEST, но вы можете убедиться, что ваши данные не находятся в массиве POST ...

Дайте нам знать ваши результаты :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...