2012-10-02 137 views
3

我有一個簡單的編碼問題。我嘗試使用文本框和分享按鈕創建頁面。瀏覽器上的刷新按鈕

當用戶單擊共享按鈕時,文本框中的文本將作爲字符串插入名爲「posts」的數據庫表中。

我使用下面的代碼。

<?php 
    if(isset($_POST['share'])) 
    { 
      $status = $_POST['status']; 
      $res = mysql_query("insert into `posts`(postid,username,post,pointscollected) values('','$username','$status','')"); 
      if($res) 
       echo "<script type='text/javascript'>alert('Posted successfully')</script>"; 
      else 
       echo "<script type='text/javascript'>alert('some error')</script>"; 
    } 
    else 
    { 
     ?> 
      <form action="<?php $_SERVER['PHP_SELF']?>" method="post"> 
      Status : <input type = "text" name ="status"> 
      <input type = "submit" name ="share"> 
      </form> 
     <?php 
    } 

這個解決方案工作正常,但存在當用戶刷新該頁面的問題。瀏覽器將顯示一個消息窗口,要求重新發送信息,該信息將再次提交該表格。然後同一條目在表中兩次

我希望用戶在提交後留在同一頁面。但是頁面刷新不應該顯示消息窗口或再次發送信息。

在此先感謝!

回答

11

將用戶重定向他的股票後,使用重定向

header('Location: whatever.php'); 
exit; 

使用此:

<?php 
if(isset($_POST['share'])) { 
     $status = $_POST['status']; 
     $res = mysql_query("insert into `posts`(postid,username,post,pointscollected) values('','$username','$status','')"); 
     if($res) { 
     ?> 
      <script type='text/javascript'>alert('Posted successfully')</script> 
     <?php    
      header('Location: whatever.php'); 
      exit; 
     } else { 
     ?> 
      <script type='text/javascript'>alert('some error')</script> 
     <?php 
      header('Location: whatever.php'); 
      exit; 
     } 
    } 
?> 

而且BTW最好不要使用JavaScript

提醒用戶,並且使用大括號如有其他情況,請聯繫

PS:您也可以重定向的用戶使用JavaScript window.location

Header Reference

+1

此解決方案正常工作。謝謝! – sumit

+1

@sumit歡迎:) –

+0

如果'header(...);'放在輸出之前會更好。雖然它可能以當前形式工作,但如果緩衝區在'header(...);'之前被刷新,它可能會中斷。例如,當某人在'

1

它被稱爲「重定向後發佈」:在收到帖子請求並做了一些有用的事情之後,您將用戶(通常)重定向回自己的帖子,或其他任何東西。

1

你可以嘗試做重定向你的邏輯保存後完成之後。與頁面,其中包含您的代碼 $ my_page = 'yourpage.php' 的美稱

  header("location: $my_page"); 
      exit(); 

設置變量$ your_page;

這應該工作:

$my_page = 'your_page.php' 
if(isset($_POST['share'])) 
{ 
     $status = $_POST['status']; 
     $res = mysql_query("insert into `posts`(postid,username,post,pointscollected) values('','$username','$status','')"); 
     if($res) 
     { 
      echo "<script type='text/javascript'>alert('Posted successfully')</script>"; 
      header("location: $my_page"); 
      exit(); 
     } 
     else 
     { 
      echo "<script type='text/javascript'>alert('some error')</script>"; 
      header("location: $my_page"); 
      exit(); 
     } 
} 
+0

無需爲此聲明一個變量 –

1

你完成插入您的查詢和一切,切換到另一個網頁使用後右:

<?php 
header('Location: /path/to/yourotherpage.php'); 
exit(); 
?> 

這個做什麼,是它是一個重定向到另一個頁面,該頁面從瀏覽器頁面的「內存」中刪除所有POST數據。

在該頁面上,您可以編寫諸如「您的資料已提交和錄製」之類的內容,無論您想要什麼,您的選擇。

如果您的用戶在該頁面上刷新,則根本不會插入任何內容。

這應該工作。

相關問題