php возврат на страницу после отправки формы

Я создал 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 при нажатии кнопки Отправить, которая является пустой страницей. как я могу заставить его остаться на той же странице и просто показать сообщение или что?

4 ответов


обратите внимание, что перенаправление с 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;

затем на странице вы можете показать ошибку. Или, альтернативно, вы можете перенаправить на страницу для обработки ошибок разных типов. Это широко открыто для различных интерпретаций.


можно использовать функция заголовка PHP () вот так:

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

вам нужно будет убедиться, что нет вывода (т. е. Эхо ничего, или любой HTML и т. д.) перед вызовом заголовка, или он не будет работать.


другой способ, которым я нашел работы, - перенаправление с помощью 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;
}

?>

вероятно, небезопасно, но если вы находитесь в частной локальной сети, все должно быть в порядке.
- Ура!--5-->


используйте это в своем действии формы $_SERVER['PHP_SELF']; оно выполнит ваше требование.