Have an issue with looking and moving Unity3D

I am following the book Unity in action and have run into an issue with some of the code. I am unsure if the author tested the code as I have the following issue:

  1. With the scripts added separately all functions work it’s only when they are added together that there is an issue.
  2. When I look up my character automatically moves forward
  3. When I look down my character automatically moves backwards

EDIT: If gravity is set to zero I do not move forward or back, but I do float

My Mouselook script:

public class Mouselook : MonoBehaviour {
public enum RotationAxes
{
MouseXandY = 0,
MouseX = 1,
MouseY = 2
}

public RotationAxes axes = RotationAxes.MouseXandY;

// Use this for initialization
void Start () {

}

public float sensitivityHor = 9.0f;
public float sensitivityVert = 9.0f;

public float minimumVert = -45.0f;
public float maximumVert = 45.0f;

private float _rotationX = 0;

// Update is called once per frame
void Update () {
    if(axes==RotationAxes.MouseX)
    {
        transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityHor, 0);
    }

    else if(axes==RotationAxes.MouseY)
    {
        _rotationX -= Input.GetAxis("Mouse Y") * sensitivityVert;
        _rotationX = Mathf.Clamp(_rotationX, minimumVert, maximumVert);

        float rotationY = transform.localEulerAngles.y;
        transform.localEulerAngles = new Vector3(_rotationX, rotationY, 0);
    }
    else
    {
        _rotationX -= Input.GetAxis("Mouse Y") * sensitivityVert;
        _rotationX = Mathf.Clamp(_rotationX, minimumVert, maximumVert);

        float delta = Input.GetAxis("Mouse X") * sensitivityHor;
        float rotationY = transform.localEulerAngles.y + delta;

        transform.localEulerAngles = new Vector3(_rotationX, rotationY, 0);

    }


}

}

My FPSInput script:

public class FPSInput : MonoBehaviour {

public float speed = 3.0f;
public float gravity = -3f;
private CharacterController _charController;

// Use this for initialization
void Start () {
    _charController = GetComponent<CharacterController>();
}

// Update is called once per frame
void Update () {
    float deltaX = Input.GetAxis("Horizontal") * speed;
    float deltaZ = Input.GetAxis("Vertical") * speed;
    Vector3 movement = new Vector3(deltaX, 0, deltaZ);
    movement = Vector3.ClampMagnitude(movement, speed);
    movement.y = gravity;

    movement *= Time.deltaTime;
    movement = transform.TransformDirection(movement);
    _charController.Move(movement);


}

}

move this line:

movement.y = gravity;

so its after this line:

 movement = transform.TransformDirection(movement);

You don’t want to transformDirection on the gravity vector

-E