"Mandar datos de un formulario a un archivo?"
 
El proceso que haces tiene varias partes cláramente diferenciadas:
1) formulario HTML -> enviar datos a tu script PHP de proceso
2) recolecatar esas variables que recibiras del punto 1 en tu script PHP.
3) El proceso propiamente dicho con esas variables. 
En tu caso al crear el archivo .. usas $valor y .. además fuera del bucle foreach pero usas "eval()"? ... 
Si lo que realmente deseas es generar una línea tipo:
/$nombre_variable = 'valor';
para tu datos.txt por variable que llege de tu formulario .. deberías hacer algo tipo:  
 Código PHP:
    <?
$archivo = "datos.txt"; 
if ($id = fopen ($archivo, "w+")) 
foreach($_POST as $nombre_campo => $valor){ 
   $asignacion = "\$" . $nombre_campo . "='" . $valor . "';\n"; 
    fputs ($id, $asignacion); 
 
} 
fclose ($id) 
?>    
  (el \n es salto de línea para tu archivo generado .. ) 
Un saludo,