PHP-x27;t';如果(!$_POST)和#x27;是否足够(无需指定字段名)检测数据是否通过具有1个字段的表单传递?

PHP-x27;t';如果(!$_POST)和#x27;是否足够(无需指定字段名)检测数据是否通过具有1个字段的表单传递?,php,forms,Php,Forms,因此,我安装了最新版本的Xampp,在htdocs目录中,我有一个htm页面,其中包含一个非常简单的表单,只有一个文本字段和一个提交按钮,当单击该按钮时,链接到一个php页面,该页面打印一条消息,上面写着“What you typed is:”然后是所键入的内容。如果在字段中没有键入任何内容,那么在单击submit按钮后,php页面将显示一条错误消息,显示“错误:您没有键入任何内容” 以下是htm页面的代码: <html> <head> </head>

因此,我安装了最新版本的Xampp,在htdocs目录中,我有一个htm页面,其中包含一个非常简单的表单,只有一个文本字段和一个提交按钮,当单击该按钮时,链接到一个php页面,该页面打印一条消息,上面写着“What you typed is:”然后是所键入的内容。如果在字段中没有键入任何内容,那么在单击submit按钮后,php页面将显示一条错误消息,显示“错误:您没有键入任何内容”

以下是htm页面的代码:

<html>

<head>

</head>

<body>

<center>

<form action="p1.php" method="post">
  Type something:
  <input type="text" name="nom">
  <input type="submit" value="SEND">
</form>

</center>

</body>

</html>

键入以下内容:
下面是php页面的初始代码:

<html>

<head>

</head>

<body>

<?PHP

if (!$_POST) {echo "Error: you didn't type anything";}
else {echo "What you typed is: " . $_POST["nom"];}

?> 

</body>

</html>


当像这样发布并且有空字段时,它仍然被保存为值

var_倒了这个

<form method="post" action="fgc.php">
<input type="text" name="horse">
<input type="submit">
</form>
试试这个代码

if($_SERVER['REQUEST_METHOD'] == 'POST'){ // if the form was submitted

  if(isset($_POST['name']) && !empty($_POST['name'])){ // basic validation

   // # Don't forget XSS sanitizing !
   $name = htmlspecialchars($_POST['name']);

   // Add data to DB or something

  }else{
   echo 'Error: Required field "name"';
  }

}

在PHP中,始终定义
$\u POST
超全局,而不管该方法是否实际是
POST
,或者是否发布了任何数据。但是,如果它不是一个
POST
,或者如果没有数据,则该数组将为空

如果将数组转换为布尔值,则如果数组中没有元素,则该值将为false

<?php
var_dump(isset($_POST)); // Always TRUE
var_dump(!!$_POST); // TRUE if data was posted (even if empty fields), FALSE otherwise

实际上,您不需要执行
isset()
测试和
empty()
测试,因为
empty()
语句在测试之前执行
isset
测试,如果它包含任何值。Quote:如果变量不存在,则不会生成警告。这意味着empty()本质上是与!isset($var)| |$var==false。我以前读过类似的东西,我尝试过,但代码坏了,这就是为什么我保留了
isset()
!empty()
。否则,
!empty()
足够了吗?所有输入都将返回一个字符串(0),请使用var\u dump($\u POST)自行尝试;在我的例子中,$\u POST数组将包含一个元素(由$\u POST[“nom”]访问),因为表单只有一个元素用于将数据传递到php页面,对吗?如果我们将字段留空,然后单击submit按钮,我就会感到困惑。我的意思是,按照我的理解,如果我们问数组(带有“if(!$\u POST)”)是否为空,它会说否(expression=FALSE),因为它唯一的元素有一个赋值:一个空字符串。但是如果我们直接询问数组的元素(使用“if(!$\u POST[“nom”]”),它会说它没有赋值(expression=TRUE)。很抱歉在回复后更改了注释,这就是注释。是的,因为!$\u POST[“nom”]我只会问NOM里面什么是空的,但当你问!$\u POST时,你会问整个POST里面是什么,这是一个空字符串,因此$\u POST不是空的(必须考虑一下)
if($_SERVER['REQUEST_METHOD'] == 'POST'){ // if the form was submitted

  if(isset($_POST['name']) && !empty($_POST['name'])){ // basic validation

   // # Don't forget XSS sanitizing !
   $name = htmlspecialchars($_POST['name']);

   // Add data to DB or something

  }else{
   echo 'Error: Required field "name"';
  }

}
<?php
var_dump(isset($_POST)); // Always TRUE
var_dump(!!$_POST); // TRUE if data was posted (even if empty fields), FALSE otherwise