我有一个表单,提交用户填写的许多不同字段。
PHP页面接收表单并检查是否所有字段都已填满。如果其中一个丢失,它应该返回到表单并指定缺少哪一个。
我想知道将PHP网站中捕获的所有字段传递回表单页面的最佳方法是什么,这样用户就不必重新填写整个表单。
以下是我的检查方法:
if (empty($firsName) || empty($lastName) || empty($address) || empty ($city) || empty ($state) || empty($zip))
{
header('Location: checkout.php');
}
我不想通过URL传递它们,因为可能还有许多其他字段需要检查,而且看起来有点重...通常哪种方式可以实现呢?
谢谢!
答案 0 :(得分:1)
如果您不确定如何操作,最好的方法是使用框架。如果那不是一个选项,那么我通常会有一个函数来检查是否有一个已发布的值,并在必要时将其打印出来:
function getElementValue($elementName)
{
if (isset($_POST[$elementName]))
{
return htmlspecialchars($_POST[$elementName]);
}
return '';
}
在您的页面中:
<input type="text" name="firstName" value="<?php echo(getElementValue('firstName')); ?>" />
您需要一个类似但不同的复选框功能等。
答案 1 :(得分:0)
为什么不在发布到其他页面之前检查它们是否为空,如果它们都是好的重定向,则显示错误
<form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
无论如何,你问题的答案
您有几个选择,您可以将它们单独存储到会话中,或者将它们作为数组存储到会话中,并在检索完所有内容后取消设置索引
你可以通过GET参数传递虽然看起来很冗长而且获取并不是最安全的东西,因为它很重,你不会注意到页面加载时间的任何明显差异,不应该太关注网址看起来像
如果你有一个数据库,你可以将它存储在一个表中,并在下一页加载时读取并删除它
答案 2 :(得分:0)
将变量保存在会话中,然后在表单页面上回显会话变量。您也可以通过创建另一个会话变量(如$ _SESSION [&#39; error_msg&#39;])并添加到其中来回传错误消息。
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;
}
答案 3 :(得分:0)
尝试以下内容
$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;
}