【问题标题】:Send "Button"-ID on Submit提交时发送“按钮”-ID
【发布时间】:2016-12-29 21:18:34
【问题描述】:

我有一个 PHP 页面,其中包含一个带有一些不同输入字段的表单,例如。 G。日、月、年等。表单方法为 POST,通过 GET 仅发送一个不可编辑字段(用户 ID)。 当然,还有一个“提交”按钮,它会触发表单 Action (PHP Script on Server)。
表单标签也包含一个带有空单元格的表格。现在是我的问题:

如果用户单击表格单元格之一,则应提交表单,但除了常规表单数据之外,还应传输表格单元格的 ID(如果通过 POST 或 GET 对我来说无关紧要) .我该怎么做?

//编辑2:

...
<form method="post" action="<?= DOMAIN?>/.../addUserTimetable.php?uid=<?= $user->getUserID() ?>">
  <select id="day" name="day">
    ...
  </select>
  ...
  <input name="yearend" id="yearend" ...>
  <button type="submit">...</button>
  <table class="bordered">
    <tr>
      <th>Std.</th>
      <th>Montag</th>
      <th>Dienstag</th>
      <th>Mittwoch</th>
      <th>Donnerstag</th>
      <th>Freitag</th>
    </tr>
    <?php 
      for($i=1; $i<13;$i++) {
        echo "<tr>";
        echo "<th>".$i. "</th>";
        for($j=1;$j<6;$j++) {
          echo "<td id='h".$i. "d".$j. "' onclick='???'></td>";
        }
        echo "</tr>";
      }
    ?>
  </table>
</form>
...

服务器端的流程很好,但我没有任何想法——即使在谷歌搜索了两个小时后——如何额外传输单元格 ID。

【问题讨论】:

  • 你能说得具体一点吗?
  • @Akshay 我试过 ;) 已编辑。
  • 你能告诉我们你的代码吗?
  • 您希望表单在用户单击表格单元格时直接发送(就像它是一个按钮一样)还是您仍然希望用户必须单击提交按钮?
  • @Christoffer 当然,添加了 sn-p。单击单元格后,用户将被引导到一个页面,他在其中编辑单元格内容,该页面已编写并且可以正常工作。但是为了不丢失其他输入数据,当用户单击单元格时,必须已经发送表单。单击时,应完成表单提交操作,然后打开单元格编辑操作。

标签: php forms html-table cell


【解决方案1】:

这应该不难。看看下面的例子:

<form>
    <input type="text" name="something">

    <table>
       <tr>
          <td><input type="submit" name="cel1">
       </tr>
       <tr>
          <td><input type="submit" name="cel2">
       </tr>
       <tr>
          <td><input type="submit" name="cel13">
       </tr>
    </table>

    <input type="submit" value="save"> 
</form>

通过为表格单元格中的提交按钮提供名称属性,该名称也将作为键出现在$_REQUEST 上。继续,var_dump $_REQUEST,你会看到你可以在后端通过检查哪个键存在来找出哪个按钮被按下。

请注意 POST / GET 在这里完全无关紧要,两者的工作方式相同。显然,您可以对这些按钮应用一些 css 以使它们透明并将它们放置在表格单元格的顶部,因此它们看起来不像按钮,而只是“捕获”用户的点击。

最后一点,您确定要将用户 ID 作为 GET 参数发送吗?这对于有恶意的人来说很容易操纵。考虑根本不发送 ID,而是将其保存在服务器上的会话中。

【讨论】:

  • 感谢您的回答。是的,将用户 ID 作为 get 发送似乎不安全,但并非如此。在表单操作中,检查登录用户的权限。允许某些用户更改其他用户的时间表。
  • 忘了说:uid不是编辑用户的ID,而是添加时间表的用户的ID。
  • 是的,我已经从你的更新中得到了。那时您可能已经保存了(我想这仅适用于经过身份验证的用户)。只是想在那里发出一点警告。你在互联网上看到的东西......
  • 您的回答似乎有效。现在,在服务器脚本中,我不想检查 POST 是否有任何可能的组合,因为未来时间表的长度应该会有所不同。如何检查 POST 是否有任何已发送的变量,不包括我已经检查过的变量(通过字段名称,这些字段是 post_required)。
  • array_diff(array_keys($_REQUEST), ["the", "keys", "that", "are", "always", "present"])
猜你喜欢
  • 1970-01-01
  • 2013-08-06
  • 2014-04-30
  • 2018-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-17
相关资源
最近更新 更多