V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qinrui
V2EX  ›  PHP

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

  •  
  •   qinrui · 2022-10-28 16:44:56 +08:00 via iPhone · 2944 次点击
    这是一个创建于 764 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    isset 在其他语言就是判断内存有无分配。 空 array 就是内存已分配,但是分配了一个空的 hashmap, 里面没数据而已。
    isset 判断一个空 array 就是 true 。而$_POST 就是一个特殊的空 array , 永远已分配 。判断这个肯定总是 true
    jfcherng
        19
    jfcherng  
       2022-10-28 20:52:59 +08:00
    mht
        20
    mht  
       2022-10-28 21:40:51 +08:00
    我也不认为这个是坑。。。isset 表面意思就是这个变量是否设置了,empty 是判断变量是不是 PHP 的意义上的空。。。
    eviladan0s
        21
    eviladan0s  
       2022-10-29 13:54:39 +08:00
    isset($_POST['test'])这种才行,超全局遍历肯定是一直存在的
    jhdxr
        22
    jhdxr  
       2022-10-30 18:03:02 +08:00
    @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
        23
    NewYear  
       2022-10-31 10:16:27 +08:00
    面向复制编程,也应该做一些测试的。

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

    我喜欢双重判断,总有一个中招
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2603 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 03:01 · PVG 11:01 · LAX 19:01 · JFK 22:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.