That worked perfectly and it even persists the error messages, which means I can remove the "drupal_set_message" line I had included.

Thank you Saint-Genest, for the help and not shrugging me off and telling me to go to the support list like David did (which I did and did not receive a response).

On 10/31/07, Saint-Genest Gwenael <gwenael.saint-genest@makina-corpus.com> wrote:
Hi,

    Your "drupal_goto()" doesn't work because at this point the value
of $_REQUEST['destination'] is already set [1]. So your drupal_goto()
will reload the page but not with 'user'. After reload no validation
is needed, your function is not called :(


I think, a quick solution is to unset 'destination' value before
calling drupal_goto() :

function myutility_user_login_validate($form_id, $form_values) {
   user_login_validate($form_id, $form_values);
   if (count(form_get_errors()) > 0) {
     unset($_REQUEST['destination']);
     drupal_set_message('test error message');
     drupal_goto('user');
   }

It's not a beauty solution but i think it's the simplest :)

Gwen


[1] http://api.drupal.org/api/function/drupal_goto/5


John Barreiros wrote:
> Hi
>
> First, I realize what I'm doing isn't the most usable, but it's how the
> client wants it.
>
> On the homepage, the user login block is styled all fancy and compact.
> Unfortunately, it's compactness prevents a place for an error message if the
> user messes up their username or password.
>
> So, what I'd like to do, when the form fails validation, is redirect the
> user to "/user" which displays the regular login form along with the error
> messages that would of displayed within the block.
> I tried the following (in my own module),
>
> function myutility_form_alter($form_id, &$form) {
>   switch ($form_id) {
>     case 'user_login_block':
>       $form['#validate'] = array('utility_user_login_validate' =>
> array($form_id, $form));
>       unset($form['links']);
>       break;
>   }
> }
>
> function myutility_user_login_validate($form_id, $form_values) {
>   user_login_validate($form_id, $form_values);
>   if (count(form_get_errors()) > 0) {
>     drupal_set_message('test error message');
>     //print "here";
>     drupal_goto('user');
>   }
> }
>
> The drupal_goto doesn't seem to work here. I'm fairly confident the code is
> making it to the drupal_goto because if I uncomment the "print" statement is
> does get called and prints out "here".
>
> Any ideas why drupal_goto isn't working in this case?
>
> Thanks for the help.
>