2013-08-07 147 views
0

這裏有幾個問題我要問,首先,它不管你是否把你的形式:中表單提交問題

<form action="whatever.php" method="post"> 

代替:

<form name="" action="$_SERVER['PHP_SELF']" method="post"> 

我的意思是我我只是列出了whatever.php,因爲它分裂了我的代碼,而不是有大量的代碼文件,我只是通過我的錯誤消息等與會話變量,然後立即銷燬它們,我只是好奇或缺點是什麼如果我能做得更好?

下一個問題是與表單驗證,我被告知如果它不是來自數據庫,不打擾與服務器端驗證,只打擾與客戶端驗證......這似乎有點奇怪,不打擾服務器方面驗證,我覺得我應該有兩個無論數據庫或不。

+0

如果你將離開'action =「」'空,表單會自動創建文檔。 – M1K1O

+0

'action =「whatever.php」'和'action =「$ _ SERVER ['PHP_SELF']」'之間的區別在於第一個調用的是源文件之外的文件,而「self」或「」「正如M1K1O所述,是在同一頁面上完成的。這是標準形式。然後你有Ajax表單,其中不需要操作(或留空),表單的名稱通常是Ajax觸發器函數。客戶端驗證應始終使用,而不是JS,因爲JS始終可以被禁用。 –

+0

@Fred客戶端驗證是用JavaScript實現的,所以我確定你想說的是什麼。 – Halcyon

回答

0

表單中的動作並不重要。如果您使用帶路由器的框架,則URL不會直接映射到PHP文件。你的代碼所在的地方不應該由URL決定,但這是你進入更高級的代碼架構的時候。

如果不能從數據庫中來,不與服務器端驗證的麻煩和只與客戶端驗證

這是周圍的其他方式打擾。來自數據庫的值是安全,用戶輸入是從來沒有安全。

+0

說我把它留空,我的PHP腳本是在另一個文件,我如何鏈接它考慮我已經刪除了該行動?像什麼是將其鏈接到表單頁面的正確方式? – thechrishaddad

+0

@ user1265535這就是Ajax進來的地方。它通常使用表單的名稱來觸發PHP腳本的動作,正如我在您的問題下的原始評論所述。 –

+0

阿賈克斯突然從哪裏來? – Halcyon

0

,有人告訴我,如果不從數據庫中來,不 服務器端驗證的麻煩和只與客戶端驗證打擾..

錯!客戶端所做的一切都是潛在的危險。通過禁用JavaScript或VBScript(或其他),用戶可以繞過任何驗證。始終在服務器端進行驗證!另外考慮Chrome瀏覽器的網頁開發工具,任何HTML代碼都可以隨時更改。

至於形式,省略動作參數或留下空的(後來是另有W3C驗證失敗更好)將告訴瀏覽器輸入發送到同一個文件

考慮一個下面的例子

<?php 
if(isset($_POST['submit'])) 
{ 
    echo $_POST['text']; 
} 
?> 
<hr> 
<form action="" method="POST"> 
    <input type="text" name="text"> 
    <input type="submit" value="susbmit"> 
</form> 

該腳本將回顯通過表單提交的內容

0

如果在表單中使用$_SERVER['PHP_SELF'],則action屬性將默認爲當前URL。這是一種告訴PHP以提交表單的方式,它來自

但是,通過將action屬性留空可以實現相同的效果。該表單將提交給自己。我個人認爲這比較好。如果您使用$_SERVER['PHP_SELF'],攻擊者通過附加URL的file.php部分來注入惡意代碼將非常容易。將action屬性留空可以防止發生這種情況。

來到你的第二個問題,

如果不能從數據庫中來臨了我被告知,不要用服務器端驗證打擾,只有與客戶端驗證

沒有理會,這是相反的。來自數據庫的值通常是安全的,因爲您是將它們插入數據庫的。另一方面,用戶輸入應該是而不是是可信的,它們應該被正確驗證。