在没有直接交互的情况下保存到$ _SESSION

时间:2015-12-24 10:07:17

标签: php ajax session

我有一个表格,其<td>个元素包含input个字段:

<td>
    <input type='text' id='field001'>
</td>

现在,我正在寻找一种方法来存储我在input字段中输入的,直接存入$_SESSION个变量。这没有任何直接的用户交互。因此,没有任何submitonClick()事件。

用户应该能够访问网站上的其他页面而不会丢失先前在表格中输入的信息 我想使用AJAX必须有一种方法来完成这个任务,但我不知道如何在输入字段有新文本时触发事件(特别是没有用户交互)?

想象一下有两张纸的Excel工作簿。 Sheet 1 是要填写的表格,表格2 包含一些其他信息。在Excel(显然)中,您可以在不丢失表格输入的情况下在工作表之间切换。

3 个答案:

答案 0 :(得分:1)

最好的方法我说的确实是使用$ _SESSION(或某些框架中的某些等效用户会话概念)或使用cookie。饼干在我看来更糟糕,虽然有些人可能会说它们可以很好地适应你想要完成的事情。

为了在用户无需点击任何特定内容或提交任何表单的情况下执行此操作,您必须找到一种方法,以便在他填写完成内容时始终保存用户输入。

值得庆幸的是,每当用户填写输入元素并点击其他内容时,输入就会失去焦点。 DOM元素具有在输入字段获取时触发的事件,或者如果我没有弄错则丢失焦点。您可以使用jQuery轻松地将函数注册到这些事件。当失去焦点事件触发时,您可以向服务器发送包含用户刚填充的数据的Ajax请求,以及用户与之交互的字段的ID。 在您的服务器中,您可以将它存储在$ _SESSION变量中(我相信在调用session_create()之后)。

如果焦点事件不能满足您的需求,您必须找到另一种方式来触发与您的服务器的某些ajax通信,因为没有选择只是明确地实现它。

答案 1 :(得分:1)

  

我想使用AJAX必须有一种方法可以完成这项任务,但是当输入字段有新文本时(尤其是没有用户交互),我不知道如何触发事件?

如果您想在没有用户互动的情况下进行此操作,请使用setInterval

如果您想在输入字段包含文本文本时(当用户与其进行交互以输入新文本时),请使用inputchange事件。

答案 2 :(得分:1)

您可以每5秒将输入值保存到数据库表中,或者使用ajax将其存储为PHP $ _SESSION。

$("#field001").keyup( function(){
var timer ;
   clearInterval(timer);//reset timer while typing
   var text = $(this).val();//grab input box text

   timer = setInterval(function(){

   $("#feedback").text("Saving...");
   //ajax post to php page
   $.post("save_data_page.php",{text:text},function(){
   $("#feedback").text("");});

   },5000);//save text every 5 secs
})

在&#34; save_data_page.php&#34;中,使用代码:

<?php
if (!isset($_SESSION)) 
{ 
session_start();//start a session
}

if(isset($_POST['text'])){
  //create a session variable called typed_text01
  $_SESSION['typed_text01']=$_POST['text'];
}
?>

在输入框中,您可以回显出存储的会话值,如下所示

<input id="field001" val="<?php echo $_SESSION['typed_text01']; ?>" />