Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 验证中的重定向表单失败_Php_Drupal_Redirect_Drupal Fapi_Drupal Forms - Fatal编程技术网

Php 验证中的重定向表单失败

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)); } 目标页面显然是相同的,只是除去第一个参数

我有一种情况,如果我的表单没有验证,我需要它从url中删除除第一个参数以外的所有参数。这是因为我的表单的结果显示在内容区域的表单下方。如果表单未验证,我需要删除以前的任何结果

我已经在我的form_validate函数中尝试了以下操作

// 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_状态