<p>You need to define the <code>value=</code> attribute on your select fields.</p>

<pre><code>&lt;select class="form-control margin-bottom" id="renting" name="fields[renting]"&gt;
{% for option in user.renting.options %}
&lt;option {% if option.selected %}selected="selected"{% endif %}&gt;{{ option }}&lt;/option&gt;
{% endfor %}
&lt;/select&gt;
</code></pre>

<p><strong>Should be:</strong></p>

<pre><code>&lt;select class="form-control margin-bottom" id="renting" name="fields[renting]"&gt;
{% for option in user.renting.options %}
&lt;option value="{{option.value}}"{% if option.selected %}selected="selected"{% endif %}&gt;{{ option }}&lt;/option&gt;
{% endfor %}
&lt;/select&gt;
</code></pre>

<p>I was looking for the answer to the same problem. I narrowed my issue down to the  field. When I removed it the form would submit properly. I fixed a typo in the value attribute and that fixed it.</p>

CC BY-SA 3.0
2016-09-07T04:44:51.587Z
2016-09-07T04:44:51.587Z
tosegard
<p><code>firstName</code>, <code>lastName</code>, and <code>email</code> are actual user fields (not custom), so their <code>name=</code> attributes shouldn’t have the <code>fields[]</code> namespace.</p>

<pre class="lang-html prettyprint-override"><code>&lt;input type="email" class="form-control" id="email" name="email" value="{{ user.email }}"&gt;

&lt;input type="text" class="form-control" id="firstName" name="firstName" value="{{ user.firstName }}"&gt;

&lt;input type="text" class="form-control" id="lastName" name="lastName" value="{{ user.lastName }}"&gt;
</code></pre>

<p>I’m guessing that once you fix those, your <code>phoneNumber</code> custom field will also start saving.</p>

CC BY-SA 3.0
2014-07-26T22:30:29.777Z
That all works apart from the email field. I'm using the 'useEmailAsUsername' => true, config setting if that changes anything.
Niall Thompson
CC BY-SA 3.0
2014-07-26T22:45:20.003Z
I also have the verify email setting on. Ideally this would only be sent when registering new accounts and not when a user is changing their email.
Niall Thompson
CC BY-SA 3.0
2014-07-27T01:48:21.770Z
@NiallThompson to allow the user to change their email you need to pass a password also I believe.
Luke Holder
CC BY-SA 3.0
2014-07-27T04:26:43.130Z
@LukeHolder nails it. Since changing the password and/or email of an existing user is "a big deal", you need to pass in the currently logged in user's password in a field named "password" in order for it to work.
Brad Bell
CC BY-SA 3.0
2014-07-27T19:12:45.300Z
As in a hidden field like this? <input type="hidden" name="password" value="{{ user.password }}">
Niall Thompson
CC BY-SA 3.0
2014-07-27T23:01:39.573Z
@NiallThompson It has to be the  password of the *currently logged in* user.  Not the password for the user you're trying to change the password of.
Brad Bell
CC BY-SA 3.0
2014-07-28T00:23:28.013Z
@NiallThompson plus, `{{ user.password }}` is going to give you the hashed password, and the `"password"` input needs to be set to the unhashed password. The whole point is, users need to prove that they are who they are before they can change their email address/password.
Brandon Kelly
CC BY-SA 3.0
2014-07-26T20:50:54.333Z
2014-07-26T20:50:54.333Z
Brandon Kelly
<p>It should also be noted that to change your password or email, the current password has to be passed along with the request.</p>

<pre><code>// You must pass your current password to change these fields for an existing user
</code></pre>

CC BY-SA 3.0
2014-11-13T10:54:54.247Z
2014-11-13T10:54:54.247Z
Mike Pierce
<p>For starters I see you have a typo...</p>

<p><code>fields[firstName}</code></p>

<p>Should be</p>

<p><code>fields[firstName]</code></p>

<p>Also:</p>

<p><code>{{ user.phoneNumber}}</code></p>

<p>Should be:</p>

<p><code>{{ user.phoneNumber }}</code></p>

