每10秒随机显示一次mysql查询结果

时间:2013-04-01 23:14:45

标签: php javascript jquery

我在mysql表中有大量的引号,我想在我的网页上每10秒显示一个随机引用的那些。我用Google搜索了这个问题,但我找到的是如何从数据库中选择一个随机记录作为第1部分以及如何每隔10秒更改页面上的文本作为第2部分,因此当我将两个部分链接在一起时,我会显示随机引用页面,但它每10秒重复一次。所以请帮忙。

<?PHP

$dbh = new PDO('mysql:dbname='.$db_name.';host='.$db_host.';charset=utf8', $db_username, $db_password );

$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = "SELECT message FROM `fb_messages` ORDER BY RAND( ) LIMIT 1";

try {

    $msg = $dbh->prepare($sql);
    $msg->execute();
    $msgtxt = $msg->fetchAll(PDO::FETCH_COLUMN, 0);
    $txt = json_encode($msgtxt);
    }

    catch(PDOException $e)
{
    echo $e->getMessage();
    die();
}
?>
<html>
<head>
<title>Rotating Text</title>
<script type="text/javascript">
var rotatingTextElement;
var rotatingText = new Array();
var ctr = 0;

function initRotateText() {
rotatingTextElement = document.getElementById("textToChange");
rotatingText[0] = rotatingTextElement.innerHTML; // store the content that's already on the page
rotatingText[1] = "Some Text";
setInterval(rotateText, 5000);
}
function rotateText() {
ctr++;
if(ctr >= rotatingText.length) {
ctr = 0;
}
rotatingTextElement.innerHTML = rotatingText[ctr];
}
window.onload = initRotateText;
</script>
</head>
<body>
<span id="textToChange"><?php echo $txt; ?></span>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

要使实际解决方案正常工作,您必须每隔10秒钟使用ajax次来加载新的随机数。

理论如下:

  • 您使用第一个随机显示的代码
  • 设置setInterval以每十秒调用一次rotateText(现在为止)
  • 但您更改了rotateText的主体以对服务器发出ajax调用,并加载下一个随机引用

函数的主体可以如下(在实现时要小心,我假设存在jQuery library,并且必须匹配url,如后面所述):

function rotateText() {
  $.ajax({
    url: 'your/url/for/the/generator/php',
    dataType: 'text',
    success: function (response) {
      rotatingTextElement.innerHTML = response;
    }
  });
}

为此,你必须创建第二个php文件,它什么都不做,只是加载一个随机引用并将其回显到输出,并将url指向该php的ajax调用。

从您的代码中复制:

<?php
$dbh = new PDO('mysql:dbname=' . $db_name . ';host=' . $db_host . ';charset=utf8', $db_username, $db_password);

$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = "SELECT message FROM `fb_messages` ORDER BY RAND() LIMIT 1";

try {
  $msg = $dbh->prepare($sql);
  $msg->execute();
  $msgtxt = $msg->fetchAll(PDO::FETCH_COLUMN, 0);
  $txt = json_encode($msgtxt);
} catch(PDOException $e) {
  echo $e->getMessage();
  die();
}
header('Content-Type: text/plain');
echo $txt;

这不做任何其他事情,只需加载下一个随机引用,并在输出中将其显示为纯文本行。

使用您定义的数组,您可以执行类似于使用10-15个元素预填充数组并旋转它们的操作。 (那将是真正的旋转,因为上面提到的ajax解决方案每10秒给出一个新的随机引用,没有特定的顺序)