Можете ли вы объяснить это немного дальше? Почему вы разрешаете отправлять форму с измененными данными, если вы не можете обновить саму запись? Если вы нажмете Save
, сравните данные формы с данными запроса, и действие вызовет функцию Create
, если данные отличаются.
Допустим, у вас есть запрос и форма вещи:
<cfquery name="myThing">
SELECT
thing_id,
thing_name,
thing_foo
FROM
things
where
thingID = <cfqueryparam value="#url.thingID#">
</cfquery>
<form>
<input type="hidden" name="thing_id" value="#myThing.thing_id#">
<input type="text" name="thing_name" value="#myThing.thing_name#">
<input type="text" name="thing_foo" value="#myThing.thing_foo#">
<button type="submit">Submit</button>
</form>
Если вам нужно сравнить отправленные данные с данными, которые уже есть в базе данных, вы можете просто снова выполнить запрос на странице обработки формы и сравнить эти значения с представленными значениями формы. В этом примере предполагается, что вы назвали поля формы такими же, как столбцы таблицы базы данных.
<cfset delta = false>
<cfloop item="key" collection="#myThing#">
<cfif structKeyExists(form, key)>
<cfif form[key] NEQ myThing[key]>
<cfset delta = true>
</cfif>
</cfif>
</cfloop>
Если какие-либо значения отличаются, создайте новую запись. Не представляю, что нужно делать, если отправленные значения не изменились.
<cfif delta>
<!--- Create a new record. --->
<cfelse>
<!--- ¯\_(ツ)_/¯ --->
</cfif>
Я также видел, что это сделано, когда исходные значения хранятся в скрытых полях формы и отправляются вместе с редактируемыми полями формы. Вы можете сделать это, но нет никакой гарантии, что значения в БД не изменились между тем, как вы рендерили форму и затем отправили ее.
У вас все еще будет проблема с тем, как определить, изменились ли значения БД на пути к БД, но я не уверен, нужна ли вам такая детальная проверка.