qinrui
V2EX  ›  PHP

原来 isset($_POST) 永远是真值,!empty($_POST)才可以判断,坑人啊

  •  
  •   qinrui · Oct 28, 2022 via iPhone · 4610 views
    This topic created in 1475 days ago, the information mentioned may be changed or developed.

    isset 判断 POST 没啥意义啊,但网上好多代码都是这么写的

    25 replies  •  2022-11-23 00:14:01 +08:00
    mrpzx001
    mrpzx001
    Oct 28, 2022
    1
    这不是常识?
    yuzo555
    yuzo555
    Oct 28, 2022❤️1
    2
    正常不是该用 $_SERVER['REQUEST_METHOD'] 判断?
    fairless
    fairless
    Oct 28, 2022
    3
    一般判断某个字段是否存在采用 issset($_POST['xxxx']),而且现在大部分都是从框架 request 对象获取表单了
    qqjt
    qqjt
    Oct 28, 2022
    4
    上框架吧,laravel 走起,少去踩老坑了,没意义
    frank553000
    frank553000
    Oct 28, 2022
    5
    请问用框架做的各位,
    假如做一般的企业网站(有产品,产品筛选等,或者以后加支付等)这类功能的。
    后台功能都要自己写吗?还是拿开源的改一下?
    fiypig
    fiypig
    Oct 28, 2022
    6
    我还是习惯!empty()解决一切烦恼
    00ing
    00ing
    Oct 28, 2022
    7
    php 基础有待提高
    minbaby
    minbaby
    Oct 28, 2022
    8
    如果不在 fpm 里执行 php 代码, $_POST 就不一定存在
    getcodex
    getcodex
    Oct 28, 2022
    9
    isset 和 empty 是两回事呀
    liaohongxing
    liaohongxing
    Oct 28, 2022
    10
    $_POST 超级变量永远是一个 array, 表单有值自动填充到这个 array ,没值是一个空 array , 空 array 满足 isset 的情况。
    hahasong
    hahasong
    Oct 28, 2022
    11
    上手 PHP 要求这么低吗 这种问题文档里难道没有
    liaohongxing
    liaohongxing
    Oct 28, 2022
    12
    @hahasong
    文档有说明 :

    https://www.php.net/manual/zh/function.isset.php
    判断一个变量是否已设置, 即变量已被声明,且其值不为 null 。

    https://www.php.net/manual/zh/function.empty
    判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于 false ,那么它会被认为不存在。如果变量不存在的话,empty()并不会产生警告。

    就楼主太菜。
    qinrui
    qinrui
    OP
    Oct 28, 2022 via iPhone
    13
    @liaohongxing 即使不往页面 post 数据,isset ($_post [])仍然是真
    MIUIOS
    MIUIOS
    Oct 28, 2022
    14
    这哪里是坑,是你没去文档和好好了解 PHP 的底层,很多程序都是直接取$_POST ,那如果没有默认定义为 array ,那到时得一堆报错,坑更多
    wonderfulcxm
    wonderfulcxm
    Oct 28, 2022 via iPhone
    15
    …我竟无言以对,明明是你基础有问题
    iwh718
    iwh718
    Oct 28, 2022 via Android
    16
    这就离谱。。。这正常吧。
    xinshoushanglu
    xinshoushanglu
    Oct 28, 2022
    17
    你是第一天用 php 吗?
    liaohongxing
    liaohongxing
    Oct 28, 2022
    18
    @qinrui

    isset 在其他语言就是判断内存有无分配。 空 array 就是内存已分配,但是分配了一个空的 hashmap, 里面没数据而已。
    isset 判断一个空 array 就是 true 。而$_POST 就是一个特殊的空 array , 永远已分配 。判断这个肯定总是 true
    mht
    mht
    Oct 28, 2022
    20
    我也不认为这个是坑。。。isset 表面意思就是这个变量是否设置了,empty 是判断变量是不是 PHP 的意义上的空。。。
    eviladan0s
    eviladan0s
    Oct 29, 2022
    21
    isset($_POST['test'])这种才行,超全局遍历肯定是一直存在的
    jhdxr
    jhdxr
    Oct 30, 2022
    22
    @qinrui
    https://www.php.net/manual/en/reserved.variables.post.php
    > This is a 'superglobal', or automatic global, variable. This simply means that it is available in all scopes throughout a script.

    https://www.w3schools.com/php/php_superglobals_post.asp
    > Super global variables are built-in variables that are always available in all scopes.

    不知道你觉得『不往页面 post 数据』$_POST 就不存在的想法是哪来的(还是说你不知道 isset 判断的不是是否为空而是变量是否存在)?
    NewYear
    NewYear
    Oct 31, 2022
    23
    面向复制编程,也应该做一些测试的。

    很多分享的代码,都是错代码,而且错得让人不明所以……
    NewYear
    NewYear
    Oct 31, 2022
    24
    我甚至遇到过,代码都是对的,但是有一句语句放错了位置,调整好位置就可以用了……
    liKeYunKeji
    liKeYunKeji
    Nov 23, 2022 via iPhone
    25
    empty($_POST["xxx"]) || isset($_POST["xxx"])

    我喜欢双重判断,总有一个中招
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4903 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 92ms · UTC 03:20 · PVG 11:20 · LAX 19:20 · JFK 22:20
    ♥ Do have faith in what you're doing.