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 - 你在哪里想出这个HTTPSHTTP_REFERER?你有任何文件直接说明这一点吗?【参考方案2】:

你可以像这样使用PHP's Header() function:

header("Location: your-page.php");
exit;

您需要确保在标头调用之前没有输出(即回显任何内容或任何 HTML 等),否则它将不起作用。

【讨论】:

我希望它返回到它来自的页面,该页面位于不同的服务器上。 如果它来自 HTTPS 页面,这是不可能的,除非 URL 在请求的参数中传递给您。 @Ashley 这听起来是个好建议。也许您可以使用该技术提交答案?【参考方案3】:

我发现的另一种方法是使用 html 的 &lt;meta&gt; 重定向。将其放入您的 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表单提交后返回页面的主要内容,如果未能解决你的问题,请参考以下文章

php,提交后使用同一页面的表单

C# 模拟 post提交php页面的表单

PHP + jQuery + Ajax 表单提交 - 同一页面返回结果

php表单怎么提交到数据库?

怎么实现php表单提交后不跳转

PHP做了缓存之后不能提交表单