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

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

  •  
  •   qinrui · 99 天前 via iPhone · 2120 次点击
    这是一个创建于 99 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    25 条回复    2022-11-23 00:14:01 +08:00
    mrpzx001
        1
    mrpzx001  
       99 天前
    这不是常识?
    yuzo555
        2
    yuzo555  
       99 天前   ❤️ 1
    正常不是该用 $_SERVER['REQUEST_METHOD'] 判断?
    fairless
        3
    fairless  
       99 天前
    一般判断某个字段是否存在采用 issset($_POST['xxxx']),而且现在大部分都是从框架 request 对象获取表单了
    qqjt
        4
    qqjt  
       99 天前
    上框架吧,laravel 走起,少去踩老坑了,没意义
    frank553000
        5
    frank553000  
       99 天前
    请问用框架做的各位,
    假如做一般的企业网站(有产品,产品筛选等,或者以后加支付等)这类功能的。
    后台功能都要自己写吗?还是拿开源的改一下?
    fiypig
        6
    fiypig  
       99 天前
    我还是习惯!empty()解决一切烦恼
    00ing
        7
    00ing  
       99 天前
    php 基础有待提高
    minbaby
        8
    minbaby  
       99 天前
    如果不在 fpm 里执行 php 代码, $_POST 就不一定存在
    yuanchao
        9
    yuanchao  
       99 天前
    isset 和 empty 是两回事呀
    liaohongxing
        10
    liaohongxing  
       99 天前
    $_POST 超级变量永远是一个 array, 表单有值自动填充到这个 array ,没值是一个空 array , 空 array 满足 isset 的情况。
    hahasong
        11
    hahasong  
       99 天前
    上手 PHP 要求这么低吗 这种问题文档里难道没有
    liaohongxing
        12
    liaohongxing  
       99 天前
    @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
       99 天前 via iPhone
    @liaohongxing 即使不往页面 post 数据,isset ($_post [])仍然是真
    totoro52
        14
    totoro52  
       99 天前
    这哪里是坑,是你没去文档和好好了解 PHP 的底层,很多程序都是直接取$_POST ,那如果没有默认定义为 array ,那到时得一堆报错,坑更多
    wonderfulcxm
        15
    wonderfulcxm  
       99 天前 via iPhone
    …我竟无言以对,明明是你基础有问题
    iwh718
        16
    iwh718  
       99 天前 via Android
    这就离谱。。。这正常吧。
    xinshoushanglu
        17
    xinshoushanglu  
       99 天前
    你是第一天用 php 吗?
    liaohongxing
        18
    liaohongxing  
       99 天前
    @qinrui

    isset 在其他语言就是判断内存有无分配。 空 array 就是内存已分配,但是分配了一个空的 hashmap, 里面没数据而已。
    isset 判断一个空 array 就是 true 。而$_POST 就是一个特殊的空 array , 永远已分配 。判断这个肯定总是 true
    jfcherng
        19
    jfcherng  
       98 天前
    mht
        20
    mht  
       98 天前
    我也不认为这个是坑。。。isset 表面意思就是这个变量是否设置了,empty 是判断变量是不是 PHP 的意义上的空。。。
    eviladan0s
        21
    eviladan0s  
       98 天前
    isset($_POST['test'])这种才行,超全局遍历肯定是一直存在的
    jhdxr
        22
    jhdxr  
       97 天前
    @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  
       96 天前
    面向复制编程,也应该做一些测试的。

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

    我喜欢双重判断,总有一个中招
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   1545 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 12:49 · PVG 20:49 · LAX 04:49 · JFK 07:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.