PHP - 'if (!$_POST)' 是否足以(无需指定字段名称)来检测数据是否通过具有 1 个字段的表单传递?
PHP - shouldn't 'if (!$_POST)' be enough (without having to specify the field name) to detect if data is being passed through a form with 1 field?
所以我安装了最新版本的 Xampp,在 htdocs 目录中我有一个 htm 页面,其中包含一个非常简单的表单,只有一个文本字段和一个提交按钮,单击该按钮时,链接到一个 php 页面,该页面打印一条消息“您键入的内容是:”,然后是键入的内容。如果字段中实际没有输入任何内容,在单击提交按钮后,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>
因此,使用此 php 代码,如果我在字段中键入任何内容并单击提交按钮,php 页面将显示“您键入的内容是:" 后跟输入的内容,但如果我实际上没有在该字段中输入任何内容并单击提交按钮,php 页面将显示“您输入的内容是:”之后什么都不显示,而不是显示“错误:您没有输入任何内容”。
但是,我发现如果我将“if (!$_POST)”更改为“if (!$_POST["nom"” ])",如果我没有在字段中输入任何内容,php 页面将显示“错误:您没有输入任何内容” ...问题已解决。
但这让我感到惊讶,正如我在我的课程 material 中看到的一个示例(它被称为自调用表单或类似的东西)其中“if (! $_POST)" 是 used.Here 它是:
<html>
<head>
<title>Me llamo a mi mismo...</title>
</head>
<body>
<?
if (!$_POST){
?>
<form action="auto-llamada.php" method="post">
Nombre: <input type="text" name="nombre" size="30">
<br>
Empresa: <input type="text" name="empresa" size="30">
<br>
Telefono: <input type="text" name="telefono" size=14 value="+34 " >
<br>
<input type="submit" value="Enviar">
</form>
<?
}else{
echo "<br>Su nombre: " . $_POST["nombre"];
echo "<br>Su empresa: " . $_POST["empresa"];
echo "<br>Su Teléfono: " . $_POST["telefono"];
}
?>
</body>
</html>
那么为什么“if (!$_POST)”在我的情况下不起作用? (使用 Mozilla 作为浏览器)
当像这样发帖并且字段为空时,它仍然被保存为值。
var_dumping这个
<form method="post" action="fgc.php">
<input type="text" name="horse">
<input type="submit">
</form>
将 return:
array(1) { ["horse"]=> string(0) "" }
试试这个代码
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 中,总是定义 $_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
您的文档说使用 !$_POST
的原因是页面通常会使用 GET
方法加载,在这种情况下,$_POST
将是一个空数组。
所以我安装了最新版本的 Xampp,在 htdocs 目录中我有一个 htm 页面,其中包含一个非常简单的表单,只有一个文本字段和一个提交按钮,单击该按钮时,链接到一个 php 页面,该页面打印一条消息“您键入的内容是:”,然后是键入的内容。如果字段中实际没有输入任何内容,在单击提交按钮后,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>
因此,使用此 php 代码,如果我在字段中键入任何内容并单击提交按钮,php 页面将显示“您键入的内容是:" 后跟输入的内容,但如果我实际上没有在该字段中输入任何内容并单击提交按钮,php 页面将显示“您输入的内容是:”之后什么都不显示,而不是显示“错误:您没有输入任何内容”。
但是,我发现如果我将“if (!$_POST)”更改为“if (!$_POST["nom"” ])",如果我没有在字段中输入任何内容,php 页面将显示“错误:您没有输入任何内容” ...问题已解决。
但这让我感到惊讶,正如我在我的课程 material 中看到的一个示例(它被称为自调用表单或类似的东西)其中“if (! $_POST)" 是 used.Here 它是:
<html>
<head>
<title>Me llamo a mi mismo...</title>
</head>
<body>
<?
if (!$_POST){
?>
<form action="auto-llamada.php" method="post">
Nombre: <input type="text" name="nombre" size="30">
<br>
Empresa: <input type="text" name="empresa" size="30">
<br>
Telefono: <input type="text" name="telefono" size=14 value="+34 " >
<br>
<input type="submit" value="Enviar">
</form>
<?
}else{
echo "<br>Su nombre: " . $_POST["nombre"];
echo "<br>Su empresa: " . $_POST["empresa"];
echo "<br>Su Teléfono: " . $_POST["telefono"];
}
?>
</body>
</html>
那么为什么“if (!$_POST)”在我的情况下不起作用? (使用 Mozilla 作为浏览器)
当像这样发帖并且字段为空时,它仍然被保存为值。
var_dumping这个
<form method="post" action="fgc.php">
<input type="text" name="horse">
<input type="submit">
</form>
将 return:
array(1) { ["horse"]=> string(0) "" }
试试这个代码
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 中,总是定义 $_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
您的文档说使用 !$_POST
的原因是页面通常会使用 GET
方法加载,在这种情况下,$_POST
将是一个空数组。