使用Ajax在点击时更新PHP变量值


Update value of PHP variable on click with Ajax

我想知道是否有可能在点击HTML元素时更新PHP变量的值。我会监听点击与jQuery的.click()和传输一些PHP与jQuery的.ajax()或jQuery ajax函数之一的请求将增加变量10 (+=10)?

我该怎么做呢?

当任何用户单击时,增加所有用户的变量值。有点像Google +1或Facebook的点赞按钮。除了用户可以多次点击。即使点击也不能撤销。

有没有办法做到这一点没有数据库?

您需要将数据存储在某个地方。你可以写入一个文本文件。这在实践中是可怕的。这里最好的方法是使用数据库。

一旦PHP呈现页面,它就完成了,没有更多的更改。要实时更新页面,需要使用JavaScript(可以使用ajax调用的成功函数来完成)。但是,要使此功能适用于所有用户,您需要将该变量的值保存在某个地方—数据库,甚至是文本文件。强烈建议使用数据库。毕竟,这就是它们的意义所在。

您的ajax调用需要调用一个PHP函数,该函数将为您增加该值,并且可能会返回一些东西来表示是否成功。根据返回的结果,使用success函数更新现有页面,就像上面提到的那样。

您可以在没有数据库的情况下做到这一点-您可以将值存储在内存(memcache, redis)或平面文件中。

然而,内存存储不会在崩溃或重新启动时持续存在,并且基于文件的解决方案可能导致挂起或延迟,因为一次只有一个客户端可以对文件具有写访问权。

为什么你不想使用数据库?如果你没有MySQL访问权限,你可以试试sqlite.

您可以将数据临时存储在$_SESSION (http://php.net/manual/en/features.sessions.php)或cookie (http://php.net/manual/en/features.cookies.php)中。如果没有数据库,则无法永久存储此数据。

三种两种方法可以在没有数据库的情况下做到这一点。 <标题>文件存储h1> 用file_put_contents将变量的值存储在一个文件中,使用file_get_contents检索变量的值,增加10后再次保存在同一个文件中。

序列化或导出

使用var_export()serialize()函数,可以在文件中存储变量和数组。序列化和反序列化更耗费资源,但就存储空间而言,它比导出更有效。

的例子:

<?php
include 'data.php';
$data[$_POST['itemid']]  += 10;
$towrite = var_export($data, true); 
file_put_contents('data.php',$towrite);
?>
下面是data.php在执行上述代码之前的样子:

<?php
 $data = array( 'myitemid' => 0);
?>

myitemid替换为like按钮所在的唯一标识符

#会议#您可以在会话中保存数据,但要注意,这些数据是短暂的。

一些选项:

选项:您可以使用输入字段来临时存储值,它比文件系统操作更快,并且没有大小限制。

另一个选项:其他选项是使用div或另一个html元素的innerHTML,我更喜欢输入字段,因为易于序列化和在另一个ajax事件中使用,并且易于持久。例如,在MongoDB中使用json可以快速且容易地保存。

使用input的例子:

javascript的例子:

$('.classname a').click(function(e){
        $.ajax({
            url : '/foo',
            type: "POST",
            data: $("form.bar").serialize(),
            error: function(){
            },
            success : function(data){
                $('.input_class_name').val(
parseInt($('.input_class_name').val())+parteInt($('.another_input_class_name').val())
);
            }
        });
    });

html的例子(有两个表单,像这样使用,你可以在不同的时刻提交或放在同一个表单):

<form class="foo1">
<input type="hidden" class="another_input_class_name" value="10" />
</form>
<form class="bar">
<input type="hidden" class="input_class_name" value="10" />
</form>