簡體   English   中英

PHP:按下按鈕之前按下按鈕的效果

[英]PHP: Effect of the pressed button before the button is pressed

我有一個非常簡單的PHP代碼,按下按鈕后應該輸出“Hi”。 它在我第一次打開頁面時工作得非常好 - 頁面上只有一個按鈕,我按下它並獲得“嗨”當我嘗試刷新頁面時出現問題。 “嗨”並沒有消失。

我嘗試了幾個瀏覽器並刷新頁面而不使用現金。 這沒有用。 唯一有用的是在新標簽頁面中打開頁面。 然后沒有“嗨” - 直到我第一次按下按鈕。

<form method="post">
    <input type="submit" name="test" id="test" value="RUN" /><br/>
</form>

<?php

function testfun()
{
echo 'Hi ';
}


if(array_key_exists('test',$_POST)){
   testfun();
}

?>

放置正確的操作頁面,或清空到相同的URL(但無論如何都放置標簽)。

<form method="post" action="page_here.php">
    <input type="submit" name="test" id="test" value="RUN" /><br/>
</form>

嘗試檢查isset()。

function testfun() { echo 'Hi '; }

if ( isset($_POST) && isset($_POST['test']) ) {
    testfun();
}

請參閱發布/重定向/獲取 您無法在提交后立即顯示確認消息,否則刷新瀏覽器將始終發送完全相同的POST。

代替:

  • 提交表單時,將狀態保存到會話中,然后使用header進行重定向,
  • 在表單顯示上,檢查會話是否具有所述狀態,如果是,則顯示您的消息,然后從會話中清除狀態。

以下示例:

<?php
session_start();

if (array_key_exists('test', $_POST)) {
  $_SESSION['posted'] = true;
  // header requires an absolute URL so recreating it from $_SERVER superglobal
  header('Location: ' . (!empty($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
  die;
}
?>

<form method="post">
  <input type="submit" name="test" id="test" value="RUN">
</form>

<?php
function testfun()
{
  echo 'Hi';
}

if ($_SESSION['posted'] ?? null === true) {
  testfun();
  unset($_SESSION['posted']);
}

我不認為您了解發布的工作原理,當您發布將其發送到頁面的數據時,數據僅與該頁面一樣長。 這就是說,當你重新加載頁面時,數據會因為不穩定而消失。 如果要保留數據,則需要將其存儲在會話中。

另請注意,當您刷新頁面時,它會重新提交表單,如果您單擊地址欄並按Enter鍵,您將獲得一個空白的名單!

請查看會話,它將解決您的問題: PHP手冊

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM