【问题标题】:How can I make form after certain time non-submitable? [closed]如何在一定时间后使表格不可提交? [关闭]
【发布时间】:2012-10-15 15:15:20
【问题描述】:

基本上我所拥有的是某种形式:

<?php

require 'inc/conn.php'; 

$sql="INSERT INTO objednavky ( kdo, kdy, m1, mm1, m2, mm2, m3, mm3 )
VALUES
('$_POST[tkdo]','$_POST[thed]','$_POST[obb1]','$_POST[tmm1]',
'$_POST[obb2]','$_POST[tmm2]','$_POST[obb3]','$_POST[tmm3]')";

if (!mysql_query($sql,$con))
{
  die('Error: ' . mysql_error());
}

header('Location: http://www.juxcore.com/x/vita/protected.php');

mysql_close($con);

我需要将表单设为不可提交,以防万一是星期四,而您可以提交的最后时刻是星期三晚上 18 点。感谢您的帮助

【问题讨论】:

  • 您使用的是an obsolete database API,应该使用modern replacement。您还将自己暴露在 SQL injection attacks 中,现代 API 可以让您更轻松地从 defend 中访问自己。
  • 到目前为止你有没有尝试过?
  • 所以当收到表格时,检查它是否已经过了某个时间,如果是,请不要插入数据库...尝试过类似的方法吗?

标签: php mysql forms mysqli


【解决方案1】:

看来您的问题实际上是 HTML/Javascript 问题,而不是 PHP/SQL。

因为乍一看我会说用 Javascript 更改 HTML,这样他们就无法提交表单。

document.getElementById("myform").action = "";

... 会阻止提交。有很多方法,包括将form 切换为div

document.getElementById("myform").setAttribute("type","div");

或者,从显示中删除提交按钮,这样他们就不能点击它:

document.getElementById("mysubmit").style.display="none";

编辑:哦,我完全忘记了明显的方法,使用表单验证。这样他们就不能停在 URL 上,直到星期三之后仍然以 HTML 形式提交

<form ... onsubmit="return validateForm()">

只需编写javascript函数validateForm(类似于下面的php)返回false即可取消提交。我不喜欢提供 w3school 链接,但这是一个很好的干净示例:http://www.w3schools.com/js/js_form_validation.asp

无论如何,还有很多方法。只需在正确的日子做哪一个,使用 javascript 的 new Date().getDay()new Date().getHours() 来确定时间。

(这也是更改元素属性的两种主要方法的示例)。

我想这不会阻止他们直接从地址行提交,如果您需要编辑 PHP,请使用 Date() 对象:

$day = Date("w");
if ( $day == 4 || $day == 5 ) {
    $time = Date("G");
    if ( $day != 5 || $time < 18 ) {
        if (!mysql_query($sql,$con)) die('Error: ' . mysql_error());
    }
}

我建议两者都做,一种 HTML/Javascript 方式,使用服务器内置的相同控件来控制它。

【讨论】:

    【解决方案2】:

    您可以在视图中附加一些 JS,使表单不可提交。

    我的想法是:

    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
    <script type="text/javascript">
    $(document).ready(function(){
        <?php if($currentDay < $dontSubmitFormDay):?>
             $('#myForm').submit(function(){
                  return false;
             });
        <?php endif;?>
    });
    </script>
    

    【讨论】:

    • 通过在客户端上容易禁用的东西进行验证并不完全安全。
    【解决方案3】:

    您需要获取当天星期三下午 6 点的 timestamp。然后每次用户提交表单时,获取该确切时间的timestamp并进行比较:

    如果(时间现在

    【讨论】:

      【解决方案4】:

      首先不要回复客户端(浏览器)时钟。如果最终用户愿意,这可能会被捏造。而是使用 PHP 创建一个会话,并将日期/时间标记为可以提交表单的最后日期/时间。收到该表格后,使用服务器日期/时间(最终用户无法伪造的日期/时间)进行检查。

      通过这种方式,您可以绝对确定不会阻碍不提交表单的更多安全性。

      但是您可以使用 Javascript 来改善用户体验,但不要回复客户端的日期/时间以保护您的数据库。

      【讨论】:

        猜你喜欢
        • 2017-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多