当重定向回带有提交表单的页面时,如何在PHP中标记缺少的字段?

当重定向回带有提交表单的页面时,如何在PHP中标记缺少的字段?,php,redirect,error-handling,http-headers,Php,Redirect,Error Handling,Http Headers,我在我的网站的页脚中有一个表格,出现在每个页面上。我需要这样做,如果用户提交带有空白字段的表单,它将在表单中标记错误消息。它当前将它们定向到另一个页面,在该页面中,数据将提交到另一个服务器。我已经在为此使用JavaScript,但需要添加一个附加的验证层和服务器端代码 我知道如何检测表单字段是否为空,但如何使用服务器端代码重定向回引用页面,并在页脚中包含一些可用于检测哪些字段为空的参数 我假设我必须将PHP的header()与http\u referer一起使用,但是如何将参数传递回该页面而不在

我在我的网站的页脚中有一个表格,出现在每个页面上。我需要这样做,如果用户提交带有空白字段的表单,它将在表单中标记错误消息。它当前将它们定向到另一个页面,在该页面中,数据将提交到另一个服务器。我已经在为此使用JavaScript,但需要添加一个附加的验证层和服务器端代码

我知道如何检测表单字段是否为空,但如何使用服务器端代码重定向回引用页面,并在页脚中包含一些可用于检测哪些字段为空的参数


我假设我必须将PHP的header()与http\u referer一起使用,但是如何将参数传递回该页面而不在URL中显示任何内容?

$\u SESSION
中记录无效/空字段,并在表单中用CSS标记它们:

session_start();

// When you begin validating your form, clear out any old fields from $_SESSION
$_SESSION['previous'] = array();
$_SESSION['invalid'] = array();

// when you encounter an empty or invalid field,
// add it to an array in $_SESSION
$_SESSION['invalid']['fieldname'] = TRUE;

// Store the previous POST value too
$_SESSION['previous']['fieldname'] = $_POST['fieldname'];
在表单中,您可以检查是否存在无效字段,并添加CSS类以指示无效。这会将类设置为无效:

<input name='fieldname' type='text'
  class='<?php if (isset($_SESSION['invalid']['fieldname'])) echo "invalid";?>' 
  value='<?php if (isset($_SESSION['previous']['fieldname'])) echo htmlentities($_SESSION['previous']['fieldname'], ENT_QUOTES); ?>'
/>

$\u会话
中记录无效/空字段,并在表单中用CSS标记它们:

session_start();

// When you begin validating your form, clear out any old fields from $_SESSION
$_SESSION['previous'] = array();
$_SESSION['invalid'] = array();

// when you encounter an empty or invalid field,
// add it to an array in $_SESSION
$_SESSION['invalid']['fieldname'] = TRUE;

// Store the previous POST value too
$_SESSION['previous']['fieldname'] = $_POST['fieldname'];
在表单中,您可以检查是否存在无效字段,并添加CSS类以指示无效。这会将类设置为无效:

<input name='fieldname' type='text'
  class='<?php if (isset($_SESSION['invalid']['fieldname'])) echo "invalid";?>' 
  value='<?php if (isset($_SESSION['previous']['fieldname'])) echo htmlentities($_SESSION['previous']['fieldname'], ENT_QUOTES); ?>'
/>

我认为没有必要将它们发送到其他页面。正如您已经知道的,使用Javascript和PHP进行数据验证很容易

  • 您应该检查文件顶部的已发布表单数据
  • 验证数据。将错误放入数组中,以便可以随时回显错误
  • 检查是否发现任何错误

       // Loop through the $_POST array, which comes from the form...
    
    $errors = array();
        foreach($_POST AS $key => $value)
    
    {
    
    // first need to make sure this is an allowed field
        if(in_array($key, $allowedFields))
    {
        $$key = $value;
    
        // is this a required field?
        if(in_array($key, $requiredFields) && $value == '')
        {
            $errors[] = "The field $key is required.";
        }
    }
    
    }

  • 如果有错误,重新显示页面并列出错误,以便用户知道他们做错了什么,并可以修复错误。此方法还允许您使用保存的值重新填充表单字段,以便在出现错误时用户不必再次键入所有内容


  • 我认为没有必要将它们发送到另一个页面。正如您已经知道的,使用Javascript和PHP进行数据验证很容易

  • 您应该检查文件顶部的已发布表单数据
  • 验证数据。将错误放入数组中,以便可以随时回显错误
  • 检查是否发现任何错误

       // Loop through the $_POST array, which comes from the form...
    
    $errors = array();
        foreach($_POST AS $key => $value)
    
    {
    
    // first need to make sure this is an allowed field
        if(in_array($key, $allowedFields))
    {
        $$key = $value;
    
        // is this a required field?
        if(in_array($key, $requiredFields) && $value == '')
        {
            $errors[] = "The field $key is required.";
        }
    }
    
    }

  • 如果有错误,重新显示页面并列出错误,以便用户知道他们做错了什么,并可以修复错误。此方法还允许您使用保存的值重新填充表单字段,以便在出现错误时用户不必再次键入所有内容


  • 您不需要
    isset
    检查和
    unset
    。将变量设置为
    array()
    会将其设置为空数组,而不考虑其以前的值。@Michael。谢谢你能给我举一个例子,说明如何对已填写的任何有效字段进行结转,以便填充已填写的字段吗?我试过了,但似乎无法让它继续增值。@Zoolander我在上面添加了更多内容。谢谢!如果我去填写表单,它有空字段,那么服务器端代码就会出现错误。如果我浏览到另一个页面,但没有完成表单提交,则会保留填写的值和错误消息(即使在单击多个页面之后)。如果用户访问另一个页面而不是提交表单,有没有办法让他们离开?因此,基本上,如何才能使错误仅在从处理表单处理的PHP文件发送头()时出现?@Zoolander在其他页面上,可以使用
    $\u SESSION['previous']=array()清除值$_会话['invalid']=array()
    您不需要设置
    复选框和取消设置
    复选框。将变量设置为
    array()
    会将其设置为空数组,而不考虑其以前的值。@Michael。谢谢你能给我举一个例子,说明如何对已填写的任何有效字段进行结转,以便填充已填写的字段吗?我试过了,但似乎无法让它继续增值。@Zoolander我在上面添加了更多内容。谢谢!如果我去填写表单,它有空字段,那么服务器端代码就会出现错误。如果我浏览到另一个页面,但没有完成表单提交,则会保留填写的值和错误消息(即使在单击多个页面之后)。如果用户访问另一个页面而不是提交表单,有没有办法让他们离开?因此,基本上,如何才能使错误仅在从处理表单处理的PHP文件发送头()时出现?@Zoolander在其他页面上,可以使用
    $\u SESSION['previous']=array()清除值$_会话['invalid']=array()