Tiene todo el sentido del mundo, ¿como esperas recibir valores que no asignas?
Mira, aquí lo haces bien:
Código PHP:
$name = $_POST['nombre'];
Pero no haces lo mismo con $cp, $direccion, etc...
Si en el script original sirve es porque hace uso de register_globals, y en tu script actual no.
Y bueno, register_globals está considerado como obsoleto, así que la única forma -
además de bien hecha- es definiendo las variables usando $_POST en tu caso.