Cita: No logro entender esta sentencia, por lo tanto no puedo razonar el criterio aplicado.
action="guardar.php?accion=guardar"
Esto solo sirve para pasar al archivo guardar.php una variable de la misma forma como se pasa mediante un enlace (<a href=guardar.php?accion=guardar>) y por lo tanto para verificar que este archivo registrar.php recibe esta variable se debe consultar el arreglo $_GET[ ] y para recuperar los datos ingresados en el formulario se debe consultar el arreglo $_POST[ ]; y eso es algo que no se hace en el código que tienes. Esto se aplica en las sentencias if( ).
if (!isset($_GET['accion'])) elseif($_GET['accion']=="guardar")
Y tambien al recuperar los datos del formulario.
values("$_POST[nombre]","$_POST[apellido]","$_POST[dni]")