Voy a comentar cada parte de tu código para que entiendas por qué falla:
   
Código Javascript
:
Ver original- /* Bien. Creas un nuevo campo y lo asignas a la variable elem */ 
- elem=document.createElement('input') 
- /* Mal. Vuelves a crear un nuevo campo y lo vuelves a asignar a elem, pisando el anterior valor */ 
- elem=document.createElement('input') 
- /* Mal. Vuelves a crear un nuevo campo y lo vuelves a asignar a elem, pisando el anterior valor */ 
- elem=document.createElement('input') 
-   
- elem.type = "text" 
- elem.value = "<?php $a ?>" 
- elem.name = "nada" 
-   
- /* Mal. Con document.getElementById() sólo puedes obtener un elemento a la vez */ 
- var oldElement = document.getElementById("pn,sn,pa"); 
-   
- /* Sólo llamas una vez al método replaceChild(). Por lo que sólo reemplazarás un elemento */ 
- oldElement.parentNode.replaceChild(elem, oldElement); 
Lo mejor es que crees una función que reciba como parámetro el id del elemento a reemplazar, el texto y el nombre del nuevo campo. Por ejemplo:   
Código Javascript
:
Ver original- function reemplazar(elemento, texto, nombre) { 
-     /* Parámetros: 
-             elemento: id del elemento que será reemplazado 
-             texto: texto del campo que será creado 
-             nombre: nombre del campo que será creado 
-   
-             Ejemplo de llamada a la función: 
-                 reemplazar("pn", "texto", "t1"); 
-             Reemplazará el elemento con id "pn" por un nuevo campo con name "t1" con el texto "texto" 
-     */ 
-     var elem = document.getElementById("elemento"); 
-     var campo = document.createElement("input"); 
-     campo.type = "text"; 
-     campo.name = nombre; 
-     campo.value = texto; 
-     elem.parentNode.replaceChild(campo, elem); 
- }