PHP 程式設計/整合方法(HTML 表單等)
PHP 的使用方式很多。以下是幾種可以呼叫 PHP 的方法。
表單是迄今為止與 PHP 互動最常見的方式。正如我們之前提到的,建議您瞭解 HTML,並且從這裡開始使用它。如果您不瞭解,只需前往 HTML 華夏公益教科書 重新整理一下。
要建立表單並將其指向 PHP 文件,可以使用 HTML 標籤 <form> 並指定操作,如下所示
<form method="post" action="action.php">
<!-- Your form here -->
</form>
使用者點選“提交”後,表單主體將被髮送到 PHP 指令碼進行處理。表單中的所有欄位都儲存在變數 $_GET 或 $_POST 中,具體取決於用於提交表單的方法。
GET 和 POST 方法之間的區別在於,GET 將所有值提交到 URL 中,而 POST 透過 HTTP 標頭以透明方式提交值。一般來說,如果提交敏感資料,請使用 POST。POST 表單通常提供更高的安全性。
請記住 $_GET 和 $_POST 是超全域性陣列,這意味著您可以在 PHP 指令碼中的任何位置引用它們。例如,您無需呼叫 global $_POST 或 global $_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>
此表單將如下所示
| 請登入。 | |
| 使用者名稱 | … |
| 密碼 | … |
| 提交 | |
以下是用作處理指令碼的程式碼(login.php)
<?php
// Inside enterlogin.html
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 最初是作為一種 Web 語言建立的,但它也可以用於命令列指令碼(雖然這並不常見,因為可以使用更簡單的工具,如 bash 指令碼)。
您可以像輸出到網頁一樣輸出到控制檯,但要記住 HTML 不會被解析(這是一個很常見的錯誤),並且您必須手動輸出換行符。典型的 hello world 程式如下所示
<?php
print "Hello World!\n";
?>
請注意行尾的換行符 - 換行符有助於使您的輸出看起來整潔易讀。
PHP 有幾個特殊檔案供您讀取和寫入命令列。這些檔案包括 stdin、stdout 和 stderr 檔案。要訪問這些檔案,您可以像訪問實際檔案一樣使用 fopen 開啟它們,區別在於您使用特殊的 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 to cut off the \n from the shell
$user = rtrim(fgets($fp, 1024));
print "Password: ";
// rtrim to cut off the \n from the shell
$pass = rtrim(fgets($fp, 1024));
if (($user=="someuser") && ($pass=="somepass")) {
print "Good user\n";
// ... do stuff ...
} else die("Bad user\n");
fclose($fp);
?>
請注意,此指令碼僅用作如何將 PHP 用於命令列程式設計的示例 - 此處的程式碼演示了一種非常糟糕的身份驗證使用者或儲存密碼的方法。請記住,您的 PHP 指令碼是其他人可以讀取的!