2013-11-14 4 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

OK @Nanne ... Я задам вопрос, который предает мой статус новобранца серверами ... как бы я это сделал? Я могу проверить пропускную способность с помощью моей услуги веб-хостинга (лучшее разрешение, которое я могу получить, составляет 30-минутные блоки в течение 24-часового периода), и я могу проверить использование mySQL (просто показывает, насколько я могу сказать, сколько места занимают мои сохраненные данные) , –

ответ

2

Если я правильно понял, ваш вопрос заключается в том, нормально ли проверять профиль на наличие изменений. Для меня, после того, как я проверил свой код, это гораздо больше, чем просто производительность ...

  • Начнут с производительностью: AFAIK MySQL запросов медленнее, чем в основных PHP сравнения, это правда, - но в этой шкале я действительно не думаю, что это имеет большое значение. Мы говорим о двух очень простых запросах, которые не будут обрабатывать много данных.
  • Давайте подумаем о том, что увидит пользователь (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 –

Смежные вопросы