2014-07-31 3 views
0

У меня есть этот код - это не делается мной: s и у меня нет времени для замены устаревших вызовов.json_encode добавление null: null entry

<?php 

$mageFilename = 'app/Mage.php'; 
require_once $mageFilename; 
umask(0); 
Mage::app(); 

$db=mysql_connect('localhost','carros_mil1','K-Jw)ureB.}M'); 
mysql_select_db('carros_mil0',$db); 
$nombreListModelo = 'modelo_'.str_replace(" ","_",strtolower($_REQUEST['nombreMarca'])); 

$sql = "SELECT DISTINCT (identificador) AS id 
    FROM modelos 
    WHERE nombre = '".$nombreListModelo."'"; 
$rs=mysql_query($sql); 
$i=0; 
while ($row = mysql_fetch_array($rs)) { 
    $vectorModelo[$i] = $row['id']; 
    $i++; 
} 

$sql = "SELECT attribute_id 
    FROM eav_attribute 
    WHERE attribute_code = '".$nombreListModelo."'"; 
$rs = mysql_query($sql); 
$row = mysql_fetch_array($rs); 
$id1 = $row['attribute_id']; 

$sql= "SELECT eao.option_id AS option_id 
    FROM eav_attribute_option eao, eav_attribute_option_value eaov 
    WHERE eao.option_id=eaov.option_id AND attribute_id = ".$id1." ORDER BY eaov.value"; 
$rs=mysql_query($sql); 

$retorno = array(); 
$bandera = true; 

while ($row = mysql_fetch_array($rs)) { 

    $bandera = false; 
    $sql2= "SELECT value, option_id 
     FROM eav_attribute_option_value 
     WHERE option_id = ".$row['option_id']." 
     ORDER BY value"; 
    $rs2=mysql_query($sql2); 
    $row2= mysql_fetch_array($rs2); 

    if ($_REQUEST['bandera']=='vende') { 
     if (!is_null($row2['value'])) $retorno[$row2['value']] = $row2['value']; 
    } else { 
     $existe=false; 
     for($k=0;$k<count($vectorModelo);$k++) { 
      if($row2['option_id'] == $vectorModelo[$k]) { 
       $existe=true; 
       break; 
      } 
     } 
     if($existe) { 
      if($_REQUEST['tipo']=='contactenos') 
       if (!is_null($row2['value'])) $retorno[$row2['value']] = $row2['value']; 
      else 
       if (!is_null($row2['option_id'])) $retorno[$row2['option_id']] = $row2['value']; 
     } 
    } 
} 

if($bandera) 
    $retorno[''] = 'Todos'; 

header('Content-Type: application/json'); 
//echo json_encode($retorno); 
foreach($retorno as $k => $v) { 
    printf("%s => %s\n", $k, $v); 
} 
print_r($retorno); 
echo json_encode($retorno); 

Поскольку я заметил что-то странное в сгенерированном json, я добавил два разных способа печати содержимого массива.

Путь JSON добавляет мне null: null entry. Странным случаем является то, что я проверяю !is_null($row2['value']) каждый раз, когда добавляю элемент.

Когда я попал в URL при определенных параметрах, я получаю:

Elantra => Elantra 
Getz => Getz 
H1 => H1 
i-10 => i-10 
New Accent => New Accent 
Santa Fé => Santa Fé 
Tucson => Tucson 
Array 
(
    [Elantra] => Elantra 
    [Getz] => Getz 
    [H1] => H1 
    [i-10] => i-10 
    [New Accent] => New Accent 
    [Santa Fé] => Santa Fé 
    [Tucson] => Tucson 
) 
{"Elantra":"Elantra","Getz":"Getz","H1":"H1","i-10":"i-10","New Accent":"New Accent",null:null,"Tucson":"Tucson"} 

Первые 6 строк соответствуют эксклюз foreach цикла. Также есть вызов print_r, который отображает только 6 элементов. Третья форма, которая является фактической, которая мне нужна, показывает нулевое значение.

So: Почему $retorno Принимает пустые записи, когда я проверю нулевое состояние заранее? рассмотрение этот сценарий полный - здесь нет недостающего кода.

+0

Не могли бы вы расследовать уменьшить этот сценарий несколько - было бы намного легче ответить, если бы вы удалили код, не имеющий отношения к проблеме. – simpleigh

+0

показать скрипт, который имеет указанный вывод. –

+0

ЭТО сценарий. Это полный сценарий. И самая большая часть - соответствующая - петля. –

ответ

1

(Спасибо @Hammerstein - не знаю, почему вы не писали это как ответ).

Проблема в том, что одно из таких значений неправильно кодировалось, поскольку оно не было значением ANSI и не кодировалось в UTF8. Таким образом, поскольку у «Santa Fé» был «странный» характер, он был закодирован как null вместо «Santa F \ u00e9».

Совет: Никогда предположим, ваша база данных использует utf8_ кодовую

Решение было явно кодировать значения при создании массива:

... 

$bandera = false; 
$sql2= "SELECT value, option_id 
    FROM eav_attribute_option_value 
    WHERE option_id = ".$row['option_id']." 
    ORDER BY value"; 
$rs2=mysql_query($sql2); 
$row2= mysql_fetch_array($rs2); 

//ENCODE the values to a good charset 
$value = utf8_encode($row2['value']); 
$option_id = utf8_encode($row['option_id']) 

if ($_REQUEST['bandera']=='vende') { 
    $retorno[$value] = $value; 
} else { 
    $existe=false; 
    for($k=0;$k<count($vectorModelo);$k++) { 
     if($row2['option_id'] == $vectorModelo[$k]) { 
      $existe=true; 
      break; 
     } 
    } 
    if($existe) { 
     if($_REQUEST['tipo']=='contactenos') 
      $retorno[$value] = $value; 
     else 
      $retorno[$option_id] = $value; 
    } 
} 

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