php表单提交后返回页面
Posted
技术标签:
【中文标题】php表单提交后返回页面【英文标题】:php return to page after form submission 【发布时间】:2014-05-26 22:29:01 【问题描述】:我已经创建了一个 html 表单
<form action="http://localhost/php/insert.php" method="post">
Barcode: <input type="text" name="barcode" /><br><br>
Serial: <input type="text" name="serial" /><br><br>
<input type="submit" />
</form>
使用这个 php 保存到我的数据库中:
<?php
$con = mysql_connect("example","example","");
if ( ! $con)
die('Could not connect: ' . mysql_error());
mysql_select_db("database", $con);
$sql = "INSERT INTO asset (barcode, serial)
VALUES ('$_POST[barcode]','$_POST[serial]')";
if ( ! mysql_query($sql, $con))
die('Error: ' . mysql_error());
mysql_close($con)
?>
表单保存到数据库,但当您按下提交时,页面只是转到http://localhost/php/insert.php
,这是一个空白页面。我怎样才能让它保持在同一页面上,只显示一条消息或其他东西?
【问题讨论】:
【参考方案1】:请注意,使用HTTP_REFERER
进行重定向通常是不稳定且不可信的,因此最好的方法是随请求发送一个 URL,或者,如果它来自另一台服务器,您可以构建一个特定的传递以用于特定的网站/网址。最好是通过将 URL 与请求一起提交来了解 URL;其他两个可能不是最佳的。
表单处理完成后,在输出任何内容之前执行此操作(这将引发错误):
header("Location: $_SERVER['HTTP_REFERER']");
exit;
根据您的处理结果,您可以将错误附加到 URL:
if ($query_does_not_execute)
$errcode = "error_code=003";
$referer = $_SERVER['HTTP_REFERER'];
if ($errcode)
if (strpos($referer, '?') === false)
$referer .= "?";
header("Location: $referer&$errcode");
else
header("Location: $referer");
exit;
然后在页面上,您可以显示错误。或者,或者,您可以重定向到页面以处理不同类型的错误。这对许多不同的解释都是开放的。
【讨论】:
是的,我得到Undefined index: REFERER
如果它来自 HTTPS 页面,REFERER 将不可用,因此无法从 $_SERVER 检索它。
@CarlaDessi - 我弄错了钥匙,它是HTTP_REFERER
。请注意,它也有些不稳定,因为它可以由浏览器设置(或未设置,或被欺骗)。
应该可以完成这项工作,谢谢!有没有办法在之后显示确认对话框?
@Ashley - 你在哪里想出这个HTTPS
块HTTP_REFERER
?你有任何文件直接说明这一点吗?【参考方案2】:
你可以像这样使用PHP's Header() function:
header("Location: your-page.php");
exit;
您需要确保在标头调用之前没有输出(即回显任何内容或任何 HTML 等),否则它将不起作用。
【讨论】:
我希望它返回到它来自的页面,该页面位于不同的服务器上。 如果它来自 HTTPS 页面,这是不可能的,除非 URL 在请求的参数中传递给您。 @Ashley 这听起来是个好建议。也许您可以使用该技术提交答案?【参考方案3】:我发现的另一种方法是使用 html 的 <meta>
重定向。将其放入您的 http://localhost/php/insert.php 脚本中。处理重定向到所需页面后。
<?php
switch ($INPUT['task'])
case 'insert_and_redirect':
insertForm();
$h = '<html><head>';
$h .= '<meta http-equiv="refresh" content="0; URL=/adjustments/">';
$h .= '</head></html>';
echo $h;
break;
case 'edit':
# editForm();
break;
case 'delete':
deleteRecord();
break;
default:
break;
?>
可能不安全,但如果您在专用 LAN 上应该没问题。 -干杯
【讨论】:
【参考方案4】:在您的表单操作$_SERVER['PHP_SELF'];
中使用它会满足您的要求。
【讨论】:
以上是关于php表单提交后返回页面的主要内容,如果未能解决你的问题,请参考以下文章