【问题标题】:What would be a good way to trigger an action (db search / db changes) by an html form?什么是通过 html 表单触发操作(数据库搜索/数据库更改)的好方法?
【发布时间】:2013-12-04 16:06:33
【问题描述】:

我通过 html 表单触发了两种不同类型的操作:

  1. db 搜索(例如 searchUser)
  2. 数据库更改(例如 createNewUser、updateUserData)

现在有不同的方式来触发动作

2.1 - 将操作参数放入查询字符串

<form action="index.php?page_id=xx&user_id=yy&action=updateUserData" method="post">
  <input ... />
</form>

2.2 - 创建一个名为 action 的输入字段

<form action="index.php?page_id=xx&user_id=yy" method="post">
  <input name="action" value="updateUserData" type="hidden" />
  <input ... />
</form>

(对于搜索表单这两种不同的方式无关紧要,因为那里我使用method="get")

现在我的问题是:2.1 或 2.2 哪个更好

我倾向于 2.2,因为我不希望 URL 触发操作(例如书签、链接)

【问题讨论】:

    标签: php html forms http-post http-get


    【解决方案1】:

    因为在这两种情况下您都使用 method=post,所以请使用版本 2。

    1. URL 有一个最大长度,您可能会遇到许多参数(几千个字符)
    2. 使用 javascript(jQuery 等)更容易操作列表输入字段
    3. 普通用户看不到所有那些丑陋的 URL

    请记住:隐藏字段是隐藏的,但访问它们只需几秒钟。所以永远不要相信用户数据,总是逃避你的数据。 “因为我不希望 URL 触发操作” 始终假设所有用户都是邪恶的。如果此链接可能造成损坏,那么表单也可能会造成损坏。使用一些身份验证。

    【讨论】:

      【解决方案2】:

      如果不想通过 URL 触发事件,2.2 会更好。

          if(isset($_POST['action'])){ //If form has been submitted
      
              $userid=$_POST['userid'];
      
              //Rest of code to add user
      
          }else{
      
             //Form not submitted
      
          }
      

      【讨论】:

      • 我之所以把page_id和user_id放到查询字符串中是因为我平时就是这样访问页面的
      • 使用index.php?page_id=xx&amp;user_id=yyindex.php完全取决于OP的要求。
      • 糟糕透了。认为这是与 GET 方法相同的代码。应该先检查!对不起!
      猜你喜欢
      • 2012-02-28
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 2020-08-18
      • 1970-01-01
      相关资源
      最近更新 更多