集成 PHP 的方法(HTML 表单等)

表单

表单是与 PHP 交互的最常见方式之一。如前所述,建议你了解 HTML,接下来我们就会开始使用它。如果你不熟悉,可以参考 HTML 维基书进行回顾。

表单设置

要创建一个表单并将其指向 PHP 文档,可以使用 HTML 标签 <form> 并指定一个 action 属性,如下所示:

<form method="post" action="action.php">
    <!-- 你的表单内容 -->
</form>

当用户点击 "提交" 后,表单内容会被发送到 PHP 脚本进行处理。表单中的所有字段会根据提交表单时使用的方法存储在 $_GET$_POST 变量中。

GETPOST 方法的区别在于,GET 会将所有的值附加在 URL 中,而 POST 通过 HTTP 头部将数据透明地提交。一般而言,如果提交敏感数据,推荐使用 POST,因为 POST 表单通常提供更高的安全性。

请记住,$_GET$_POST 是超全局数组,这意味着你可以在 PHP 脚本中的任何地方引用它们。例如,在函数内部使用时,不需要声明 global $_POSTglobal $_GET

示例

以下是一个如何使用表单提交数据的示例。

<!-- Inside enterlogin.html -->
<html>
<head>
    <title>Login</title>
</head>
<body>
    <form method="post" action="login.php">
        Please log in.<br/>
        Username: <input name="username" type="text" /><br />
        Password: <input name="password" type="password" /><br/>
        <input name="submit" type="submit" />
    </form>
</body>
</html>

这个表单会显示如下内容:

Please log in.
Username:  …
Password:  …
submit

接下来是用来处理表单的 PHP 脚本(login.php):

<?php
// Inside login.php
if ($_POST['username'] == "Spoom" && $_POST['password'] == "idontneednostinkingpassword") {
    echo("Welcome, Spoom.");
} else {
    echo("You're not Spoom!");
}
?>

更详细地看看这个脚本:

if ($_POST['username'] == "Spoom" && $_POST['password'] == "idontneednostinkingpassword")

如你所见,$_POST 是一个数组,数组的键对应表单中每个字段的名称。为了向后兼容,你也可以使用数字索引来引用这些值,但通常不推荐,因为这种方式不如使用字段名更清晰。

这就是如何使用表单将数据提交给 PHP 脚本的方法,非常简单。

更多信息


PHP 命令行

虽然 PHP 最初是作为 Web 语言创建的,但它也可以用于命令行脚本(尽管这并不常见,因为像 bash 脚本这样的工具可以更简便地完成相关任务)。

输出

你可以像输出网页一样向控制台输出内容,只是要记住,HTML 不会被解析(这实际上是一个常见错误),你必须手动输出换行符。一个典型的 "Hello World" 程序如下所示:

<?php
    print "Hello World!\n";
?>

注意末尾的换行符 - 换行符对于使输出更整洁和可读非常有用。

输入

PHP 有几个特殊的文件可以用于从命令行读取和写入。这些文件包括 stdinstdoutstderr 文件。要访问这些文件,你可以像处理普通文件一样使用 fopen,但需要使用 PHP 特殊的 php:// 协议,如下所示:

$fp = fopen("php://stdin","r");

要从控制台读取输入,只需读取 stdin 即可。写入控制台不需要特殊的重定向,如果你想写入 stderr,可以打开它并写入:

$fp = fopen("php://stderr","w");

考虑到如何读取输入,接下来我们可以构造一个简单的命令行脚本,让用户输入用户名和密码进行身份验证。

<?php
   $fp = fopen("php://stdin", "r");
   
   print "Please authenticate yourself\n";
   print "Username: ";
   // 使用 rtrim 去除 shell 中的换行符
   $user = rtrim(fgets($fp, 1024));
   print "Password: ";
   // 使用 rtrim 去除 shell 中的换行符
   $pass = rtrim(fgets($fp, 1024));

   if (($user == "someuser") && ($pass == "somepass")) {
       print "Good user\n";
       // ... 做一些事情 ...
   } else {
       die("Bad user\n");
   }

   fclose($fp);
?>

请注意,这个脚本只是一个示例,展示如何使用 PHP 进行命令行编程 —— 该代码展示了一种非常不安全的身份验证方式,不应作为存储密码的实践方式。记住,PHP 脚本是可以被他人读取的!

更多信息

Last modified: Friday, 10 January 2025, 12:46 AM