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