PHP выбирает вариант выбора при перезагрузке

У меня есть эта форма с 2 selext в коробке. со всеми пунктами меню с веб-страницы, загруженной из базы данных, и всеми текущими 3 языками.

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

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

Вот форма, объекты, которые вы видите, взяты из отдельных файлов, которые собирают элементы меню и языковые элементы.

<form style="border: 1px solid black; " name="form" method="post" action="">
Content selecteren om te wijzigen:
    <table>
        <td>
            <tr>
                <td width="78">Menu item:</td>
                <td><select name="Menu" onchange="this.form.submit()">' . $this->MenuItems->render() . '</select></td>
            </tr><br>

            <tr>
                <td width="78">Taal:</td>
                <td><select name="Language" onchange="this.form.submit()">' . $this->LanguageItems->render() . '</select></td>
            </tr>

            <tr>
                <td>Menu Item:</td>
                <td width="78"><input name="MenuItemTextBox" type="text" id="MenuItemTextBox" value="' . $_POST['Menu'] . '"></td><br>
            </tr>
            <tr>
                <td>content</td>
                <td><TEXTAREA style="" Name="content" id="NewContent" ROWS=10 COLS=50>' . $this->GetContent->render() . '</TEXTAREA></td>   
            </tr>

            <tr>
                <td><input type="submit" name="Submit" value="Wijzigen"></td>
            </tr>

        </td>
    </table>
</form>

и это код, в котором я получаю пункты меню из базы данных и проверяю, совпадает ли сообщение с пунктом меню, через который он проходит. Если сообщение (сообщение, созданное из окна выбора) и пункт меню совпадают, «выбранный» элемент html вставляется в параметр html.

class MenuItems extends content_part{

private $menuLabels = array();
private $menuIDs = array();

 public function __construct(DatabaseHandler $dbh)
{
  if(!isset($_POST['Language'])){
    $_POST['Language'] = 1;
  }

  $SQL = "SELECT menulanguage.Label AS Label, menulanguage.Title AS Title, menulanguage.MenuID AS MenuID FROM Menu JOIN menulanguage ON Menu.MenuID = menulanguage.MenuID WHERE LanguageID = 1;";
  $resultDB = $dbh->executeQuery($SQL);

  if(is_object($resultDB)){
    while($row = $resultDB->fetch(PDO::FETCH_ASSOC)){
      $this->menuLabels[] = $row["Label"];
      $this->menuIDs[] = $row["MenuID"];
    }
  }

  else{echo 'Could not retrieve menu items from database'; }
}

public function render(){
  $Selected = '';
  $result = '';
  $i = 0;

  foreach($this->menuLabels as $menuLabel){
    if (isset($_POST['Menu'])){
      if($menuLabel == $_POST['Menu']){ $Selected = 'selected'; }
      else {}
    }
      $result .= '<option value="' . $this->menuIDs[$i] . '"' . $Selected . '>' . $menuLabel . '</option>';
      $i++;
  }

  return $result;
}}

Я видел несколько одинаковых вопросов, но я действительно не мог получить ответ.

Это опция после того, как она будет заполнена элементами меню,

<option value="1">Home</option>
<option value="2">Contactus</option>

Как вы можете видеть, «выбранный» html не заполняет его, то есть он не может найти значение POST из формы, почему это так?


person Rien    schedule 15.04.2014    source источник
comment
Не могли бы вы вставить HTML-код второго раскрывающегося списка после его заполнения?   -  person AyB    schedule 15.04.2014
comment
Я отредактировал свой пост, я думаю, это то, что вы спросили.   -  person Rien    schedule 15.04.2014
comment
Ваши первые раскрывающиеся значения выглядят как <option value="Home"><option value="Contactus"> и т. д.?   -  person AyB    schedule 15.04.2014


Ответы (1)


Вам нужно изменить:

if($menuLabel == $_POST['Menu']){ $Selected = 'selected'; }

быть $menuId вместо $menuLabel, потому что функция рендеринга выводит значения идентификатора вместо метки для параметров.

Что-то вроде этого должно делать то, что вам нужно:

  foreach($this->menuIDs as $menuID){
    if (isset($_POST['Menu'])){
      if($menuID== $_POST['Menu']){ $Selected = 'selected'; }
      else {}
    }
      $result .= '<option value="' . $this->menuIDs[$i] . '"' . $Selected . '>' . $menuLabel . '</option>';
      $i++;
  }
person Menztrual    schedule 15.04.2014
comment
Большое спасибо, теперь у меня все работает идеально. Мне пришлось внести несколько изменений, но он работает идеально. - person Rien; 15.04.2014