我有一個頁面,我正在開發位於mysite.com/page
PHP發送POST數據重寫URL
在這個頁面上,用戶可以輸入用戶名和密碼:
<form method="post">
<div class='form-group'>
<label for='username'>Username</label>
<input class='form-control' id='spreadsheet-form-username' name='username' placeholder='Username'>
</div>
<div class='form-group'>
<label for='password'>Password (optional - required to edit)</label>
<input type='password' class='form-control' name='password' id='spreadsheet-form-password' placeholder='Password'>
</div>
<button type='submit' class='btn btn-default'>Submit</button>
</form>
當用戶點擊提交,其職位數據和URL改寫爲mysite.com/page/exampleUser
或mysite.com/page?username=exampleUser
相當於如果用戶只提交的用戶名來查找,我希望他們只能在mysite.com/page/exampleUser
查看數據,如果他們提交一個正確的密碼,他們可以編輯數據。
我可以得到正確的URL,但我在尋找如何檢查用戶名和密碼是否都在mysite.com/page/exampleUser
頁面上發送(以及它們的值是什麼)而掙扎。我希望能夠判斷是否允許他們編輯該頁面上的數據。
我試過這段代碼:
$mode = "view";
if (isset($_POST["password"])) {
if (hashOfPassword matches password submitted) {
$mode = "edit";
}
}
if (isset($_POST["username"])) {
$username = $_POST["username"];
header("Location: /spreadsheet/" . $username);
}
,但我不能似乎能夠得到的$ _POST [「密碼」]的數據,而在重寫URL。它僅在URL被重寫之前可用。
我不一定需要能夠發送密碼,但我希望能夠發送一些信息,讓我知道該頁面應該是可見的還是可編輯的。我也不能通過URL發送它(例如:mysite.com/page/exampleUser/edit
),因爲我不希望用戶只需更改URL就能夠編輯其他用戶的數據。
這裏是我如何處理URL重寫:
// Trim leading slashes
$path = ltrim($_SERVER['REQUEST_URI'], '/');
// Split url on slashes
$elements = explode('/', $path);
if ($elements[0] == "page" && sizeof($elements) == 1) {
// do nothing, there wasn't a username submitted
}
else {
switch(array_shift($elements))
{
case 'page':
echo "username: " . $elements[1];
echo "password: " /* not sure what to put here*/;
break;
default:
header("/404.php");
break;
}
}
和我.htaccess
:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ 404.php [L]
任何幫助,將不勝感激!
你可以啓動一個'session',確認URL重寫之前的密碼,並給會話某種「授權」是那麼URL重寫後檢查的。 – Luke