Php 验证中的重定向表单失败
我有一种情况,如果我的表单没有验证,我需要它从url中删除除第一个参数以外的所有参数。这是因为我的表单的结果显示在内容区域的表单下方。如果表单未验证,我需要删除以前的任何结果 我已经在我的form_validate函数中尝试了以下操作Php 验证中的重定向表单失败,php,drupal,redirect,drupal-fapi,drupal-forms,Php,Drupal,Redirect,Drupal Fapi,Drupal Forms,我有一种情况,如果我的表单没有验证,我需要它从url中删除除第一个参数以外的所有参数。这是因为我的表单的结果显示在内容区域的表单下方。如果表单未验证,我需要删除以前的任何结果 我已经在我的form_validate函数中尝试了以下操作 // Check if there were any errors. $errors = form_set_error(); if (!empty($errors)) { drupal_goto(arg(0)); } 目标页面显然是相同的,只是除去第一个参数
// Check if there were any errors.
$errors = form_set_error();
if (!empty($errors)) {
drupal_goto(arg(0));
}
目标页面显然是相同的,只是除去第一个参数之外的所有参数都被剥离。问题是Drupal忘记了以前的表单状态以及表单验证函数引起的错误
// Check if there were any errors.
$errors = form_set_error();
if (!empty($errors)) {
drupal_goto(arg(0));
}
我还尝试更改表单验证函数中的#重定向值,但没有成功
有什么建议吗?如果表单数据不大,可以将其存储在
$\u会话中。然后检查重定向后它是否存在
我不熟悉Drupal,但您必须能够访问过滤后的表单值。因此,您不必使用$\u POST
字段进行验证,而是使用存储的$\u会话
值进行验证
简化示例
session_start();
// ... Previous Validation
// Check if there were any errors.
$errors = form_set_error();
if (!empty($errors)) {
$_SESSION['form_state'] = $form_state;
drupal_goto(arg(0));
}
重定向后
session_start();
$form_state = $_SESSION['form_state']);
unset($_SESSION['form_state']);
// The rest of the script....
你把自己置于一个糟糕的境地。好了,你不能在不失去$form_状态的情况下重定向。除非提交表单,否则重定向将不起作用,因此只要表单未验证,您就不会成功
我不知道您是如何设置代码的,但在我看来,在$form_state
中设置一个变量,并使用该变量来确定是否应该隐藏/显示结果,会让您更幸运
另一种选择是在全局$\u会话['batch\u form\u state']
中保存$form\u state
,以便在启动表单时使用它。我以前没有尝试过,它有点粗糙,但它应该可以工作。在自定义PHP网站中,您的方法可以工作。但是,Drupal有自己的表单处理API。实际上,这更像是一个Drupal问题,而不是PHP问题,甚至是表单验证问题。快速扫描API文档,它提到$form_state['values']数组,我猜这是所有过滤的表单值,但您是对的,乍一看,它似乎不是解析除$u POST之外的任何内容的方法。为什么不在会话中存储$form_状态,然后假装表单已经过验证,并用会话值覆盖$form_状态