У меня есть страница редактирования профиля в моем веб-сайте социальной сети.
Когда пользователи нажимают кнопку отправить в форме. Я запускаю запрос на обновление, чтобы явно обновить поле пользователей в базе данных.
Как я могу оптимизировать этот сценарий, чтобы включить ведение журнала, какие конкретные поля обновляются?
Так, например,
Один сценарий может быть:
Крис обновил фотографию на странице.
Другой сценарий будет:
Крис обновил свой профиль, в том числе:
Кто-нибудь может предложить решение этой проблемы?
Я чувствую, что нет необходимости в коде, так как все это — запрос на обновление.
Спасибо
При написании формы сохраните текущие состояния в $_SESSION
-переменный. Проверьте представленные формы и сравните с данными в $_SESSION
-переменный. Тогда только сделайте обновление на формах, которые изменились.
if($_SESSION['name'] != $myform['name']) { $sql[] = "name = '{$myform['name']}'"; }
if($_SESSION['img'] != $myform['img']) { $sql[] = "img = '{$myform['img']}'"; }
$sqlstring = "UPDATE mytable SET " . implode(",",$sql);
// run the sql
РЕДАКТИРОВАТЬ: реализовать ведение журнала:
// populate the variables (name, img) from the db/session with the highest revision number.
// ie SELECT * FROM mytable where userid = $userid ORDER BY revision DESC LIMIT 1
$revision = $_SESSION['revision'] + 1;
$sql = "INSERT INTO mytable SET img = '$img', name='$name', revision='$revision'";
Вы положили всю эту информацию в $_SESSION
или что-то? Если это так, вы можете отменить сеанс и объявить его снова с новой информацией.
Вы можете использовать пользовательские сеттеры / геттеры, чтобы сделать это. Проверьте код ниже.
Вы также можете добавить дополнительные проверки, чтобы убедиться, что значения изменились, или использовать магические методы, чтобы сделать вещи более динамичными.
class MyObject
{
protected $modifiedFields = array();
public function setField($value) {
if (!in_array('field', $this->modifiedFields)) {
$this->modifiedFields[] = 'field';
}
}
}
Если у вас есть измененные поля, вы можете просто выполнить запрос на обновление, чтобы он содержал только эти поля.