I have a function that is working fine with query parameters to filter the data, but the customer wants a form to enter the date selections. The form is no problem. But just to make it easier for me, I want the form to set the query parameters and return to the orignal function (menu item) so I don't have to re-code a lot. function stats_form_submit($form, &$form_state) { $start = implode('-', $form_state['values']['start_date']); $end = implode('-', $form_state['values']['end_date']); $g = $_GET; unset($g['q']); $g['start'] = $start; $g['end'] = $end; $r = ''; $sep = ''; foreach ($g as $key => $value) { $r .= "$sep$key=$value"; $sep = '&'; } drupal_set_message("going to $r"); $form_state['redirect'] = url($_GET['q'], array('query' => $r)); drupal_set_message(print_r($_SESSION, true)); } When I do this several weird things happen. First, there is an extra slash in the URL; i.e. instead of "stats/6?end=8-31-2010", I get "/stats/6?end=8-31-2010" (of course with the usual garbagy encoding). I don't know if that is the reason, but te second problem is that the tid (6 in this example) passed from the menu now includes the query string, making it fail the numeric test and not setting $_GET['end']. Is there a better, safer way to return the submitted form data as a query string? Nancy Injustice anywhere is a threat to justice everywhere. -- Dr. Martin L. King, Jr.
Hi Nancy, The actual redirection of forms is handled by drupal_redirect_form: http://api.drupal.org/api/function/drupal_redirect_form/6 Which looking at the code, passes the $form_state['redirect'] to drupal_goto. drupal_goto has a second argument for the query string, so I think the end of your form submit function may want to look something like: drupal_set_message("going to $r"); $form_state['redirect'] = array($_GET['q'], array('query' => $r)); drupal_set_message(print_r($_SESSION, true)); Hope that helps! Regards Steven Jones ComputerMinds ltd - Perfect Drupal Websites Phone : 024 7666 7277 Mobile : 07702 131 576 Twitter : darthsteven http://www.computerminds.co.uk On 30 September 2010 20:34, nan wich <nan_wich@bellsouth.net> wrote:
I have a function that is working fine with query parameters to filter the data, but the customer wants a form to enter the date selections. The form is no problem. But just to make it easier for me, I want the form to set the query parameters and return to the orignal function (menu item) so I don't have to re-code a lot. function stats_form_submit($form, &$form_state) { $start = implode('-', $form_state['values']['start_date']); $end = implode('-', $form_state['values']['end_date']); $g = $_GET; unset($g['q']); $g['start'] = $start; $g['end'] = $end; $r = ''; $sep = ''; foreach ($g as $key => $value) { $r .= "$sep$key=$value"; $sep = '&'; } drupal_set_message("going to $r"); $form_state['redirect'] = url($_GET['q'], array('query' => $r)); drupal_set_message(print_r($_SESSION, true)); } When I do this several weird things happen. First, there is an extra slash in the URL; i.e. instead of "stats/6?end=8-31-2010", I get "/stats/6?end=8-31-2010" (of course with the usual garbagy encoding). I don't know if that is the reason, but te second problem is that the tid (6 in this example) passed from the menu now includes the query string, making it fail the numeric test and not setting $_GET['end'].
Is there a better, safer way to return the submitted form data as a query string?
Nancy
Injustice anywhere is a threat to justice everywhere. -- Dr. Martin L. King, Jr.
Thanks, Steven. That was real close, but should be: $form_state['redirect'] = array($_GET['q'], $r); Nancy Injustice anywhere is a threat to justice everywhere. -- Dr. Martin L. King, Jr. ________________________________ From: Steven Jones The actual redirection of forms is handled by drupal_redirect_form: http://api.drupal.org/api/function/drupal_redirect_form/6 Which looking at the code, passes the $form_state['redirect'] to drupal_goto. drupal_goto has a second argument for the query string, so I think the end of your form submit function may want to look something like: drupal_set_message("going to $r"); $form_state['redirect'] = array($_GET['q'], array('query' => $r)); drupal_set_message(print_r($_SESSION, true));
participants (2)
-
nan wich -
Steven Jones