2013-04-01 138 views
0

我在mysql表中引用了大量的引號,並且我想每隔10秒在我的網頁上顯示一個這樣的單引號。我GOOGLE了這個問題,但我找到的是如何從數據庫中選擇一個隨機記錄作爲第1部分,以及如何在頁面上每10秒更改一次文本作爲第2部分,因此當我將兩個部分鏈接在一起時,我將隨機報價顯示在頁面,但它每10秒重複一次。所以請幫助。每10秒隨機顯示一次mysql的查詢結果

<?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> 
+0

你能給我們提供你正在使用的SQL查詢嗎?這可能是一個問題。 – TheEwook

+0

「SELECT message from FROM fb_messages' ORDER BY RAND()LIMIT 1」; –

+0

嘗試使用觸發器 – dyoser

回答

0

對於實際的解決方案正常工作,你必須使用ajax調用加載新的隨機每次10秒。

理論如下:

  • 你用你的代碼,對在第一隨機顯示
  • 設置的setInterval的調用rotateText每十秒鐘(如現在)
  • ,但後來改變rotateText的主體將ajax調用到您的服務器,並加載下一個隨機報價

函數的主體可能如下(實施時要小心,我假設存在的jQuery library對於這一點,網址必須相互匹配,如後面詳述):

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

對於這一點,你必須創建第二個PHP文件,它什麼也不做,只是加載一個隨機的報價和它相呼應,輸出,並指出該網址在ajax調用該PHP。從您的代碼

複製:

<?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解決方案每十秒鐘給出一個新的隨機報價,沒有特定的順序)