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, защото функцията за изобразяване извежда стойностите на ID вместо етикета към опциите.

Нещо подобно трябва да направи това, от което се нуждаете:

  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