PHP-генератор генератора веб-форм - пустое свойство на foreach - PullRequest
1 голос
/ 10 января 2010

В настоящее время я создаю класс PHP, который генерирует веб-форму для гибкости и проблем локализации. У меня проблемы с назначением ключа и значения для ввода с раскрывающегося списка; По некоторым причинам, foreach, похоже, не получает переменную массива ($ country_list). Вот мой код, с которым я сталкиваюсь с трудностями.

require_once('_include/country_list.php');

//drop down form class
class DropDown
{
  function __construct ($form, $field_label, $field_name, $field_desc, $dropdown_data, $locale){
    $this->form = $form;
    $this->field_label = $field_label;
    $this->field_name = $field_name;
    $this->filed_desc = $filed_desc;
    $this->dropdown_data = $dropdown_data;
    $this->locale = $locale;
  }

  function getNotRequiredData(){
    global $notReqArry; ///979652/dostup-k-peremennym-i-metodam-vne-opredelenii-klassov
    return $notReqArry[$this->locale];
  }

  function getValue(){
    return $_POST[$this->field_name];
  }

  function dropdown(){
    $selecedVal = $this->getValue();
    $select_start = "<select name=\"$this->field_name\"><option value=\"\">$this->filed_desc</option>";
    foreach ($this->dropdown_data as $key=>$value){
      $selected = ($key == $selecedVal ? 'selected' : '');
      $options = sprintf('<option value="%s" %s >%s</option>',$key,$selected,$value);
      print $options;
    }
    $select_end = "</select>";
    return $select_start . $options . $select_end;
  }

  function getLabel(){
    $non_req = $this->getNotRequiredData();
    $req = in_array($this->field_name, $non_req) ? '' : '*';
    return $this->field_label ? $req . $this->field_label : '';
  }

  function __toString(){
    $label  = $this->getLabel();
    $field = $this->dropdown();
    return $label.$field;
  }

}



function generateForm ($lang,$country_list){
  switch($lang)
  {
    case 'en-US':
      //create EN web form
      echo $textField = new TextField($form, 'Note', 'form_note', '2', '20', '250', 'en-US');
      //echo $textField_js = new JsTextField($textField, 'onkeyup', 'return checklength(this,contact_max_warning)', 'Characters typed:');
      echo $dropDown = new DropDown ($form, 'Country', 'form_country', '--Select Country--', $country_list, 'en-US');
    break;
    case 'fr-FR':
      //create FR web form
    break;
    case 'de-DE':
      //create DE web form
    break;
    case 'ja-JP':
      //create JA web form
    break;
    default:
      //create default web form
      print('foooo');
  };
}


<form id="frm_verification" action="<?=$_SERVER['SCRIPT_NAME']?>" method="POST">
  <?
    $lang='en-US';
    echo generateForm ($lang,$country_list);
  ?>
<p>
  <input type="button" name="reset" value="Reset">
  <input type="submit" name="submit" value="Submit">
</p>
</form>

и массив из country_list.php имеет вид:

$country_main = array (
            //Main 5 countries at first
            //Those 5 countries are direct market of my previous company. you can modify whatever you want.
            "US" => "United States",
            "UK" => "United Kingdom",
            "DE" => "Germany",
            "FR" => "France",
            "JP" => "Japan",                       
);

Это не работает в настоящее время, и я проверил журнал ошибок, и он говорит:

"Неустранимая ошибка PHP: невозможно получить доступ к пустому свойству в ..."

Я уверен, что это из-за моего неправильного понимания класса и его утверждения var или foreach. Пожалуйста, помогите мне исправить это; Мне действительно нужна помощь. (Да, я действительно новичок в PHP)

Ответы [ 2 ]

9 голосов
/ 10 января 2010
foreach ($this->dropdown_data as $key->$value){

следует читать

foreach ($this->dropdown_data as $key=>$value){

Обратите внимание на изменение с -> на => в $key=>$value. В противном случае ваш код пытается получить доступ к свойству value в объекте key, что явно недопустимо, поскольку key не является объектом.

0 голосов
/ 12 февраля 2010

Переменная, на которую вы ссылаетесь для списка стран, имеет неправильное название:

echo generateForm ($lang,$country_list);

должно быть

echo generateForm ($lang,$country_main);

как это определено в country_list.php.

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