2013-11-14 47 views
0

我正在添加一些服務器端表單驗證(使用PHP),以防我的網站的一個用戶關閉了javascript。在一種形式中,有10個可以更改的獨立輸入字段。有人能告訴我哪個協議將使用更少的系統資源嗎?首先,我編寫一些mySQL變量來檢查用戶的當前設置,並將它們與發佈的設置進行比較。如果所有10個公佈值是相同的電流值,不更新數據庫,否則更新數據庫:哪個協議會更「貴」?

$login_id = $_SESSION['login_id']; 

$sql1 = mysql_fetch_assoc(mysql_query("SELECT value1 FROM login WHERE login_id = 
'$login_id'")); 
$sql1a = $sql1['value1']; 
// Eight More, then 
$sql10 = mysql_fetch_assoc(mysql_query("SELECT value10 FROM login WHERE login_id = 
'$login_id'")); 
$sql10a = $sql10['value10']; 
$Value1 = $_POST['Value1']; 
// Eight More, then 
$Value10 = $_POST['Value10']; 

//Other validations then the following 

if (($sql1a == $Value1)&&($sql2a == $Value2)&&.......($sql10a == $Value10)) { 
echo "<script> 
alert ('You haven't made any changes to your profile'); 
location = 'currentpage.php'; 
</script>"; 
} 
else { 
$sqlUpdate = mysql_query("UPDATE login SET value1 = '$Value1',....value10 = '$Value10'  
WHERE login_id = '$login_id'"); 
echo "<script> 
alert ('Your profile has been updated!'); 
location = 'currentpage.php'; 
</script>"; 
}//End php 

或者是更便宜的只使用用戶張貼的值(保持$ _ POST變量) ($ sql1a == $ Value1)& &($ sql2a == $ Value2)& & .......($ sql10a == $ Value10)),然後直接轉到

//Other validations then the following 

$sqlUpdate = mysql_query("UPDATE login SET value1 = '$Value1',....value10 = '$Value10'  
WHERE login_id = '$login_id'"); 
echo "<script> 
alert ('Your profile has been updated!'); 
location = 'currentpage.php'; 
</script>"; 

感謝您的任何意見!

+2

從理論上講,它肯定會有一些聰明的東西,但爲什麼不測試它呢?找出關於性能的唯一真正方法就是測試! – Nanne

+0

將用戶對象或數組保存到會話中,而不僅僅是login_id,然後將表單值與會話值進行比較,如果它們更改,則將其標記爲髒。那麼如果會話用戶是髒更新。每次提交表單時,我都不會從數據庫中提取10次。 – Tony

+0

好的@Nanne ...我會問這個問題,它揭示了我的服務器的新秀狀態....我該怎麼做?我可以通過我的網站託管服務來檢查帶寬(我能得到的最佳解決方案是在24小時內完成30分鐘),我可以檢查mySQL的使用情況(只要顯示我的存儲數據佔用的空間就足夠了) 。 –

回答

2

如果我理解正確,您的問題是性能是否可以檢查配置文件以進行修改。對於我來說,我檢查你的代碼後,這不僅僅是表現有關更多...

  • 讓我們先從性能:據我所知的MySQL查詢比基本PHP comparisions慢,這是真的 - 但是在這個範圍內,我真的不認爲這很重要。我們正在討論兩個非常基本的查詢,這些查詢不會處理大量數據。
  • 讓我們考慮一下最終用戶在第二種情況下會看到什麼(UX):,但用戶不會有最確切的反饋告訴他/她沒有做任何修改。在配置文件修改屏幕上,我想這可能不是有意的,所以我會告訴我們沒有修改任何東西。 (另外,執行不必要的UPDATE查詢並不是最優雅的。)
  • @aehiilrs是對的,請關注該評論。 這種類型的MySQL使用對安全性特別不利 - 如果你繼續這樣做,你會在你的PHP代碼中創建很多安全漏洞。這些都很容易發現和利用,所以請從上面提到的PDO開始,對其他選擇有一個好看。任何好的PHP書籍都會告訴你方式。您還可以看看在一個偉大的Q/A在這裏StackOverflow的:How can I prevent SQL injection in PHP?
  • 我不知道它是否是一個好主意,嘗試更新的用戶界面,像你這樣 - 我強烈希望加載另一個PHP 沒有任何<script>輸出中的魔法。在結果PHP中,您可以始終顯示類似CSS樣式的狀態欄,以顯示類似的信息。
+0

謝謝你的出色答案。我已經在我的php代碼中包括了(未在上面的代碼中顯示......分組在下面的「其他驗證」中),其中包括preg_match,substr,strstr,mysql_real_escape_string和stripslashes的多個實例。沒有特殊字符允許任何用戶名......例如,O'Brien不能成爲用戶名! –

+0

@ ChemBlob9999這很酷。你忘了檢查什麼? – aehiilrs

+0

我相信很多東西......我還在學習,這就是爲什麼我在這個網站上問很多問題:)我知道你是正確的......我必須將我的mysql語句更改爲mysqli –