表單的 PHP 處理頁面不符合其余文件的要求
我是一名網路開發愛好者。我已經 50 多歲了,從未從事過真正的 Web 開發工作,但喜歡在業餘時間修補樂趣。也就是說,我有一個由 Bluehost 託管的網站,是我用 PHP 從頭開始編寫的。我實際上比創建 UI 更喜歡這些功能。我不使用 CMS 或框架。
我的具體問題是:我嘗試遵循規範,因此我的根文件夾或 public_html 文件夾中有一個 .htaccess 文件。在這我只有一行
FallbackResource index.php
我嘗試通過這樣的 index.php 文件處理我所有的“網站頁面”>
// check url in users browser and bring here $path = ltrim($_SERVER['REQUEST_URI'], '/'); // Trim leading slash(es) if($path === "" || $path === "login" || $path === "home"){ if(isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true){ require_once '../my_stuff/dashboard.php'; }else{ require_once '../my_stuff/login.php'; } }elseif($path === "register"){ if(isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true){ require_once '../my_stuff/dashboard.php'; }else{ require_once '../my_stuff/register.php'; } }elseif($path === "dashboard"){ if(isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true){ require_once '../my_stuff/dashboard.php'; }else{ require_once '../my_stuff/login.php'; } }elseif($path === "logout"){ require_once '../my_stuff/logout.php'; }elseif($path === "verify"){ require_once '../my_stuff/verify.php'; }elseif($path === "proc_reg.php"){ require_once 'proc_reg.php'; }else{ header('HTTP/1.1 404 Not Found'); echo 'page not found'; }
html 根目錄中的唯一文件是 index.php .htaccess 和我的 favicon.ico。所有其他文件都是從 html 根目錄之外的文件夾載入的。這工作正常。當我的 html 中有連結時,它們看起來就像“/about”或“/home”,它們也可以正常工作,重定向回 index.php。但是,我的所有表單處理頁面都沒有被正確訪問。我真的不喜歡將表單發回給自己,我喜歡單獨處理它。我喜歡保持關注點分離。對於我的 index.php 文件中的包含,我使用 ../my_stuff/whatever_page 來獲取我的其他文件,從 html 根目錄返回到 my_stuff 文件夾。但是當我在表單的“action”屬性中包含這些 URL 時,這不起作用。至少不在主機伺服器上。當我在本地開發時,它工作正常。所以,我不得不將表單處理文件從 html 根目錄上方的 my_stuff 中移出,並將它們放在 html 根目錄中的另一個文件夾中。我認為這很混亂並且有潛在的危險。我確實將此行添加到我的 .htaccess 文件中 >
Options -Indexes
有點幫助。但是,如果有人知道文件的確切名稱,他們就可以找到它;像 mysite/procs/this_form.php。不過,我確實在這些腳本的頂部有這幾行。if($_SERVER["REQUEST_METHOD"] !== "POST") { header('Location: ../'); exit; }
有沒有辦法讓我的處理頁面回到 html 根目錄之上,或者這只是常態?
對於我的 index.php 文件中的包含,我
../my_stuff/whatever_page
用來獲取其他文件,從 html 根目錄返回到 my_stuff 文件夾。但是當我在表單的“action”屬性中包含這些 URL 時,這不起作用。這些不是“URL”,它們是文件系統路徑。該
action
屬性的值應該是一個面向公眾的 URL,就像/about
or/home
(與您的範例相關)。然後,您可以使用“路由器”(中的 if-elseif 塊
index.php
)來路由請求的 URL,就像您對所有其他 URL 所做的那樣。例如按照你的例子……
在您的 HTML 中:
<form action="/form-submission" method="POST"> :
在
index.php
:elseif($path === "form-submission" && $_SERVER["REQUEST_METHOD"] == "POST"){ require_once '../my_stuff/whatever';
但是,如果有人知道文件的確切名稱,他們就可以找到它;像
mysite/procs/this_form.php
任何人都可以為您的表單送出頁面送出 POST 請求,就像任何人都可以向您的頁面
/about
或/home
頁面發出 GET 請求一樣。您需要實施足夠的驗證和安全措施,這不會成為問題。我真的不需要發回,因為我使用 Ajax 進行實時響應。
我不太清楚你的意思是什麼。AJAX 只是一個非同步請求。因此,無論請求是從 HTML 同步送出還是從 JavaScript 非同步送出,您仍在向
/form-submission
.