php$\u POST输出错误

php$\u POST输出错误,php,html,Php,Html,我正在用PHP尝试简单的web表单操作,输入字段输出值中的任何输入都是1。以及用户名,密码的未定义索引错误,当设置在$\u POST <html> <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post"> <input type="text" name="username"> <input type="password" name="password"> <in

我正在用PHP尝试简单的web表单操作,输入字段输出值中的任何输入都是
1
。以及
用户名
密码
的未定义索引错误,当
设置
$\u POST

<html>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit"></form>
</html>

<?php
$usernmae=isset($_POST["username"]);
$pass=isset($_POST["password"]);
echo $usernmae," ",$pass;
?>


为什么要使用isset($\u POST[“username”])
?如果测试变量包含空值,则函数返回false,否则返回true

试着

if(isset($_POST))
{
   $usernmae=$_POST["username"];
   $pass=$_POST["password"];
   echo $usernmae," ",$pass;
}
应该是

$usernmae= $_POST["username"];
$pass= $_POST["password"];
echo $usernmae," ",$pass;

isset($\u POST[“username”])
isset($\u POST[“password”])
返回
1
如果求值为
TRUE
,因为
isset()
返回布尔值。

您需要先检查值是否存在。如果不这样做,您将得到一个错误。 因此
isset($\u POST['VALUE'])
如果它存在,就得到它。如果不是,则设置为“空”


您的问题是这一行

$usernmae=isset($_POST["username"]);
$pass=isset($_POST["password"]);
您正在保存
isset()
的值,该值为布尔值0或1

因为设置了2个参数,所以得到的是1(true)

您要执行以下操作:

if(isset($_POST["username"])){
    $usernmae = $_POST['username'];
}

密码也是一样。

试试这个。你得到1和1的原因是因为你在使用

$usernmae=isset($_POST["username"]);
这是一个你设定的理由

if(!empty($_POST['submit'])){
   $usernmae=$_POST["username"];
   $pass=$_POST["password"];
   echo $usernmae," ",$pass;
}

不要使用

$usernmae=isset($_POST["username"]);
$pass=isset($_POST["password"]);
只放

$usernmae=$_POST["username"];
$pass=$_POST["password"];

因为isset()给出了布尔值,即1或0。在您的情况下,isset($\u POST[“username”])检查您是否在该字段中输入了值。如果用户名字段中有一些值,则返回1,否则返回0。

将底部的3行替换为

$username=isset($_POST['username'])?$_POST['username']:'';
$pass=isset($_POST['password'])?$_POST['password']:'';
echo $username," ",$pass
无论变量是否设置,isset()都返回布尔值。这使它返回1。在我的回答中,如果该字段有值,它将回显该值,如果没有,它将回显空白字符串

其他人告诉您如何解决该问题。我会告诉你问题出在哪里

问题 你需要知道以下几点:

PHP的布尔到字符串隐式转换 将布尔值隐式转换为字符串时

isset()
的工作原理 据报道,

如果[variable supplied as argument]存在且值不是NULL,则返回
TRUE
,否则返回FALSE

尝试访问$\u POST参数时会发生什么情况 如您所知,
$\u POST
参数可用于PHP脚本

  • 有一个HTML表单,其
    action
    属性指向PHP脚本
  • 用户提交表单,带或不带数据
  • 如果表单中某个字段的
    name
    属性为
    “username”
    ,则在提交表单后,您可以通过PHP脚本访问此信息,如下所示:

    $_POST["username"]
    
    但是,如果处理
    $\u POST
    参数的PHP脚本与HTML表单位于同一个文件中,则在最初访问脚本时,脚本将无法使用
    $\u POST
    参数

    如果您试图在没有参数时访问
    $\u POST
    参数,则结果是
    未定义索引

    这里发生了什么事? 通过对以上三点的理解,我们可以推断出你的情况

    当您的文件第一次加载到浏览器时,PHP解释器必须首先对其进行解释。但这是第一次,没有出现
    $\u POST
    变量。因此,当您尝试访问
    $\u POST
    参数时,将导致
    未定义索引
    错误

    当您将
    $\u POST[“…”]
    表达式包装在
    isset()
    中时,
    isset()
    将返回
    FALSE
    ,因为参数根本不存在。由于
    FALSE
    被转换为空字符串(
    “”
    ),因此
    echo
    语句不会产生任何可见内容

    提交表单时,
    isset()
    调用将返回
    TRUE
    ,因为此时存在
    $\u POST
    参数。如上所述,
    TRUE
    在转换为字符串时变为
    “1”
    。因此,您将获得输出
    1

    解决方案 在访问
    $\u POST
    参数之前,必须始终进行检查

    $username = "";
    if (isset($_POST["username"])) {
        $username = $_POST["username"];
    }
    
    或速记:

    $username = isset($_POST["username"]) ? $_POST["username"] : "";
    

    删除isset函数快速提示:
    将发回当前URL,如果您决定稍后执行“漂亮URL”,这将非常有用。它还保留所有查询字符串参数。请详细说明原因,以改进您的答案:)
    isset()不“给出1或0”。它返回
    TRUE
    FALSE
    。这是一个很好的建议,但是你应该提供一些解释。
    $_POST["username"]
    
    $username = "";
    if (isset($_POST["username"])) {
        $username = $_POST["username"];
    }
    
    $username = isset($_POST["username"]) ? $_POST["username"] : "";
    
     if(isset($_POST) && !empty($_POST))
     {
      $usernmae=$_POST["username"];
      $pass=$_POST["password"];
      echo "User Name is : ".$usernmae,"Password is : ".$pass;
     }