PHP 验证成功后如何自动提交表单数据?
Posted
技术标签:
【中文标题】PHP 验证成功后如何自动提交表单数据?【英文标题】:How do I submit a form's data automatically after successful PHP validation? 【发布时间】:2014-01-13 18:37:18 【问题描述】:简而言之,这就是我所做的:
<?php
// define variables and initialize with empty values
//error variables
$agentNameErr = "";
//non-error variables
$agentemail = "";
if ($_SERVER["REQUEST_METHOD"] == "POST")
if (empty($_POST["agentname"]))
$agentNameErr = "Missing";
else
$agentname = $_POST["agentname"];
// form
<form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" >
<input name="agentname" type="text" id="agentname" autocomplete="on" placeholder="Agent Name" value= "<?php echo htmlspecialchars($agentname);?>" />
//only shows up if $agentNameErr is assigned the value of "Missing"
<span class="error"><?php echo $agentNameErr;?></span>
</form>
它检查$agentname
是否错误(空白)。如果它不是空白,我不知道如何继续。我希望它只是自动提交所有信息,而无需任何额外的用户输入到评论页面,以便用户可以查看名称是否拼写正确。然后他们可以进行最终提交。
我不知道 mysql。
普通英语:
//user presses the submit button
if ($agentname has error)
stay on page and display errors
else
submit automatically to next page (order review page for visual checking)
如何“自动提交到下一页”?
【问题讨论】:
您将此表单张贴给自己?如果您希望有下一步,您应该将action
属性设置为下一页并在那里进行验证,如果不正确则重定向回该页面。
您希望用户转到下一页还是将数据输入数据库?自动提交到下一页是什么意思?
@Ed,如果禁用 javascript 怎么办(我知道很少见,但必须保护自己)?服务器端验证结合js很好。只依赖 js 验证是不好的做法
验证绝对不会发生在客户端。那只是乞求有人向您提供不良数据。我们中的一些人禁用了 js,是的,但即使这不是真的,攻击者也无法对您的客户端验证半途而废
我希望用户停留在同一页面上,所以是的,我希望表单自己发布。 1. 用户填写表格并提交 2. 表格再次出现并在任何留空的字段上显示错误。 3.用户可以直接编辑同一个表单来纠正错误(我不希望他们不得不回去) 4.编辑后,用户再次提交。 5. 如果验证通过,则将数据发送到下一页。
【参考方案1】:
使用 php 会话。
if ($agentname has error)
stay on page and display errors
else
$_SESSION['key1'] = 'something'
$_SESSION['key2'] = 'something else'
...
header('location: ' . $next_page);
如果您不知道如何使用 php 会话,请参阅示例 here
【讨论】:
我明白了。所以它回到更改标题以转到下一页。使用标题方法是否有任何可能的缺点?正在发送大量数据(例如 20 多个表单条目)。 没有我能想到的缺点。请确保在调用标头函数之前不显示任何 html,否则您可能会收到一条警告,指出标头已发送。就数据大小而言,您可以发布的数据量由您的 php.ini 文件设置,我相信默认值是 8MB(通常绰绰有余),只要数据被发布到您的服务器就可以切换它存储在会话变量中应该没问题。【参考方案2】:试试这个:
<?php
$agentNameErr = "";
$agentemail = "";
if ($_SERVER["REQUEST_METHOD"] == "POST")
if (empty($_POST["agentname"]))
$agentNameErr = "Missing";
else
$agentname = $_POST["agentname"];
header("Location: nextpage.php?agent=".$agentname);
else
?>
<form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" >
<input name="agentname" type="text" id="agentname" autocomplete="on" placeholder="Agent Name" value= "<?php echo htmlspecialchars($agentname);?>" />
//only shows up if $agentNameErr is assigned the value of "Missing"
<?php if(!empty($agentNameErr)) ?>
<span class="error"><?php echo $agentNameErr;?></span>
<?php ?>
</form>
<?php ?>
【讨论】:
这是一个例子。要将 agentname 发送到另一个页面,您可以使用 session 或使用 fsockopen 通过 POST 方法发送数据(如果此数据确实安全,您也可以使用交换字节等加密算法)。【参考方案3】:保持简单。捕获表单的全部内容并存储在会话变量中。
$agentNameErr = '';
$agentemail = '';
if ($_SERVER['REQUEST_METHOD'] == 'POST')
if (empty($_POST['agentname']))
$agentNameErr = 'Missing';
else
$_SESSION['agent-form'] = $_POST;
// Move to next page
header('Location: nextpage.php');
exit;
一旦转发到下一页,您就可以从会话变量中访问表单数据。
// Entire contents of form
print_r($_SESSION['agent-form']);
// "agentname" data
print_r($_SESSION['agent-form']['agentname']);
【讨论】:
以上是关于PHP 验证成功后如何自动提交表单数据?的主要内容,如果未能解决你的问题,请参考以下文章