CC BY-SA 3.0
2014-07-26T19:30:23.007Z
I've made the changes but the firstName, lastName and email fields won't save still.
Niall Thompson
CC BY-SA 3.0
2014-07-26T18:41:35.447Z
2014-07-26T18:58:20.330Z
2014-07-26T18:58:20.330Z
Natetronn
<p>My edit profile page doensn't save all fields:</p>

<pre class="lang-twig prettyprint-override"><code>&lt;form method="post" action="" accept-charset="UTF-8" enctype="multipart/form-data"&gt;
    &lt;input type="hidden" name="action" value="users/saveUser"&gt;
    &lt;input type="hidden" name="redirect" value="/users/{{ user.username }}"&gt;
    &lt;input type="hidden" name="userId" value="{{ user.id }}"&gt;

    &lt;fieldset&gt;
      &lt;legend&gt;Your Photo&lt;/legend&gt;
    {# Check to see if the user has a photo  #}
    {% if currentUser.photoUrl %}

      &lt;figure&gt;&lt;img src="{{ currentUser.photoUrl(200) }}" /&gt;&lt;/figure&gt;
    {# If a photo exists, give the option to change the user photo #}
    &lt;div class="form-group"&gt;
    &lt;input type="file" name="userPhoto" value="Change Photo" class="form-control"&gt;
    &lt;/div&gt;

    {% else %}

    {# If no photo exists, give the option to upload a new one #}
    &lt;figure&gt;&lt;img src="/assets/img/user.gif" /&gt;&lt;/figure&gt;
    &lt;div class="form-group"&gt;
    &lt;input type="file" name="userPhoto" value="Upload" class="form-control"&gt;
    &lt;/div&gt;
    {% endif %}
  &lt;/fieldset&gt;


  &lt;fieldset&gt;
    &lt;legend&gt;Your Login Details&lt;/legend&gt;
    &lt;div class="form-group"&gt;
    &lt;label for="email"&gt;Email address&lt;/label&gt;
    &lt;input type="email" class="form-control" id="email" name="fields[email]" value="{{ user.email }}"&gt;
    &lt;/div&gt;
  &lt;/fieldset&gt;

  &lt;fieldset&gt;
  &lt;legend&gt;Your Personal Details&lt;/legend&gt;
  &lt;div class="form-group"&gt;
  &lt;label for="firstName"&gt;First Name&lt;/label&gt;
  &lt;input type="text" class="form-control" id="firstName" name="fields[firstName}" value="{{ user.firstName }}"&gt;
  &lt;/div&gt;

  &lt;div class="form-group"&gt;
  &lt;label for="lastName"&gt;Last Name&lt;/label&gt;
  &lt;input type="text" class="form-control" id="lastName" name="fields[lastName]" value="{{ user.lastName }}"&gt;
  &lt;/div&gt;

  &lt;div class="form-group"&gt;
  &lt;label for="phoneNumber"&gt;Contact Number&lt;/label&gt;
  &lt;input type="text" class="form-control" id="phoneNumber" name="fields[phoneNumber]" value="{{ user.phoneNumber}}"&gt;
  &lt;/div&gt;
  &lt;/fieldset&gt;

  &lt;fieldset&gt;
    {% set pets = craft.fields.getFieldbyHandle('pets') %}

  &lt;legend&gt;Your Property Details&lt;/legend&gt;
  &lt;label for="pets"&gt;{{ pets.instructions }}&lt;/label&gt;
  &lt;select class="form-control margin-bottom" id="pets" name="fields[pets]"&gt;
    {% for option in user.pets.options %}
    &lt;option {% if option.selected %}selected="selected"{% endif %}&gt;{{ option }}&lt;/option&gt;
    {% endfor %}
  &lt;/select&gt;

  {% set renting = craft.fields.getFieldbyHandle('renting') %}

  &lt;label for="renting"&gt;{{ renting.instructions }}&lt;/label&gt;
  &lt;select class="form-control margin-bottom" id="renting" name="fields[renting]"&gt;
    {% for option in user.renting.options %}
    &lt;option {% if option.selected %}selected="selected"{% endif %}&gt;{{ option }}&lt;/option&gt;
    {% endfor %}
  &lt;/select&gt;

  &lt;/fieldset&gt;


  &lt;input type="submit" class="btn btn-primary pull-right margin-top" value="Save Profile"&gt;
&lt;/form&gt;
</code></pre>

<p>It only saves the last two fields which means that a user can't change their email address, name or phone number. </p>

<p>I've recently updated Craft to the latest build (Craft Pro 2.1.2566) and also changed user/saveProfile to user/saveUser.</p>

CC BY-SA 3.0
2014-07-26T18:42:52.917Z
Just corrected it but no change.
Niall Thompson
<user-profile>
User Profile Not Saving Changes
# User Profile Not Saving Changes

(Asked by: username_0 on 2014-07-26)

My edit profile page doensn't save all fields:

    
    
    

    
      Your Photo
    {# Check to see if the user has a photo  #}
    {% if currentUser.photoUrl %}

      
    {# If a photo exists, give the option to change the user photo #}
    
    
    

    {% else %}

    {# If no photo exists, give the option to upload a new one #}
    
    
    
    
    {% endif %}
  


  
    Your Login Details
    
    Email address
    
    
  

  
  Your Personal Details
  
  First Name
  
  

  
  Last Name
  
  

  
  Contact Number
  
  
  

  
    {% set pets = craft.fields.getFieldbyHandle('pets') %}

  Your Property Details
  {{ pets.instructions }}
  
    {% for option in user.pets.options %}
    {{ option }}
    {% endfor %}
  

  {% set renting = craft.fields.getFieldbyHandle('renting') %}

  {{ renting.instructions }}
  
    {% for option in user.renting.options %}
    {{ option }}
    {% endfor %}
  

  


  


It only saves the last two fields which means that a user can't change their email address, name or phone number. 
I've recently updated Craft to the latest build (Craft Pro 2.1.2566) and also changed user/saveProfile to user/saveUser.

**Tags:** user-profile

> **Comments:**
> **username_0**: Just corrected it but no change.  

---

## 4 answers

### Answer by username_1 on 2016-09-07. Score: 2 | Accepted answer

You need to define the value= attribute on your select fields.

{% for option in user.renting.options %}
{{ option }}
{% endfor %}


Should be:

{% for option in user.renting.options %}
{{ option }}
{% endfor %}


I was looking for the answer to the same problem. I narrowed my issue down to the  field. When I removed it the form would submit properly. I fixed a typo in the value attribute and that fixed it.


---

### Answer by username_2 on 2014-07-26. Score: 7

firstName, lastName, and email are actual user fields (not custom), so their name= attributes shouldn’t have the fields[] namespace.






I’m guessing that once you fix those, your phoneNumber custom field will also start saving.

> **Comments:**
> **username_0**: That all works apart from the email field. I'm using the 'useEmailAsUsername' => true, config setting if that changes anything.  
> **username_0**: I also have the verify email setting on. Ideally this would only be sent when registering new accounts and not when a user is changing their email.  
> **username_3**: @NiallThompson to allow the user to change their email you need to pass a password also I believe.  
> **username_4**: @LukeHolder nails it. Since changing the password and/or email of an existing user is "a big deal", you need to pass in the currently logged in user's password in a field named "password" in order for it to work.  
> **username_0**: As in a hidden field like this? <input type="hidden" name="password" value="{{ user.password }}">  
> **username_4**: @NiallThompson It has to be the  password of the *currently logged in* user.  Not the password for the user you're trying to change the password of.  
> **username_2**: @NiallThompson plus, `{{ user.password }}` is going to give you the hashed password, and the `"password"` input needs to be set to the unhashed password. The whole point is, users need to prove that they are who they are before they can change their email address/password.  

---

### Answer by username_5 on 2014-11-13. Score: 3

It should also be noted that to change your password or email, the current password has to be passed along with the request.
// You must pass your current password to change these fields for an existing user


---

### Answer by username_6 on 2014-07-26. Score: 2

For starters I see you have a typo...

`fields[firstName}`

Should be

`fields[firstName]`

Also:

`{{ user.phoneNumber}}`

Should be:

`{{ user.phoneNumber }}`

> **Comments:**
> **username_0**: I've made the changes but the firstName, lastName and email fields won't save still.  

---

