php $ _POST输出错误

时间:2014-09-25 09:48:28

标签: php html

我在PHP中尝试简单的Web表单操作,输入字段输出值中给出的任何输入都是1。在username

之前password不存在时,isset$_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;
?>

10 个答案:

答案 0 :(得分:11)

<?php
    /*** if else in a single statement ****/
    $username = isset($_POST["username"]) ? $_POST["username"] : "";
    $pass     = isset($_POST["password"]) ? $_POST["password"] : "";
    echo $username." - ".$pass;
?>

答案 1 :(得分:7)

不要使用

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

只放

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

因为 isset()给出布尔值,即1或0.在您的情况下 isset($ _ POST [&#34;用户名&#34;])检查您是否已将值放在此字段中。如果用户名字段中有一些值,则返回1,否则返回0.

答案 2 :(得分:5)

应该是

$usernmae= $_POST["username"];
$pass= $_POST["password"];
echo $usernmae," ",$pass;
如果评估为isset($_POST["username"]),则{p> isset($_POST["password"])1会返回TRUE,因为isset()返回布尔值。

答案 3 :(得分:3)

其他人告诉你 如何 来解决问题。我会告诉你 问题。

问题

您需要了解以下事项:

PHP&#39;布尔到字符串隐式转换

当隐式将布尔值转换为字符串时,PHP acts a bit weird

$testVar = false;
echo (string)$testVar; //will output a empty string (as that evaluates to false)
$testVar = true;
echo (string)$testVar; //will output 1 (as that evaluates to true)

isset()如何运作

根据PHP Manual

  

如果[作为参数提供的变量]存在且其值不是NULL,则返回TRUE,否则返回FALSE。

当您尝试访问$ _POST参数

时会发生什么

众所周知,{/ 1}}参数可用于PHP脚本,

  1. 有一个HTML表单,其中$_POST属性指向PHP脚本
  2. 用户提交表单,有或没有数据
  3. 如果表单中字段的action属性为name,则可以在提交表单后从PHP脚本中访问此信息,如下所示:

    "username"

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

    如果您在没有参数时尝试访问$_POST参数,则结果为$_POST

    这里发生了什么?

    通过对上述三件事的理解,我们可以推断出您案件中发生的事情。

    当您的文件第一次加载到浏览器时,PHP解释器必须先解释它。但是在这第一次,没有Undefined index变量存在。因此,当您尝试访问$_POST个参数时,会导致$_POST错误。

    当您将Undefined index表达式包裹在$_POST["..."]中时,isset()将返回isset(),因为参数根本就不存在。由于FALSE转换为空字符串(FALSE),因此您的""语句不会显示任何内容。

    当您提交表单时,echo来电将返回isset(),因为这次会出现TRUE个参数。如上所述,$_POST在转换为字符串时变为TRUE。因此,您获得输出"1"

    解决方案

    在访问1参数之前,您必须始终检查。

    $_POST

    或简写:

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

答案 4 :(得分:2)

为什么使用isset($_POST["username"])?如果测试变量包含NULL值,则isset()函数返回false,否则返回true。

尝试

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

答案 5 :(得分:2)

您需要先检查值是否存在。如果你不这样做,你就会收到错误。 因此isset($_POST['VALUE']) 如果它存在,那就去吧。如果没有,请设置为&#34;清空&#34;

<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
/**
 * Created by PhpStorm.
 * User: Devunne3
 * Date: 25/09/14
 * Time: 12:32
 */
$usernmae=isset($_POST["username"])?$_POST['username']:'';
$pass=isset($_POST["password"])?$_POST['password']:'';
echo $usernmae," ",$pass;
?>

答案 6 :(得分:2)

你的问题就在这一行

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

您正在保存isset()的值,这是一个布尔值0或1。

因为设置了2个参数,所以你得到1(真)。

你想这样做:

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

和密码相同。

答案 7 :(得分:2)

试试这个。以及你获得1和1的原因,因为你正在使用

$usernmae=isset($_POST["username"]);

这是你设定的一种方式。

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

答案 8 :(得分:2)

替换底部的3行
$username=isset($_POST['username'])?$_POST['username']:'';
$pass=isset($_POST['password'])?$_POST['password']:'';
echo $username," ",$pass

无论是否设置了变量,isset()都会返回boolean。这使它返回1.在我的答案中,如果字段有值,它将回显值,如果没有,将回显空字符串

答案 9 :(得分:1)

 if(isset($_POST) && !empty($_POST))
 {
  $usernmae=$_POST["username"];
  $pass=$_POST["password"];
  echo "User Name is : ".$usernmae,"Password is : ".$pass;
 }