【问题标题】:update "quantity remaining" without refreshing site更新“剩余数量”而不刷新站点
【发布时间】:2013-04-17 08:20:39
【问题描述】:

我有一个 HTML 站点,其页面使用 PHP 代码查询 MySQL 数据库。该表包含 3 列(日期、时间、剩余时间)。根据当前日期和时间,我希望 HTML 页面返回并显示“剩余”列中的相应值。

诀窍是我希望这个值能够自动更新(AJAX?),而无需用户刷新页面或单击按钮。

到目前为止,我使用的 PHP 可以根据日期显示“剩余”值,但我还没有弄清楚如何同时查询日期和时间,也不知道如何自动刷新。

到目前为止我已经弄清楚的PHP代码

(注意:quantitytest_config.php 只包含主机名/用户名/密码)

    <?php

include 'quantitytest_config.php';

//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password) 
  or die("Unable to connect to MySQL");

//select a database to work with
$selected = mysql_select_db("grace59_countdown",$dbhandle) 
  or die("Could not select countdown");

//execute the SQL query and return records
$result = mysql_query("SELECT remaining FROM quantity WHERE salesdate=CURDATE()");
//fetch tha data from the database
while ($row = mysql_fetch_array($result)) {
   echo "Quantity:".$row{'remaining'}."<br>";
}

//close the connection
mysql_close($dbhandle);
?>

提前感谢您的帮助。非常感谢。

【问题讨论】:

  • 最简单的方法是学习 AJAX :-)

标签: php html mysql ajax


【解决方案1】:

使用jQuery.load,轻而易举,下面的 sn-p 将调用您的 PHP 脚本并每 10 秒更新一次剩余计数。

setInterval(function(){
    // Assumes the container has the id of count
    // and the php script is called remaining.php
    $("#count").load("remaining.php")
}, 10000);

没有 jQuery,你将不得不做一些阅读,但这并不难

就您嵌入同一问题的任何其他问题而言。您不应该将多个问题作为一个问题提出。每个问题都应显示您尝试过的内容、预期/实际行为、错误消息。这就是您的问题对其他人有用的方式,而不仅仅是您自己,这也是 Stack Overflow 的核心。目前你的问题是我不知道该怎么做,这不太适合 SO。

【讨论】:

  • 感谢胡安!我试了一下,它就像一个魅力。对于多个问题,我很抱歉,而不是遵循您的其他建议。从现在开始,我一定会这样做。
  • @Zander 无需道歉,欢迎堆栈溢出,很高兴它成功了。
【解决方案2】:

正如你所说,你应该使用 AJAX。

基本上,您会不时地不断调用页面并检查是否有新结果(如果存在)并将其检索给用户。

您将调用的页面是一个与您发布的页面类似的 PHP 文件,它将返回 AJAX 调用的结果。

调用后,将结果呈现给用户。

通常,在 AJAX 中,GET 方法更快,因为它不涉及处理 POST 字段,并且由于您只是获取信息,所以我会坚持下去。

这是您要查找的基本语法。我猜它有一些复杂但可以理解的名字。

<script>
setInterval(function(){check_new_stuff();}, 10000);

function check_new_stuff(){
  $.ajax({
    type: "GET",
    url: "url_with_your_php_code.php",
    dataType: 'html',
    data: {name_of_the_parameter_to_be_passed_in_get: value_of_the_parameter_to_be_passed_in_get},

    success: function(html){
             $("#div_to_have_its_html_replaced_with_the_result_from_php_code").html(html);
    },

    error: function(){
    },

    complete: function(){
    }
  });

  setTimeout(function(){check_new_stuff();}, 10000);
}
</script>

(你可以read more about this here

关于你关于时间的问题,我没有看到它有问题。你只需要在数据库查询中添加字段并传递一个时间值吗?

(如果您想要当前时间?- 尝试猜测您的列名,因为您在解释过程中没有保持表命名法相同)

$result = mysql_query("SELECT remaining FROM quantity WHERE salesdate=CURDATE() AND salestime=CURTIME()");

(具体时间,自己指定?)

$result = mysql_query("SELECT remaining FROM quantity WHERE salesdate=CURDATE() AND salestime='11:15:00'");

【讨论】:

  • 感谢 Ivo,很抱歉让您猜测列名(您做对了!)。所以我的表由“salesdate”、“salestime”和“remaining”组成。我希望查询匹配今天的日期和表中的最后一个有效时间。不幸的是,第一个建议: $result = mysql_query("SELECT remaining FROM quantity WHERE salesdate=CURDATE() AND salestime=CURTIME()") 仅当当前时间与“salestime”中的任何值完全相同时才会提供结果列,否则不返回任何内容。不幸的是,我在 MySQL 文档中找不到任何解决方案。
  • 有效时间是什么意思?某行已填满?如果是这样,请尝试这样做: $result = mysql_query("SELECT remaining FROM quantity WHERE salesdate=CURDATE() AND salestime!='00:00:00'");
  • 有效时间我的意思是:我的表将预先填充数据。因此,假设该表有 10 行已填充的日期、时间和剩余时间,并且这些值可能包含过去和未来的日期/时间。我希望查询仅从 ONE 行返回“剩余”值 - 从与今天的日期和当前时间最匹配的行,但不是未来时间。
  • 想通了... SORT 和 LIMIT 可以解决问题。刚刚将我的查询更改为: $result = mysql_query(" SELECT remaining FROM quantity_time WHERE salesdate
  • 很高兴你得到它!顺便说一句,如果我的回答以某种方式帮助您以某种方式接近结果,请将其标记为正确答案。谢谢!
猜你喜欢
  • 2020-07-03
  • 1970-01-01
  • 2017-02-16
  • 1970-01-01
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多