将许多变量从PHP传递回表单
我有一个表单,可以提交用户填写的许多不同字段 PHP页面接收表单并检查是否所有字段都已填写。如果其中一个丢失,它应该返回表单并指定丢失的是哪一个 我想知道最好的方法是将PHP站点中捕获的所有字段传递回表单页面,这样用户就不必重新填充整个表单 我是这样检查的:将许多变量从PHP传递回表单,php,forms,variables,parameter-passing,Php,Forms,Variables,Parameter Passing,我有一个表单,可以提交用户填写的许多不同字段 PHP页面接收表单并检查是否所有字段都已填写。如果其中一个丢失,它应该返回表单并指定丢失的是哪一个 我想知道最好的方法是将PHP站点中捕获的所有字段传递回表单页面,这样用户就不必重新填充整个表单 我是这样检查的: if (empty($firsName) || empty($lastName) || empty($address) || empty ($city) || empty ($state) || empty($zip)) { header(
if (empty($firsName) || empty($lastName) || empty($address) || empty ($city) || empty ($state) || empty($zip))
{
header('Location: checkout.php');
}
我不想通过URL传递它们,因为可能还有很多其他字段需要检查,而且看起来有点重。。。通常采用哪种方法来实现这一点
谢谢 在发布到另一个页面之前,为什么不检查它们是否为空?如果它们都很好,请重定向,否则,显示错误
<form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
将变量保存在会话中,然后在表单页面上回显会话变量。通过创建另一个会话变量,如$\u session['error\u msg'],并将其添加到该变量中,也可以通过这种方式传回错误消息
session_start();
$errors = array();
if(empty($firstName)){
$errors[] = 'Please enter your first name';
}
if(empty($lastName)){
$errors[] = 'Please enter your last name';
}
if(empty($address)){
$errors[] = 'Please enter your address';
}
if(empty($city)){
$errors[] = 'Please enter your city';
}
if(empty($state)){
$errors[] = 'Please enter your state';
}
if(empty($zip)){
$errors[] = 'Please enter your zip code';
}
if(!empty($errors)){
$_SESSION['firstName'] = $firstName;
$_SESSION['lastName'] = $lastName;
$_SESSION['address'] = $address;
$_SESSION['city'] = $city;
$_SESSION['state'] = $state;
$_SESSION['zip'] = $zip;
$_SESSION['errors'] = $errors;
header('Location: checkout.php');
exit;
}
如果您不确定如何做,最好的方法是使用框架。如果这不是一个选项,那么我通常有一个函数来检查是否有已发布的值,并在必要时打印出来:
function getElementValue($elementName)
{
if (isset($_POST[$elementName]))
{
return htmlspecialchars($_POST[$elementName]);
}
return '';
}
在您的页面中:
<input type="text" name="firstName" value="<?php echo(getElementValue('firstName')); ?>" />
试试下面的方法
$validate_fields_arr = array('firsName', 'lastName', ...)
$returntourl = false;
foreach($validate_fields_arr as $v){
if(empty($_POST[$v]))
$returntourl = true;
}
if($returntourl){
$return_str = '<html><title>ERROR!</title><body><h3>ERROR on data submitted!</h3>';
$return_str .= '<form action="checkout.php" method="post" name="retfrm">';
foreach($_POST as $k=>$v){
$return_str .= '<input type="hidden" name="'.$k.'" value="'.$v.'">';
}
$return_str .= '</form>';
$return_str .= '</body><script>document.retfrm.submit()</script></html>';
echo $return_str;
exit;
}
$validate\u fields\u arr=array('firsName','lastName',…)
$returntourl=假;
foreach($validate\u fields\u arr as$v){
如果(空($_POST[$v]))
$returntourl=真;
}
如果($returntourl){
$return_str='ERROR!提交的数据出错!';
$return_str.='';
foreach($\发布为$k=>$v){
$return_str.='';
}
$return_str.='';
$return_str.=“document.retfrm.submit()”;
echo$return\u str;
出口
}
我认为您可以在提交表单之前验证表单,只需发布到表单页面而不是其他地方,或者使用包含来包含表单而不是重定向。或将字段存储在会话中。有很多选择。这是同时进行客户端和服务器端验证的地方。通过在发布表单之前检查字段是否为空,您不必担心重新填充具有值的字段