2011-08-10 44 views
17

爲了讓表單記住用戶的上一個輸入或當前輸入,甚至在他/她刷新頁面之後該怎麼做?即使刷新頁面後如何記住表單中的輸入數據?

我應該做的,

  <div class="row"> 
      <label>Contact Messenger </label> 
      <input type="text" name="messenger" id="messenger" size="50" maxlength="50" value="<?php echo $_SESSION['messenger']; ?>"/> 
      </div> 

  <div class="row"> 
      <label>Contact Messenger </label> 
      <input type="text" name="messenger" id="messenger" size="50" maxlength="50" value="<?php echo $_POST['messenger']; ?>"/> 
      </div> 

還有一招,辦呢?..怎麼樣?

回答

11

在您的表單提交做這樣的事情

session_start(); 
    $_SESSION['data'] = $_POST['data']; 
    $_SESSION['data_another'] = $_POST['data_another']; 

在頁面上,比你可以任意訪問這些會話變量,其中這樣

session_start(); // this should be at the top of the page before any html load 
    <input type="text" name="name" value="<?php echo $_SESSION['data'];?>"/> 

刷新成功調用,比如在專頁

 $.ajax({ 
      type: "POST", 
      url: "yourfile.php", 
      data: 'data='+ data, 
      success: function(){ 
       location.reload(); 
      } 
     }); 
+0

如果您要提交通過AJAX的形式大於它需要的會話變​​量的工作頁面刷新。 –

+0

是的,表單是通過ajax提交的。你可以通過ajax提交頁面刷新樣本嗎? – sasori

2

相當多取決於是否在該字段中的數據是從哪裏來的。 如果你的場景是你正在呈現一個空白表單,用戶輸入一些數據,然後沒有提交它,刷新頁面,沒有什麼可以做的。這是瀏覽器需要處理的問題。

你也許可以在那裏做一些非常奇怪的JavaScript黑客攻擊,但我不會建議。另一方面,如果你的數據來自上一頁或類似的東西,那是不同的故事。但是,那麼你需要告訴我們數據來自哪裏,所以我可以給你一個合理的答案。

+0

它是一個空白表格,當用戶沒有登錄或註冊,他點擊提交按鈕,一個jQuery模態彈出,並從那裏,他可以註冊,一旦他從模態註冊,他得到已登錄自動地,頁面自動刷新並顯示他的用戶名..並應該能夠返回到他留下的jquery模式的窗體..如何做到這一點?因爲當我刷新頁面時,輸入數據不見了 – sasori

+0

爲了實現這一點,您必須將所有數據與原始表單一起發送,並附上登錄表單。然後登錄腳本可以保存在會話變量中,你可以填寫表格,當你再重新生成數據。樣品請問 – Chronial

1

如果你的意思是,填寫表單域並單擊刷新,那麼沒有直接的方式,因爲數據沒有提交。這種行爲取決於瀏覽器。

您可以做的唯一事情就是通過AJAX將數據發送回服務器,因爲字段發生更改。接收數據的PHP腳本會設置一些會話變量。加載表單時,您可以將其默認值設置爲適當的會話值。

雖然很少有需要爲這種行爲的。將有很多請求來回發送到您的服務器。

0

您的建議都不會幫你刷新(即不發送數據到服務器的動作)後「記住」的數據。你需要的是通過JavaScript獲取數據(也許使用onkeyup事件類型)並使用cookie獲取。用jquery很容易。

+0

? – sasori

+0

@sasori:對不起,沒時間抽樣,我想但不行。 [餅乾很容易與這個插件使用方法](https://github.com/carhartl/jquery-cookie) –

0

會話是存儲和記憶數據的好方法,但爲什麼comp licate的東西?試想,如果窗體上有許多領域,開發人員必須存儲大量的會話值。爲什麼不簡單打印或回聲。

例子:

形式是輸入ssName並與值隱藏字段ssAct提交發送

得到ssName和ssAct的形式提交

$ssAct=$_REQUEST["ssAct"]; 
$ssName=$_REQUEST["ssName"]; 

和形式

<input type="text" name="ssName" value="<?php if($ssAct=='send' && $ssName!='') { echo "$ssName"; } ?>"> 
<input type="hidden" name="ssAct" value="send"> 

提交名稱將被回顯,如果它被提交,而不是空。

+0

我所描述的簡單的php回聲方法即使在刷新後也能正常工作(不是Ctrl +刷新)。因爲該表單將再次與值一起發佈。它不是完美的解決方案,但它的簡單工作。 –

3

我在我的項目中有一個類似的問題,所以我寫了一些js來處理這個使用cookie。 首先,我發現了兩個簡單的功能設置和獲取的cookie值:

function setCookie(c_name, value, exdays) { 
    var exdate = new Date(); 
    exdate.setDate(exdate.getDate() + exdays); 
    var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString()); 
    document.cookie = c_name + "=" + c_value; 
} 

function getCookie(c_name) { 
    var c_value = document.cookie; 
    var c_start = c_value.indexOf(" " + c_name + "="); 
    if (c_start == -1) { 
     c_start = c_value.indexOf(c_name + "="); 
    } 
    if (c_start == -1) { 
     c_value = null; 
    } else { 
     c_start = c_value.indexOf("=", c_start) + 1; 
     var c_end = c_value.indexOf(";", c_start); 
     if (c_end == -1) { 
      c_end = c_value.length; 
     } 
     c_value = unescape(c_value.substring(c_start, c_end)); 
    } 
    return c_value; 
} 

比我寫的另外兩個函數來設置和獲取輸入值:

function saveValue(input) { 
    var name = input.attr('name'); 
    var value = input.val(); 
    setCookie(name,value); 
} 

function getValue(input) { 
    var name = input.attr('name'); 
    var value = getCookie(name); 
    if(value != null && value != "") { 
     return value; 
    } 
} 

而且使用jQuery我用戶的輸入值保存到會話cookie

$('input[type=text]').each(function(){ 
    var value = getValue($(this)); 
    $(this).val(value); 
}).on('blur', function(){ 
    if($(this).val() != '') { 
     saveValue($(this)); 
    } 
}); 

我希望這會有所幫助;)

+0

這適用於我,謝謝! –

0

嘗試屬性autocomplete,也許它會在某些瀏覽器工作...

<input type="text" autocomplete="on" /> 

您可以使用自動完成的form了。

0

有爲了得到數據檢查一些主要問題出現刷新或任何事件處理程序後:

1)要注意的簽名。它必須包含的方法=「郵報」的屬性如下:

<form method="post"/> 

否則使用$ _ POST [「信使」]將無法正常工作。

表單中方法屬性的默認值爲get。

<form> equals to <form method="get"> 

2)許多程序員屬性ID VS 之間混合。 請注意使用正確的屬性。 $ _POST關聯數組使用名稱從中獲取數據。這就是爲什麼下面的例子將無法​​正常工作正確:

<input type="text" id="data" value="<?php echo isset($_POST['data']) ? $_POST['data'] : "")?/>" 

得到它的工作的權利,你必須添加的屬性名稱=「數據」如下:

<input type="text" name="data" id="data" value="<?php echo isset($_POST['data']) ? $_POST['data'] : "")?/>" 

好運

0

你也可以做不一樣的會話下面的代碼:

<input type="text" name="Fname" value="<?php if(isset($_POST['Fname'])){ echo $_POST['Fname']; } ?>" /><br/> 

這將保持輸入框內的輸入數據!

相關問題