2015-06-17 140 views
1

我有一個HTML表單,其中當單擊「更新」時,更改不會反映,它需要刷新以查看更改。 但是當我重新加載時,總是有Confirm Form Resubmission。我使用<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">這意味着它在同一頁上提交。如何在提交表單後自動刷新頁面

+3

HTML表單的請提供樣品,以便我們能夠看到你可能已經做出 – Mike

+0

任何錯誤,如果你需要簡單的刷新,您可以使用HTML元刷新 –

+0

'htmlspecialchars'不應該被用來編碼路徑。它用於編碼輸出。 –

回答

1

只要使用這個

if(isset($_POST[submits])) 
{ 
header("location:index.php"); // your current page 
} 

或使用本

<form action="window.location.reload()" method="post"> 
+0

第二種方法沒有爲我工作..! – sinsuren

+0

我不知道我應該把第一個代碼塊放在哪裏 –

+0

@MarkKramer在php標記中使用<?php // code?> – Bruce

0

我傾向於使用AJAX表單提交:

// Bind the submit action 
$('#myForm').submit(mySubmitFunction); 

// Submit handler 
function mySubmitFunction(e) { 
    e.preventDefault(); 

    var form = $(this); 

    $.ajax({ 
      url: form.attr('action'), 
      data: form.serialize() 
    }).done(function(xhr) { 
      // My endpoint returns JSON output 
      var responseJSON = false; 
      try { 
        responseJSON = $.parseJSON(xhr); 
      } catch (error) {} 

      if (responseJSON && responseJSON.hasOwnProperty('result') && 
       responseJSON.result) { 
        // The important bit 
        location.reload(); 
      } else { 
        // Handle error 
      } 
    }); 
} 

我爲了選擇這種能夠提供快速反饋給用戶。如果你不想使用AJAX,PHP文件處理表單中的一個簡單的頭文件('Location:yourPage.php')就足夠了。

0

「更新」後,您的頁面已經重新加載,因爲Confirm Form Resubmission警報彈出。我想問題是,在PHP腳本中,你在處理新的Post數據之前顯示數據。

0

所以你所描述的主要問題是URL請求方法是POST。如果在提交表單後刷新頁面,則瀏覽器將嘗試再次POST,就像按下提交按鈕一樣。

這實際上是一種非常自然的方式來提交數據(到表單生成的url)。大多數開源CMS會做同樣的事情並且具有相同的行爲(wordpress,drupal)。

我構建了一個自定義系統,做了同樣的事情,但有一些關於刷新觸發「你確定要再次提交此表單」而不是僅僅重新加載表單的投訴。所以我用@Bruce的解決方案解決了這個問題。在輸出任何內容之前,在我的頁面底部,我會重定向到當前的URL。這將瀏覽器眼中的前一頁更改爲GET而不是POST並防止重新提交警告。

至於你的數據沒有更新,你可能在處理帖子之前建立你的表單。確保處理帖子是您執行的第一項操作。

我的系統與此示例代碼有很大不同,所以不要指望這個功能可以直接使用。但它應該給你正確的想法。

<?php 
if (isset($_SERVER["REQUEST_METHOD"]) && ($_SERVER["REQUEST_METHOD"] == "POST")) 
{ 
    // Validate my form. 
    if ($valid) 
    { 
    // Save data on successful validation. 

    // Redirect to prevent refresh from triggering another 
    // form submission. Optional but helpful. 
    redirect($_SERVER['REQUEST_URI']); 
    } 
    else 
    { 
    // Not valid no harm in just reloading as the user will be 
    // fixing their errors and resubmitting anyway. 

    // Generate error messages, etc. 
    } 
} 

// Retrieve your form values here after you have fully processed the POST 
// operation. 
$values = getDBValues();  

function redirect($path) 
{ 
    // The path should be validated somehow as the user 
    // could alter parts of it such as query parameters. 
    // For simplicity I'm leaving that part out. 
    header('Location: ' . $path); 
    die(); 
} 

?> 
<html> 
<form> 
...