html - 检查 HTML 表单复选框等是否已 POST 设置的正确和最安全的方法是什么?

标签 html php

这让我从一开始就很困惑。也许这只是在我的脑海中,但在我看来,这似乎随着时间、浏览器之间,甚至可能取决于本地语言/地区而有所不同。

基本上,每当我需要检查是否设置了“radio”或“checkbox”类型的 HTML 输入时,我总是这样做:

if (isset($_POST['the_name']) && trim($_POST['the_name']))
    // do stuff

这只是确保 POST 变量被发送(这本身并不意味着它实际上被检查/选择,据我所知,因为它的“值”可以是一个空字符串)并且它是其他东西比 '' (空字符串)。这似乎已经工作了很长时间,但我有两个问题:
  • 它很丑。我需要将它抽象为一个函数,但是我想知道这首先是一个好主意,还是某种错误。
  • 它假设任何非空字符串值都意味着“已检查”或“已选择”,而标准可能会说特定的字符串值,例如“on”,或者可能是任意数量的此类字符串,具体取决于语言/语言环境。

  • 有没有我上面的代码崩溃的情况?浏览器是否曾经提交 POST 表单,其中包含在 HTTP 请求中没有用户输入/选择的名称?或者 POST blob 中存在名称是否意味着该“字段”已被主动更改/设置/检查/选择?

    最佳答案

    复选框背后的想法是,只有在提交表单时选中了复选框,才会将值发送到服务器。值可以是任何东西,甚至是空字符串。只要该字段是传输表单的一部分,就意味着该框已被勾选。

    The value attribute is one which all <input>s share; however, it serves a special purpose for inputs of type checkbox: when a form is submitted, only checkboxes which are currently checked are submitted to the server, and the reported value is the value of the value attribute. If the value is not otherwise specified, it is the string on by default.



    这意味着你可以有一个这样的表格:
    <form action="" method="get">
    <input type="checkbox" name="c1" value="">
    <input type="submit" value="Send">
    </form>
    

    如果复选框是 不是 提交时检查然后$_GET将是一个空数组。
    如果复选框被选中,则 $_GET 的值将会:
    array('c1' => '');
    

    要检查您发送表格时是否勾选了该框只有需要isset()
    if (isset($_POST['c1']) {
        // The box was checked!
    }
    

    有时您想分配一个 value属性到您的复选框。在这种情况下,您可以使用 isset() 的简写运算符。功能 ?? .
    // Create a variable from the checkbox value or assign an empty string if the box was not checked
    $nyCheckbox = $_POST['c1'] ?? '';
    

    关于html - 检查 HTML 表单复选框等是否已 POST 设置的正确和最安全的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59495513/

    相关文章:

    javascript - 非 Microsoft 浏览器 - 如何获取失败的错误代码?

    javascript - Jquery .html 不删除元素内容

    html - CSS类问题

    php - 如何检测关闭 php 标签?

    javascript - 当我尝试切换复选框时值不会改变

    php - bindParam 和 execute(array) 有什么区别?

    php - 安全上传并在 codeigniter 3 中显示图像或文件

    php Y-m-d 添加 H :i:s

    javascript - 打印值前的空白(红点)

    php - Bootstrap 输入类型 ="number"不执行任何操作