0

私はmysqlテーブルに大量の引用符を持っています.10秒ごとにそれらの単一のランダムな引用符をWebページに表示したいと思います. この質問をグーグル検索しましたが、パート1としてデータベースからランダムレコードを選択する方法と、パート2として10秒ごとにページ上のテキストを変更する方法が見つかりました。したがって、両方の部分をリンクすると、ランダムな引用が表示されますページですが、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>
4

1 に答える 1

0

実際のソリューションを機能させるには、ajax呼び出しを使用して、10 秒ごとに新しいランダムをロードする必要があります。

理論は次のとおりです。

  • 表示する最初のランダムに与えられたコードを使用します
  • 10秒ごとにrotateTextを呼び出すようにsetIntervalをセットアップします(現在のように)
  • ただし、rotateText の本体を変更して、サーバーに ajax 呼び出しを配置し​​、次のランダムな引用をロードします。

関数の本体は次のようになります (実装するときは注意してください。これにはjQuery ライブラリが存在すると想定しており、後で詳しく説明するように、URL を一致させる必要があります)。

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

このためには、2 番目の php ファイルを作成する必要があります。これは何もせず、ランダムな引用符をロードして出力にエコーし、その php への ajax 呼び出しで URL をポイントします。

コードからのコピー:

<?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 秒ごとに新しいランダムな見積もりを提供するため、これは真のローテーションになります)

于 2013-04-03T09:02:06.713 に答える