El fallo es que no tienes control sobre las acciones de tu script, es decir, el bloque de código que hace el UPDATE siempre se va a ejecutar mientras las condiciones del bloque sean ciertas.
En el código que provoca el "fallo" siempre extraes algo de la base de datos usando la sesión activa, y ese algo siempre lo asignas a la variable $tpsl y como dicha variable se usa antes del UPDATE entonces hay una gran posibilidad de que dicho bloque se ejecute sin que lo esperes mientras se cumpla la condición.
Tu problema actual es de lógica ciertamente, no de programación.
¿Se entiende lo que te digo?
A eso me refería con "bandera" inicialmente, una serie con condiciones que limiten efectivamente el bloque que hace el UPDATE.
Las condiciones que tienes actualmente son débiles y nada objetivas, ya que tu script siempre se ejecuta independientemente de lo que exista en la URLs, sesión, etc.
Piensa en algo así:
Código PHP:
Ver originalif (/* ¿qué es requerido para que el UPDATE se realice? */) {
// UPDATE
}
Eso.