【问题标题】:php return to page after form submissionphp表单提交后返回页面
【发布时间】: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,这是一个空白页面。我怎样才能让它保持在同一页面上,只显示一条消息或其他东西?

【问题讨论】:

    标签: php html mysql forms


    【解决方案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']; 中使用它会满足您的要求。

      【讨论】:

        猜你喜欢
        • 2020-05-14
        • 2014-05-09
        • 2021-07-04
        • 2020-02-13
        • 2011-08-06
        • 1970-01-01
        • 1970-01-01
        • 2012-02-02
        • 2012-03-06
        相关资源
        最近更新 更多