php中的$ _POST如何运行

问题描述 投票:2回答:3

我的索引文件是

<body>
  <form method="POST" action="post.php" >
    <input name="name">
    <input type="submit" value="submit">
  </form>
  </body>

和post.php是

<?php 
$sec = 'qaswed';
if($sec == $_POST['name'])
{
    echo "true";
}
else
{
    echo "false";
}

?>

[当我在post.php文件中简单地用$ _POST ['name']代替TRUE时,无论我在索引文件中提交什么,结果都是正确的,即是

if($sec == TRUE) { echo "true"; } else { echo "false"; }//true

但是,如果在索引文件中,如果我在name参数中发送TRUE,那么输出为何为假..即

if($sec == $_POST['name']) { echo "true"; } else { echo "false"; }// false when name=TRUE

当我从其他页面变量(请求)发送此消息时,它的计算结果为false。为什么会发生?

php forms http-post
3个回答
4
投票

[如果写为($sec == TRUE),则为true,因为您正在通过==运算符使用自动类型转换,而php将$sec字符串转换为bool类型,因为它不是(bool)false(不是字符串'false'!!!!)或(int)0,它将变为true,然后true === true = true

如果您不希望php自动转换if中的值,请使用===而不是==,这也会检查类型。

在另一种情况下,您发送的是“ true”字符串,而您拥有的“ qaswed”字符串显然不相同,并且由于它们都是字符串,因此没有像上一种情况那样进行类型转换。


1
投票

我刚刚添加了“ if(isset($ _ POST ['name']))”以检查是否设置了名称

// post.php

<?php
    if (isset($_POST['name']))
    {
        $sec = 'qaswed';
        if ($sec == $_POST['name'])
        {
            echo "true";
        }
        else
        {
            echo "false";
        }
    }

?>

1
投票

在字符串'qaswed'的第一个比较值中,会自动将其强制转换为布尔值,以比较布尔值。比较不同的数据类型时,其中一种将转换为另一种类型。

如果您还想比较变量的类型,则应使用相同比较运算符。

var_dump('qaswed'); // string(6) "qaswed"
var_dump((bool)'qaswed'); // bool(true)
var_dump('qaswed' == true); // bool(true)
var_dump('qaswed' === true); // bool(false)

在第二种情况下,您比较字符串类型。

var_dump('TRUE'); // string(4) "TRUE"
var_dump('qaswed'); // string(6) "qaswed"
var_dump('qaswed' == 'TRUE'); // bool(false)
var_dump('qaswed' === 'TRUE'); // bool(false)
© www.soinside.com 2019 - 2024. All rights reserved.