Проблема с массивом _POST - PullRequest
0 голосов
/ 29 мая 2009

У меня есть следующий код:

if ( (isset($_GET['slAction'])) && ($_GET['slAction'] == "manage_label") )
{    
  $formData = getFormData();
  foreach ($formData as $key => $value)
    echo "(Key: $key, Value: $value )<br /> ";

}

// All form fields are identified by '[id]_[name]', where 'id' is the 
// identifier of the form type. Eg. label, store etc.
// The field identifier we want to return is just the name and not the id.  
  function getFormData()
  {
    $form_fields = array_keys($_POST); 

    for ($i = 0; $i < sizeof($form_fields); $i++) 
    {
      $thisField = $form_fields[$i];
      $thisValue = $_POST[$thisField];

      //If field is an array, put all it's values into one string 
      if (is_array($thisValue))
      {
        for ($j = 0; $j < sizeof($thisValue); $j++)
        {
          $str .= "$thisValue[$j],";
        }

        // Remove the extra ',' at the end
        $thisValue =  substr($str, 0, -1);

       //Assosiative array $variable[key] = value
       $formData[end(explode("_", $thisField))] = $thisValue;
      }
      else 
        $formData[end(explode("_", $thisField))] = $thisValue;      
    } 
    return $formData;
  }

Выходные данные этого кода:

(Key: id, Value: 7276 )
(Key: name, Value: 911 Main brand )
(Key: email, Value: )
(Key: www, Value: )
(Key: categories, Value: Menswear,Womenswear,Shoes )
(Key: targetgroup, Value: )
(Key: keywords, Value: )
(Key: description, Value: Testing )
(Key: saveForm, Value: Save )

Теперь это моя проблема . Поле формы с именем label_categories является флажками и возвращается в виде массива. Выход, как вы видите, «Мужская одежда, Женская одежда, Обувь». Если я попробую 'echo $ formData [' name ']', вы получите «911 Main brand». Если я попробую 'echo $ formData [' category ']. вывод пуст / пуст.

Почему я могу вывести строку «имя», а не строку «категории»? В функции getFormData () я превращаю массив в строку ....

Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 29 мая 2009

Этот код может быть значительно упрощенным:

// 1. no need for isset() check in the case where you're testing a value
// 2. use single quotes for strings where possible
if ($_GET['slAction'] == 'manage_label') {    
  $formData = getFormData();
  // 3. Good rule is to use braces even when not necessary
  foreach ($formData as $key => $value) {
    echo "(Key: $key, Value: $value )<br /> ";
  }
}

function getFormData() {
  // 4. prefer explicit initialization
  $formData = array();
  // 5. this foreach is much cleaner than a loop over keys
  foreach ($_POST as $k => $v) {
    // 6. this is a lot cleaner than end(explode(...))
    $name = preg_replace('!.*_!', '', $k);
    if (is_array($v)) {
      // 7. this implode() replaces 5 lines of code
      // and is MUCH clearer to read
      $formData[$name] = implode(',', $v);
    } else {
      $formData[$name] = $v;
    }
  }
  return $formData;
}
0 голосов
/ 29 мая 2009

вместо размещения кода, плохо объясню.

вы не можете повторить $ _post ['catagories'], потому что это не строка или число. Это массив.

вы можете повторить $ _post ['catagories'] [nth number '] или echo implode (', '$ _post [' catagories '])

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