Hay dos formas de resolverlo:
1) En PHP verificas si la variable contiene o no algo, y de acuerdo a eso le vas agregando las partes del UPDATE a actualizar. Eso es crear la sentencia dinámicamente, y es la mejor de las soluciones.
Código PHP:
$sql = "UPDATE entrada SET ";
if($_POST[Apellido]!="")
{ $sql .= "Surname = '$_POST[Apellido]' ,"}
if($_POST[DNI]!="")
{ $sql .= "DNI= '$_POST[DNI]' ,"}
if($_POST[Name ]!="")
{ $sql .= "Name = '$_POST[Nombre]' ,"}
mysql_query($sql, $link);
2) En la sentencia, debes usar funciones para verificar que no estés alterando el contenido que ya existe. El problema es que hacer que funcione bien implica crear una consulta muy complicada.
Código MySQL:
Ver originalUPDATE entrada
SET Surname
= IF( '$_POST[Apellido]' = '', Surname
, '$_POST[Apellido]'), IF( '$_POST[DNI]' = '', Surname
, '$_POST[DNI]'), IF( '$_POST[Name]' = '', Surname
, '$_POST[Nombre]');
Este ejemplo no abarca todas las condiciones posibles.
Consejo: No uses en el nombre de los campos, tablas o bases de datos nombres en inglés, en tanto sea posible. Es
muy probable que termines poniendo nombres que son
palabras reservadas en SQL, y eso te generará errores de sintaxis indetectables.