我正在尝试通过大学的一门课程来学习PHP,但是我被困在这部分代码中,不了解它的功能。
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// collect value of input field
$name = $_POST['fname'];
if (empty($name)) {
echo "Name is empty";
} else {
echo $name;
}
}
?>
</body>
</html>
没有预期的结果原因,正如我之前所说,我不知道此代码如何工作以及如何完成。感谢您的帮助。
答案 0 :(得分:1)
$_SERVER['PHP_SELF']
(PHP $_SERVER variables)将返回当前脚本的文件名,方法是使用的HTTP method。
因此,此表单将POST
为其数据,在这种情况下为fname
,并且对它所在的同一脚本具有价值:
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
然后,在同一脚本上,这将检查正在使用的HTTP方法,如果是POST
,它将进入第一个if
。
在检查值之前检查一下数组键是否存在是一件好事,因此在第一个array_key_exists('REQUEST_METHOD', $_SERVER)
中我可能以if
作为条件:
if (array_key_exists('REQUEST_METHOD', $_SERVER) && $_SERVER["REQUEST_METHOD"] == "POST") {
// Code
}
为避免数组出现任何潜在的问题,作为一种好的做法,尽管通常在大多数情况下,$_SERVER["REQUEST_METHOD"]
的设置可能性更大(尽管不在我进一步链接的沙盒中)。
评论中的一些内容:
其中一条评论说...
echo ($_POST['fname'] ?: "Name is empty");
这基本上与:
if($_POST['fname']) {
echo $_POST['fname'];
} else {
echo "Name is empty"
}
,也可以这样写:
echo ($_POST['fname']) ?: "Name is empty";
echo ($_POST['fname']) ? $_POST['fname'] : "Name is empty";
如果括号中的内容是?
,则:
将echo
echo
和TRUE
之间的间距。
如果将其保留为空,它将返回括号中的值。
但是,正如另一条评论所述,这不会检查fname
是否具有值或未定义(未设置),这是array_key_exists('fname', $_POST)
派上用场的地方。
回到原始代码...
通过fname
HTTP方法发送的input
的值,放入POST
中,然后将其设置为变量$name
:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// collect value of input field
$name = $_POST['fname'];
if (empty($name)) {
echo "Name is empty";
} else {
echo $name;
}
}
$name
放入称为empty()
(PHP empty())的函数中,该函数检查值。如果没有一个,它将返回true,并在屏幕上显示Name is empty
(PHP echo())并声明echo
。
如果有一个值,它将echo
。
此沙箱将模拟同一件事:https://3v4l.org/OpDki
希望有帮助=]
答案 1 :(得分:0)
首先:将仅执行<?php ?>
内部的代码,其他文本将按原样打印。
<html>
<body>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
echo
将显示$_SERVER['PHP_SELF']
是当前文件路径。
所以这行在浏览器中将是这样的:
<form method="post" action="http://yourserver/thepathof/thisfile.php">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") { // this will be TRUE if the form is submitted
// collect value of input field
$name = $_POST['fname']; // in here you put the value of $_POST['fname'] in $name variable
// each input element in the form will be sent to $_POST array , the key is the name field in input element and the value is what user entered
if (empty($name)) { // if the user input an empty value
echo "Name is empty"; // this will print the text between ""
} else {
echo $name; // this will print $name
}
}
// the result of all this is just printing "name is empty" or "$name" only if the form is submitted
?>
</body>
</html>
希望这对您有所帮助