PHP $_POST输出错误

3

我正在尝试使用PHP进行简单的web表单操作,无论输入什么内容到输入字段中,输出值都为1。当$_POST之前没有isset时,usernamepassword会出现未定义索引错误。

<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;
?>

2
删除 isset 函数 - Gowri
1
快速提示:<form action="" method="post">将提交到当前URL,如果您决定稍后使用“漂亮的URL”,这将非常有用。它还保留了所有查询字符串参数。 - Niet the Dark Absol
10个回答

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

这是一个好建议,但你应该提供一些解释。 - Yogu

7
请勿使用“

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

仅放置

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

因为 isset() 返回布尔值,即 1 或 0。在您的情况下,isset($_POST["username"]) 检查您是否已经在此字段中输入了值。如果用户名字段中存在某些值,则返回 1,否则返回 0。


1
提高你的回答,通过详细阐述原因来实现 :) - Magic-Mouse
isset()函数不会“返回1或0”。它会返回TRUEFALSE。请参考我的答案进行解释。 - sampathsris

5

应该是这样的

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

isset($_POST["username"])isset($_POST["password"]) 在评估为 TRUE 时返回 1,因为 isset() 返回布尔值。


3

其他人已经告诉你如何解决问题。我将告诉你问题是什么。

问题

你需要知道以下几点:

PHP的布尔转字符串隐式转换

当隐式将布尔值转换为字符串时,PHP 表现有些奇怪

$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手册

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

尝试访问一个$_POST参数时会发生什么

正如您所知道的,当满足以下条件时,$_POST参数可用于PHP脚本:

  1. 有一个HTML表单,其中action属性指向PHP脚本
  2. 用户提交了表单,有或没有数据

如果表单中的字段的name属性是"username",则可以在表单提交后从PHP脚本中访问此信息:

$_POST["username"]

但如果处理 $_POST 参数的PHP脚本与HTML表单在同一个文件中,当最初访问该脚本时,将无法使用$_POST参数。

如果尝试在没有任何参数的情况下访问$_POST参数,则结果为Undefined index

这里发生了什么?

通过理解上述三点,我们可以推断出您的情况中发生了什么。

当您的文件首次加载到浏览器上时,PHP解释器必须先解释它。但是在这第一次中,不存在$_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"];
}

或者简写:

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

2
你的问题出在这一行。
$usernmae=isset($_POST["username"]);
$pass=isset($_POST["password"]);

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

由于两个参数都已设置,所以你得到了1(真)。

你想要这样做:

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

密码也同样如此。


2

为什么要使用isset($_POST["username"])?因为isset()函数会在测试变量包含NULL值时返回false,在其他情况下返回true。

可以尝试如下:

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

2

您需要首先检查一个值是否存在。如果没有,您将会收到一个错误。 因此,使用 isset($_POST['VALUE']) 进行检查。 如果它存在,则获取它。如果不存在,则设置为 "empty"。

<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;
?>

2
尝试一下这个。你之所以得到1和1,是因为你使用了

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

那是你设置的一个课程。
if(!empty($_POST['submit'])){
   $usernmae=$_POST["username"];
   $pass=$_POST["password"];
   echo $usernmae," ",$pass;
}

2

将底部3行替换为

$username=isset($_POST['username'])?$_POST['username']:'';
$pass=isset($_POST['password'])?$_POST['password']:'';
echo $username," ",$pass

isset()函数返回一个布尔值,用于判断变量是否设置了。如果已设置,它将返回1。在我的回答中,如果字段有值,它将打印该值,否则将打印空字符串。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接