0

我想知道是否可以在单击 HTML 元素时更新 PHP 变量的值。我会用 jQuery 监听点击.click()并用 jQuery 或其中一个 jQuery ajax 函数传输一些 PHP,.ajax()并且该请求会将变量增加 10 (+=10) ?

我怎样才能做到这一点?

当任何用户点击时,增加所有用户的变量值。有点像 Google +1 或 Facebook like 按钮。除非用户可以多次单击。甚至点击也不会撤消。

有没有办法在没有数据库的情况下做到这一点?

4

6 回答 6

7

您需要将数据存储在某处。您可以写入文本文件。这在实践中是可怕的。最好的办法是使用数据库。

于 2013-06-07T21:18:03.593 回答
2

一旦 PHP 呈现页面,它就完成了,那里没有更多的变化。要实时更新页面,您需要使用 JavaScript(您可以使用 ajax 调用的成功函数来完成)。然而,为了让所有用户都能使用,您需要将该变量的值保存在某个地方——数据库,甚至是文本文件。强烈推荐使用数据库。毕竟,这就是他们的本意。

您的 ajax 调用需要调用一个 PHP 函数,该函数将为您增加该值,并且可能会回显某些内容以表明它是否成功。根据返回的结果,您可以使用成功函数更新现有页面,就像我上面提到的那样。

于 2013-06-07T21:18:36.977 回答
2

您可以在没有数据库的情况下执行此操作——您可以将值存储在内存(memcache、redis)或平面文件中。

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

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

于 2013-06-07T21:18:58.267 回答
1

一些选项:

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

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

使用输入的示例:

示例:

$('.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 示例(有 2 个表单,使用这样的方式,您可以在不同的时间提交或放入相同的表单):

<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>
于 2013-06-07T21:53:37.747 回答
1

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

于 2013-06-07T21:18:24.713 回答
1

没有数据库的两种方法。

文件存储

使用 将变量的值存储在文件中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用“赞”按钮所在的唯一标识符替换即可。

#sessions#您可以在会话中保存数据,但请注意,这些数据是短暂的。
于 2013-06-07T21:28:28.420 回答