【问题标题】:Dynamically Hide Form Fields动态隐藏表单字段
【发布时间】:2012-03-09 16:59:40
【问题描述】:

我有一个包含以下字段的“用户个人资料”表单:

<form>
    First Name: <input id="first_name" />
    Last Name: <input id="last_name" />
    Phone Number: <input id="phone_number" />
    City:   <input id="city" />
</form>

但是,如果我不想让选定的一组用户看到“电话号码”和“城市”怎么办?

我怎样才能动态隐藏这些字段,例如,根据哪个用户登录?我目前正在使用 PHP 和 MySQL。最好将“字段ID”添加到数据库中,然后查询数据库记录以查看哪些字段应该隐藏,哪些字段应该可见?或者有更好的方法吗?

如果这有点模棱两可,我深表歉意。如果没有意义,我可以尝试澄清。

非常感谢。

编辑:我想澄清我想要实现的目标。我试图根据用户登录动态显示字段。另外,当我说“隐藏”时,我实际上应该说“删除”。请参阅下面的示例

例如,

如果JoeUser 登录,他会看到:

<form>
    First Name: <input id="first_name" />
    Last Name: <input id="last_name" />
    Phone Number: <input id="phone_number" />
    City:   <input id="city" />
</form>

但是,如果JaneUser 登录,她会看到(基于数据库中设置的首选项):

<form>
    First Name: <input id="first_name" />
    Last Name: <input id="last_name" />
</form>

我的问题是:实现这一目标的最佳方法是什么?我假设这些首选项需要由数据库驱动。任何输入都会很棒。

【问题讨论】:

  • 我会将文本和输入字段包装在带有 id 的标签元素中。这不仅提高了可访问性,而且让您可以控制整个文本/输入以显示/隐藏。

标签: php mysql forms input field


【解决方案1】:

根据您构建网站的方式,有很多方法可以做到这一点,但由于您是 PHP 新手,我假设它只是一个内联程序脚本。在这种情况下,您需要检查是否在会话中设置了用户,然后根据输出显示或隐藏。

类似下面的东西

<?php if(isset($_SESSION['id'])) : ?>

<form>
    First Name: <input id="first_name" />
    Last Name: <input id="last_name" />
    Phone Number: <input id="phone_number" />
    City:   <input id="city" />
</form>

<?php endif; ?>

if 语句检查是否设置了会话 ID(这可能会根据您处理用户会话等的方式而改变),然后显示表单。

编辑: 刚刚注意到您已经编辑了原始问题。为此,您可以使用类似于以下内容的方法,这再次假设您正在使用会话,并且您在会话中设置了 users 用户类型(不是很好,但对于初学者来说很快)。

<?php if(isset($_SESSION['id'])) : ?>

    <form>
        First Name: <input id="first_name" />
        Last Name: <input id="last_name" />
    </form>

<?php else if(isset($_SESSION['id']) && (isset($_SESSION['user_type']) && $_SESSION['user_type'] == 'phoneuser')) : ?>

    <form>
        First Name: <input id="first_name" />
        Last Name: <input id="last_name" />
        Phone Number: <input id="phone_number" />
        City:   <input id="city" />
    </form>
<?php endif; ?>

【讨论】:

    【解决方案2】:

    您可以在php文件中的服务器端隐藏或尝试通过php为js设置变量并通过javascript在客户端对字段进行操作。 你能解释一下你想用这些表格做什么吗?没看懂

    【讨论】:

      【解决方案3】:

      1) 你应该使用 jQuery (不要忘记include 这个库到 head 部分)。

      $('#hide_name').click(function() {
        $('#first_name').hide('slow', function() {
        });
      });
      
      First Name: <input type="text" id="first_name" /> <a href="#" id="hide_name" /> Hide name </a>
      

      2) 或 下一步

      if ($_SESSION['login']) {
        $visible = "visibility: visible;";
      }
      else {
        $visible = "visibility: hidden;";
      }
      
      First Name: <input type="text" style=<?php echo $visible; ?> />
      

      3) 或最简单的方法

      if ($_SESSION['login']) {
        First Name: <input type="text" id="first_name" />
      }
      

      【讨论】:

      • 这将留下文本但隐藏表单字段。
      【解决方案4】:

      您需要存储某种类型的数据来定义用户看到什么,或者他们没有看到什么。根据您的数据选择任何感觉直观的东西。一旦您知道用户已登录,获取有关向他们显示什么的数据。您可以基于此创建一个布尔值数组,我们称之为 form_fields[]。然后用PHP输出表单,根据这个数据决定显示哪些部分,可能是这样的:

      $form = "<form>\n";
      if(form_fields['first_name'])
      {
          $form .= 'First Name: <input id="first_name" />';
      }
      if(form_fields['last_name'])
      {
          $form .= 'Last Name: <input id="last_name" />';
      }
      if(form_fields['phone'])
      {
          $form .= 'Phone Number: <input id="phone_number" />';
      }
      if(form_fields['city'])
      {
          $form .= 'City:   <input id="city" />';
      }
      
      $form .= "</form>";
      

      请记住,验证您的数据也变得更加复杂 - 您的表单处理脚本还需要知道它正在寻找哪些字段。

      【讨论】:

      • form_fields['first_name'], form_fields['last_name'], ... 插入 ' 好吗?
      猜你喜欢
      • 1970-01-01
      • 2010-11-18
      • 2013-02-14
      • 1970-01-01
      • 2013-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-22
      相关资源
      最近更新 更多