2011-08-10 18 views
17

phải làm gì để làm cho biểu mẫu nhớ đầu vào trước đó hoặc đầu vào hiện tại của người dùng ngay cả sau khi người đó làm mới trang?cách nhớ dữ liệu đầu vào trong các biểu mẫu ngay cả sau khi làm mới trang?

Tôi nên làm,

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

hoặc

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

hoặc

có một mẹo để làm điều đó? .. như thế nào?

Trả lời

11

trên trang nơi hình thức của bạn đang trình làm một cái gì đó như thế này

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

và hơn bạn có thể truy cập các biến session bất kỳ nơi như thế này

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'];?>"/> 

làm mới trang của bạn trên cuộc gọi thành công như thế này

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

nếu bạn gửi biểu mẫu của mình qua ajax hơn là yêu cầu làm mới trang cho các biến phiên hoạt động. –

+0

vâng, biểu mẫu được gửi qua ajax..can bạn có thể cung cấp mẫu làm mới trang qua gửi ajax không? – sasori

2

Điều đó hoàn toàn phụ thuộc vào nơi dữ liệu trong các trường đến từ đó. Nếu kịch bản của bạn là bạn đang trình bày một biểu mẫu trống, người dùng nhập một số dữ liệu và sau đó mà không cần gửi nó, làm mới trang, không có gì bạn có thể làm. Đó là cho trình duyệt để xử lý.

Bạn có thể thực hiện một số đoạn mã JavaScript rất lạ ở đó, nhưng tôi sẽ không đề xuất điều đó.

Mặt khác, nếu dữ liệu của bạn đến từ trang trước hoặc một cái gì đó tương tự, đó là một câu chuyện khác. Nhưng sau đó bạn cần phải cho chúng tôi biết dữ liệu đến từ đâu, vì vậy tôi có thể cung cấp cho bạn câu trả lời hợp lý.

+0

đó là biểu mẫu trống, khi người dùng chưa đăng nhập hoặc đăng ký và nhấn nút gửi, chế độ jquery bật lên và từ đó, anh ấy có thể đăng ký, sau khi đăng ký phương thức, anh ấy đã đăng nhập tự động, trang sẽ tự động làm mới và hiển thị tên người dùng của anh ấy .. và sẽ có thể quay trở lại biểu mẫu mà anh ấy đã bỏ lại phía sau phương thức jquery..how để làm điều đó? bởi vì khi tôi làm mới trang, dữ liệu đầu vào đã biến mất – sasori

+0

Để đạt được điều đó, bạn sẽ phải gửi tất cả biểu mẫu dữ liệu biểu mẫu gốc cùng với biểu mẫu đăng nhập của bạn. Sau đó, kịch bản đăng nhập có thể lưu nó trong một biến phiên và bạn có thể điền vào biểu mẫu với dữ liệu đó khi bạn tạo lại nó. – Chronial

1

Nếu bạn muốn, điền vào các trường biểu mẫu và nhấp vào làm mới, thì không có cách nào trực tiếp, vì dữ liệu không được gửi. Loại hành vi đó tùy thuộc vào trình duyệt.

Điều duy nhất bạn có thể làm là đăng dữ liệu qua AJAX trở lại máy chủ của bạn khi các trường thay đổi. Tập lệnh PHP của bạn nhận dữ liệu sẽ đặt một số biến phiên. Khi biểu mẫu tải, bạn sẽ đặt các giá trị mặc định của chúng thành các giá trị phiên thích hợp.

Hiếm khi có nhu cầu về loại hành vi này. Sẽ có nhiều yêu cầu được gửi tới máy chủ của bạn.

0

Không có đề xuất nào của bạn sẽ giúp bạn "nhớ" dữ liệu sau khi làm mới (hành động không gửi dữ liệu đến máy chủ). Những gì bạn cần là lấy dữ liệu qua javascript (có thể với các loại sự kiện onkeyup) và lấy nó bằng cách sử dụng cookie. Với jquery rất dễ.

+0

mẫu xin vui lòng? – sasori

+0

@sasori: Xin lỗi, không có thời gian cho một mẫu, tôi muốn nó nhưng tôi không thể. [cookie dễ sử dụng với plugin này] (https://github.com/carhartl/jquery-cookie) –

0

Phiên là cách hay để lưu trữ và ghi nhớ dữ liệu nhưng tại sao lại là comp cam kết mọi thứ? Xem xét nếu biểu mẫu có nhiều trường, nhà phát triển phải lưu trữ nhiều giá trị trong phiên. Tại sao không chỉ đơn giản là in hoặc echo.

Ví dụ:

Mẫu được nộp cùng với ssName đầu vào và ssAct lĩnh vực tiềm ẩn có giá trị gửi

Nhận các ssName và ssAct vào mẫu nộp

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

và hình thức

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

Trên tên gửi sẽ được lặp lại nếu nó đã được gửi và không trống.

+0

Phương thức echo đơn giản mà tôi đã mô tả sẽ hoạt động ngay cả sau khi làm mới (không phải Ctrl + làm mới). Bởi vì biểu mẫu sẽ được đăng lại với các giá trị. Giải pháp không hoàn hảo của nó, nhưng công việc đơn giản của nó xung quanh. –

3

Tôi đã gặp vấn đề tương tự tại một trong những dự án của tôi vì vậy tôi đã viết một số js để xử lý việc này bằng cách sử dụng cookie. Đầu tiên tôi thấy hai chức năng đơn giản để thiết lập và nhận cookie giá trị:

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; 
} 

Thần I đã viết hai chức năng khác để thiết lập và nhận được giá trị đầu vào:

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; 
    } 
} 

Và sử dụng jQuery tôi tiết kiệm giá trị đầu vào của người dùng để phiên Cookie

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

tôi hy vọng nó sẽ giúp;)

+0

Điều này phù hợp với tôi, cảm ơn! –

0

thử thuộc tính autocomplete, có thể nó sẽ làm việc trên một số trình duyệt ...

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

Bạn có thể sử dụng autocomplete cho một form quá.

0

Có một số vấn đề chính cần kiểm tra để dữ liệu xuất hiện sau khi làm mới hoặc bất kỳ trình xử lý sự kiện nào:

1) Lưu ý chữ ký. nó phải chứa thuộc tính method = "post" như sau:

<form method="post"/> 

nếu không sử dụng $ _POST ['messenger'] sẽ không hoạt động.

Giá trị mặc định của thuộc tính phương thức trong biểu mẫu nhận được.

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

2) Nhiều lập trình trộn giữa các thuộc tính id vs tên. Hãy nhận biết việc sử dụng thuộc tính chính xác. Mảng kết hợp $ _POST đang sử dụng tên để lấy dữ liệu từ mảng đó.Đó là lý do ví dụ tiếp theo sẽ không làm việc một cách chính xác:

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

Để có được nó hoạt động đúng bạn phải thêm tên thuộc tính = "dữ liệu" như sau:

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

Chúc may mắn

0

Bạn cũng có thể thực hiện mà không cần phiên như mã bên dưới:

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

Điều này sẽ giữ dữ liệu đã nhập bên trong hộp nhập liệu!

Các vấn đề liên quan