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 original- UPDATE-  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.