【问题标题】:Saving into $_SESSION without direct interaction无需直接交互即可保存到 $_SESSION
【发布时间】:2015-12-24 10:07:17
【问题描述】:

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

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

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

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

想象一个带有两张工作表的 Excel 工作簿。 Sheet 1 是要填写的表格,sheet 2 包含一些进一步的信息。在 Excel 中(显然),您可以在工作表之间切换而不会丢失表格中的输入。

【问题讨论】:

    标签: php ajax session


    【解决方案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
    })
    

    在您的“save_data_page.php”中,使用代码:

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

    【讨论】:

    • 感谢 Udy 的详细回答和出色的 code comments! :-) 我完全不理解$("#feedback") 部分。在 HTML 中哪里可以找到 id=feedback 或者是生成的?
    • $("#feedback") 只是一个 div,您可以添加到页面中以查看 ajax 何时保存您的文本。例如
      可以添加到你的输入框下方
    • 哦,太好了!基本上类似于console.log()... 其他问题:{text:text} 在抽象的方式上,我理解这是在做什么,但我有点困惑。第一个text:,指的是什么?而第二个text,是指上面的变量吗?
    • @Lex 类似于$text = $text$carrier=$text {carrier:text}。您只需要一个运营商将您的变量传递给 php 页面(Ajax 规则)。如果我在我的 php 页面上使用 {carrier:text},我会以 $_POST['carrier'] 的形式收到它。
    • 您为我提供了完整的解决方案和很好的解释!非常感谢:-)
    【解决方案2】:

    我想说的最佳方法确实是使用 $_SESSION(或某些框架中的一些等效用户会话概念)或使用 cookie。在我看来,Cookie 更糟糕,尽管有些人可能会说它们可以很好地完成你想要完成的任务。

    为了在用户不点击任何特定内容或提交任何表单的情况下执行此操作,您必须想办法在用户填写完内容后始终保存用户输入。

    谢天谢地,每当用户填写完输入元素并单击其他内容时,输入就会失去焦点。 DOM 元素具有在输入字段获得或失去焦点时触发的事件,如果我没记错的话。您可以使用 jQuery 轻松地将函数注册到这些事件。当失去焦点事件触发时,您可以向服务器发送一个 Ajax 请求,其中包含用户刚刚填写的数据以及用户与之交互的字段的 id。 在您的服务器中,您可以将其存储在 $_SESSION 变量中(我相信在您调用类似 session_create() 之后)。

    如果焦点事件不能满足您的需求,您将不得不寻找另一种方式来触发与服务器的一些 ajax 通信,因为没有办法让它明显发生。

    【讨论】:

      【解决方案3】:

      我猜想使用 AJAX 一定有办法完成这个任务,但是我不知道当输入字段有新文本时(尤其是没有用户交互)如何触发事件?

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

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

      【讨论】:

      • 谢谢你的回答,给我一些时间来熟悉一下这个处理程序。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      • 2017-11-04
      • 2016-10-17
      • 1970-01-01
      • 2011-03-19
      • 2013-05-20
      • 2012-04-02
      相关资源
      最近更新 更多