Creo que no son necesarios los formularios. No he mirado el drag&drop que utilizas, pero por seguro deberás usar un onmouseout y un onmouseup para que cuando el cursor se quite del elemento, se "desactive" el drag.
Según creo yo, deberias añadir una función, algo así:
<div id="elemento_23" onmouseout="acabardrag();ACTUALIZARDB(this.offsetTop, this.offsetLeft, this.id);" onmouseup="acabardrag();ACTUALIZARDB(this.offsetTop, this.offsetLeft, this.id);">
En la función ACTUALIZARDB deberías usar AJAX. AJAX es siempre igual, por lo que mirando un código cualquiera podemos sacar qué poner.
<script type="text/javascript">
// Aquí una función que inicie el AJAX, no la pongo para que no quede muy largo, pero en el foro de AJAX la podrás encontrar
var ajax = new Ajax(); // Cambiar lo de Ajax(); pr el nombre de la funciónde arriba.
function ACTUALIZARDB(top, left, id) {
ajax.open('GET', 'actualizardb.php?top=' + top + '&left=' + left + '&id=' + id, true);
ajax.send(null);
}
no hay comprobaciones sobre si todo fue bien y tal, porque imagino que cada vez que el usuario mueva algo no querrás que ponga "Movido/No movido"...
Hay que explicar ajax.open(METODO, URL, ASINCRONICA);
El metodo es GET o POST, si se usa POST hay que enviar variables con ajax.send, pero al usar GET en ajax.send simplemente enviamos null.
La URL corresponde al archivo PHP que hará la consulta a la base de datos, al que enviamos por GET los datos recogidos, la ID del elemento (para especificar qué actualizar, por supuesto se puede quitar o modificar según necesites) y los offset, que son la posición.
Lo de ASINCRONICA, quiere decir si la petición se procesará de forma asincronica o no, si es se procesa según llega, aunque llege una consulta que se hizo después de otra; para usar esto se usa "true"; pero si quieres que sea ordenadamente deberás poner "false" (no te lo recomiendo, pues si una se "queda pillada" el resto, en teoría, tambien)