如何保护HTML表单不被空白提交

时间:2018-06-25 10:15:52

标签: javascript php html

基本上我正在使用本教程:HTML FORM

一切正常,但我发现一个流程是,每个人都可以看到URL的{​​{1}},在这种情况下为“ url:“ contact_mail.php”” 当有人键入.php并按Enter时,是否可以保护表单免于空白提交。 示例:www.mywebsite.com/contact_mail.php

谢谢!

5 个答案:

答案 0 :(得分:4)

首先,您可以在客户端的必填字段上使用required属性:

<input type="text" name="mandatory_field" required>

但是如果用户修改了表单,您将需要验证服务器端。您可以在任何变量($_POST$_GET)上使用empty()

if (empty($_POST['mandatory_field'])) {
    // print error message or redirect to form page
}

您可以使用isset()来验证是否提交了字段。您的验证可能是:

if (!isset($_POST['mandatory_field']) || empty($_POST['mandatory_field'])) {
    // print error message or redirect to form page
}

其他情况:
如果所有字段都是必填字段,则可以使用in_array()进行检查:

if (in_array(false, $_POST)) {
    // print error message or redirect to form page
}

如果要进行各种数据验证,这就是我用来处理表单的方法:

$errors = [
    'empty field'           => empty($_POST['field']),
    'another error message' => $another_condition
];

if (in_array(true, $errors)) {
    $error_message = array_search(true, $errors);
    // print or redirect, and you can tell the user what is wrong
}

答案 1 :(得分:2)

假设您具有以下表格;

<form action="savething.php" method="GET" name="mythingform">
    <input name="thing1" type="text" />
    <input name="thing2" type="text" />
    <input type="button" value="Submit" onclick="validateAndSubmit()" />
</form>

在此,我使用了一个按钮来代替提交类型输入。这意味着,页面提交之前需要进行一些操作,例如;

<script>
    function validateAndSubmit()
    {
        var thing1 = document.getElementsByName("thing1")[0];
        var thing2 = document.getElementsByName("thing2")[0];

        if (thing1.value.length > 0 && thing2.value.length > 0)
        {
            document.forms["mythingform"].submit();
        }
    }
</script>

此处的JavaScript函数仅在输入不为空时才调用表单上的提交

在阻止某人未经允许的情况下访问它;

<?php
if (!isset($_REQUEST['myvariable'] || empty($_REQUEST['myvariable']))
    die("Please make sure the form has been submitted properly with all required information");

在此使用die,将进一步终止脚本的执行,您也可以使用exit,并且两者都允许您在停止过程中附加“终止消息”

$_REQUEST不是最安全的选项,但它允许您使用表单中的GET或POST方法来检索和使用数据

答案 2 :(得分:0)

您可以使用Java脚本验证或jquery验证验证来提交空白表单,也可以使用php验证来避免空白表单提交。

核心js验证

简单的例子:

   var x = document.forms["myForm"]["fname"].value;
   if (x == "") {
      alert("Name must be filled out");
      return false;
   }

jquery验证

验证库 https://jqueryvalidation.org/documentation/

示例:

$("#myform").validate({
     submitHandler: function(form) {
     // some other code
     // maybe disabling submit button
     // then:
     $(form).submit();
   }
  });

希望对您有帮助。

答案 3 :(得分:0)

(1)不应有人在浏览器中“仅输入” URL的危险-后端代码应该仅响应POST,而不响应GET(在浏览器中输入URL会使它发出GET请求提供给定的网址。

(2)引用的示例代码已经包含客户端验证(包括对空字段的检查),因此,如果有人合法使用您的输入表单,则他们将无法发送空白表单。

(3)剩下的一切就是保护后端代码免于意外或恶意张贴空表格(以及任何其他不受欢迎的用途)。示例PHP代码没有任何检查,您应该添加一些检查-如此处另一个答案中建议的isset(...)empty()检查)。

答案 4 :(得分:-2)

使用if(空($ _POST ['your_field']))

因此,如果发布或获取查询到达您的php脚本,则empty将检查该字段是否为空。

是这样的:

if (empty($_POST['your_field'])) {
    echo 'Field xxx should not be empty';
}

尽管最好使用isset,因为如果仅访问链接,则POST和GET变量为空。 因此,这样的事情有点简单:

if (!isset($_POST['your_field']) || empty($_POST['your_field'])) {
    echo 'Field xxx should not be empty';
}

我认为我不需要单独的GET代码,但是可以。

if (!isset($_GET['your_field']) || empty($_GET['your_field'])) {
    echo 'Field xxx should not be empty';
}