Option #1 is fine, though probably overkill. Option #1 is not fine because it's not idempotent.
Option #2 is a BAD idea.  That would be misusing PUT.  PUT should be used primarily when your request data payload is an opaque block of data, usually either large or hierarchical.  Smaller, non-hierarchical payloads make more sense as POST.
Also, try to avoid changing state via query parameters.  There's nothing technically dangerous about that if it's not a GET request, but it's not really RESTful.
In this case, what you should be doing is:
POST /players HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 12
name=Gretsky
This should return a 201 Created response.  (There is an exception to this: If you don't create the resource immediately, and it might be rejected at a later time, use 202 Accepted instead.)
Writing a REST web service that uses more of HTTP than POST and GET should only be done after having read the HTTP specification.  (It's a very useful read.)  That rule is a bit looser if you're using a framework that makes all the decisions for you.