Saving form after altering it I'm altering the "Edit menu link" form

function module_name_form_menu_edit_item_alter(&amp;$form, &amp;$form_state, $form_id) {
    $form['html_content'] = array(
        '#type' =&gt; 'textarea',
        '#title' =&gt; t('HTML Content'),
        '#maxlength' =&gt; 180,
        '#required' =&gt; FALSE,
        '#description' =&gt; 'Put here the HTML code of the menu'
    );
}


The text area is showing fine, but it's not saving the information I put into.
How can I solve that?
Generally speaking, only the form builds with system_settings_form() automatically saves the form field content of all the form fields present in the form. This is because its form submission handler (system_settings_form_submit()) contains the following code.

  foreach ($form_state['values'] as $key =&gt; $value) {
    if (is_array($value) &amp;&amp; isset($form_state['values']['array_filter'])) {
      $value = array_keys(array_filter($value));
    }
    variable_set($key, $value);
  }


The form you are altering has a different form submission handler, menu_edit_item_submit(), which doesn't contain similar code. The function that is called for saving the menu item, menu_link_save() saves the fields it knows of, and which are defined in the database schema for the table used for this purpose.

  if (!$existing_item) {
    $item['mlid'] = db_insert('menu_links')
      -&gt;fields(array(
      'menu_name' =&gt; $item['menu_name'], 
      'plid' =&gt; $item['plid'], 
      'link_path' =&gt; $item['link_path'], 
      'hidden' =&gt; $item['hidden'], 
      'external' =&gt; $item['external'], 
      'has_children' =&gt; $item['has_children'], 
      'expanded' =&gt; $item['expanded'], 
      'weight' =&gt; $item['weight'], 
      'module' =&gt; $item['module'], 
      'link_title' =&gt; $item['link_title'], 
      'options' =&gt; serialize($item['options']), 
      'customized' =&gt; $item['customized'], 
      'updated' =&gt; $item['updated'],
    ))
      -&gt;execute();
  }




db_update('menu_links')
  -&gt;fields(array(
  'menu_name' =&gt; $item['menu_name'], 
  'plid' =&gt; $item['plid'], 
  'link_path' =&gt; $item['link_path'], 
  'router_path' =&gt; $item['router_path'], 
  'hidden' =&gt; $item['hidden'], 
  'external' =&gt; $item['external'], 
  'has_children' =&gt; $item['has_children'], 
  'expanded' =&gt; $item['expanded'], 
  'weight' =&gt; $item['weight'], 
  'depth' =&gt; $item['depth'], 
  'p1' =&gt; $item['p1'], 
  'p2' =&gt; $item['p2'], 
  'p3' =&gt; $item['p3'], 
  'p4' =&gt; $item['p4'], 
  'p5' =&gt; $item['p5'], 
  'p6' =&gt; $item['p6'], 
  'p7' =&gt; $item['p7'], 
  'p8' =&gt; $item['p8'], 
  'p9' =&gt; $item['p9'], 
  'module' =&gt; $item['module'], 
  'link_title' =&gt; $item['link_title'], 
  'options' =&gt; serialize($item['options']), 
  'customized' =&gt; $item['customized'],
))
  -&gt;condition('mlid', $item['mlid'])
  -&gt;execute();


In your case, you need to alter the form, adding the form field, and a form submission handler that saves your data in your own database table.
As there are more than one button on that form, I prefer associate a new form submission handler to the specific button, such as with the following code.

$form['actions']['submit']['#submit'][] = 'mymodule_menu_edit_save_submit';


You could also be interested in doing something when the menu item is deleted (in which case, you should delete the data from your database table); the delete button is $form['actions']['delete'].