【问题标题】:How to create a new page on form submit?如何在表单提交上创建一个新页面?
【发布时间】:2017-09-21 19:03:13
【问题描述】:

每次提交表单时,我都会尝试创建一个新页面。这将是一个订单状态页面——一个会定期更新的页面。基本上,我希望用户看到一个表单确认页面,并且我希望它是永久链接(他们可以稍后访问)。

我的第一个想法是在 URL 中使用变量,如下所示:

http://www.example.org/member.php?id=123

然后使用GET调用id

echo $_GET['id'];

http://www.example.org/member.php 将是一个模板,只是等待一些特定于用户的细节。 一旦我有了这个,我可以使用一个简单的if 语句来检查他们的订单状态。

例如,

if ($id === "user_id") {
   echo "Your order is: Pending";
}

但是,这似乎是个坏主意,只是出于安全方面的考虑。如果其他人猜到了用户 ID,他们可以查看他们的订单状态。离开那个,这是我的第一个问题。

如果用户 ID 足够长,这是一种安全的做法吗?

否则,还有哪些其他方法可以做到这一点?每次提交表单时都创建一个新页面感觉像是一种不好的做法——人们可能会向它发送垃圾邮件,并且有人可能会利用它在网站上创建恶意页面。

有什么建议吗?大多数主要零售网站都有订单确认页面(想想 ebay.com)——他们是怎么做到的?另外,我建议的 URL 格式安全吗?

【问题讨论】:

  • 嗯...登录,使用您建议的模板?如果用户已登录,并且 URL 中的 ID 是与该用户关联的订单,则显示该订单。如果没有,只需重定向或显示错误消息。在没有登录的情况下这样做是不好的做法,是的。

标签: javascript php html forms


【解决方案1】:

最理想的情况是您在提交表单之前强制用户登录,然后向他们提供他们过去订单的列表,如果订单的 user_id 与登录会话中的 id 匹配,他们可以检查其状态在用户中。为列表中的每个订单提供一个链接,例如 yoursite.com/orders/1,然后查询 ID 为 1 且 user_id 与登录用户 ID 匹配的订单,以确保只有他们可以查看。

如果您不想执行任何操作,只需提供指向状态页面的永久链接,我会针对订单保存一个随机生成的长字符串,并将其提供给用户以供日后查看,例如

yoursite.com/orders/wUk1DhfxMh 如果您使用的是带有一些路由的框架 或 yoursite.com/orders.php?code=wUk1DhfxMh 如果您不是。

查询数据库以选择具有匹配代码的订单,确保防止 MySQL 注入并清理 $_GET 输入。

【讨论】:

    【解决方案2】:

    您确定需要创建一个新页面吗? 你可以有一个基本的“确认”页面(例如http://yoursite.com/order/confirm),使用 PHP 会话来创建一个自定义的确认页面—— 除此之外,如果您创建一个新页面,您应该在 URL 中使用 ID,并且还要检查会话 ID。 (例如http://yoursite.com/order/confirm/ABsisnEALnsoSK?yyyy=xxxx),然后还检查用户是否已登录。

    最后,cymath 有一个很好的异步页面创建示例;虽然它不是您正在寻找的。
    编辑:这不是页面创建,就像我之前说的那样:在 url 中有额外参数的一个页面:一个永久链接,只使用 PHP。

    【讨论】:

      【解决方案3】:

      我了解到您对如何制作您的应用程序的算法有一些疑问,这是我对这个案例的看法:

      1. Insert 数据库中的订单,获取插入的 id 并将其提供给用户。
      2. 设置用户检查状态的页面接收$_GET['id'],检查(SELECT)如果这个id存在于数据库中。
      3. (如果用户存在):从表中获取你需要的信息 你存储它们。 (FETCH_ASSOCFETCH_OBJECT
      4. (如果用户不存在):显示错误。

      如果您对如何编写代码有疑问,CodeSchool 本周末将为所有课程提供免费试用。

      如果用户 ID 足够长,这是一种安全的做法吗?

      R:为了提高交易的安全性,试着了解/了解 PDO 类,我认为如果你聚合一些良好实践和设计模式,它会让你的代码更上一层楼。

      欲了解更多信息,请访问PHP's Documentation

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-26
        • 2018-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-06
        • 1970-01-01
        相关资源
        最近更新 更多