您能给我一些有关此代码的见解吗?

时间:2019-05-30 20:48:15

标签: php

我正在尝试通过大学的一门课程来学习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> 

没有预期的结果原因,正如我之前所说,我不知道此代码如何工作以及如何完成。感谢您的帮助。

2 个答案:

答案 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";

这些是Ternary Operators

如果括号中的内容是?,则:echo echoTRUE之间的间距。

如果将其保留为空,它将返回括号中的值。

但是,正如另一条评论所述,这不会检查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 emptyPHP 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>

希望这对您有所帮助