【问题标题】:PHP select the selection option when reloadingPHP在重新加载时选择选择选项
【发布时间】:2014-04-15 09:56:09
【问题描述】:

我有这个带有 2 个 selext 盒装的表格。包含从数据库加载的网页中的所有菜单项以及所有当前的 3 种语言。

当我从任何选择框中更改选项时,它应该使用 selectbxo 中的值重新加载,并且应该根据菜单项和文本进行查询以获取 textare 中的内容。

这部分工作,内容变化完美,但他不记得选择的选项,我不知道为什么。

这是表单,您看到的对象来自收集菜单项和语言项的单独文件。

<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 值,这是为什么呢?

【问题讨论】:

  • 你能在第二个下拉列表填充后粘贴 HTML 吗?
  • 我编辑了我的帖子,我想这是你问的。
  • 您的第一个下拉值是否类似于&lt;option value="Home"&gt;&lt;option value="Contactus"&gt; 等?

标签: php object select post option


【解决方案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++;
  }

【讨论】:

  • 非常感谢,我现在可以完美运行了。我不得不做一些改变,但它的工作完美。
猜你喜欢
  • 1970-01-01
  • 2014-11-18
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
相关资源
最近更新 更多