PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Flash/PHP/SQL] Text aus Datenbank in Flash bekommen (Newsticker)


Popopinsel
2009-05-07, 09:02:01
Hi,

ich versuche gerade, einen einfachen Newsticker zu erstellen. Ich habe bereits ein System entworfen, um die News bequem über ein Webinterface in die Datenbank einzupflegen.

Nun möchte ich einen Flash-Newsticker erstellen, der sich die Daten dynamisch aus der SQL-Datenbank holt. Ich habe mich bereits ein wenig in die Materie eingelesen (ich wusste nicht mal, dass man in Flash programmieren kann =) ) und gesehen, dass man von Flash aus nicht direkt an die DB herankommt. Ich muss also ein serverseitiges Script, in meinem Fall PHP, dazu verwenden, um die Daten der DB in FLash einzufügen. Dieses Script sollte nicht das Problem sein, schließlich brauche ich darin lediglich eineVerbindung zur DB aufzubauen und die benötigten Informationen per echo auszugeben.

Kann mir jemand von Euch bei der Flash-Sache helfen? Kennt jemand Links, wo es um genau diese Problem geht (also nicht getrennt um Ticker in Flash/SQL in Flash, sondern um eben die Kombi daraus) oder hat vielleicht schon eine fertige Lösung parat? Ich stehe ein wenig unter Zeitdruck, daher mein Wunsch nach einer leicht verständlichen Lösung!

Danke schonmal!

Popopinsel
2009-05-07, 12:02:45
Also, ich bin jetzt ein bisschen weiter gekommen. Durch lange Suche und einiges an Bastelei habe ich nun folgenden Code:

Die Datei "ticker.fla":

AS der Szene 1:
var lv = new LoadVars();
lv.onLoad = function() {
startTicker(this.news);
}
lv.load("http://localhost/php/message.php");

function startTicker(val) {
ticker.setText(val);
};

AS des Symbols "ticker":
var txt = new Array();
var gap = 10;
var spd = 2;
var textwidth = 0;
function setText(t) {
txt[0] = container.attachMovie("text", "txt0", 0);
txt[0].ttext.autoSize = true;
txt[0].ttext.text = t;
txt[0]._x = bg._width+gap;
txt[0]._y = bg._height/2-txt[0].ttext.textHeight/2;
textwidth = txt[0].ttext.textWidth;
var ratio = bg._width/(textwidth+gap)+1;
for (var i = 1; i<Math.ceil(ratio); i++) {
txt[i] = container.attachMovie("text", "txt"+i, i);
txt[i].ttext.autoSize = true;
txt[i].ttext.text = t;
txt[i]._x = txt[i-1]._x+textwidth+gap;
txt[i]._y = txt[i-1]._y;
}
go();
}
function go() {
this.onEnterFrame = function() {
for (var i = 0; i<txt.length; i++) {
txt[i]._x -= spd;
if (txt[i]._x<-(textwidth+gap)) {
queue(i);
}
}
};
}
function queue(n) {
if (n == 0) {
txt[n]._x = txt[txt.length-1]._x+textwidth+gap;
} else {
txt[n]._x = txt[n-1]._x+textwidth+gap;
}
}


Die Datei "message.php":
<?php

// open connection to database
$connection = mysql_connect("localhost", "***", "***") or die
("Unable to connect!");
mysql_select_db("newsticker") or die ("Unable to select database!");

// formulate and execute query
$query = "SELECT text FROM news ORDER BY id ASC";
$result = mysql_query($query) or die("Error in query: " .
mysql_error());

if (mysql_num_rows($result) > 0)
{
// iterate through rows
while($row = mysql_fetch_object($result))
{
// build headline string
$str .= $row->text . " +++ ";
}

// print output as form-encoded data
echo "news=" . utf8_encode($str);
}

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



So weit so gut.

Problem: Wenn ich den Film nun teste/exportiere, dann wird leider nur die älteste News im Film angezeigt und wiederholt, obwohl es insgesamt 5 Einträge gibt. Allerdings zeigt mir die "message.php" beim direkten Öffnen über den Browser den kompletten String aus allen Einträgen an!

Hat jemand eine Idee?

Gast
2009-05-07, 14:02:53
warum muss es denn überhaupt flash sein, das ist für diesen zweck doch vollkommen übertrieben. per javascript lässt sich das wesentlich schöner erledigen und funktioniert dann auch ohne flash.

Popopinsel
2009-05-07, 15:20:35
[...]per javascript lässt sich das wesentlich schöner erledigen[...]

Ich habe bereits einige JS-Ticker gesehen und die basierten alle darauf, den String Zeichen für Zeichen in eine Richtung zu verschieben. Dadurch ruckeln diese Ticker enorm.

Nichtsdestodennochtrotz, ich hab es jetzt selbst hinbekommen. Es klappt alles wunderbar, bis auf einige Eigenarten von Flash<->PHP, welche ich aber mit ein paar Tricksereien umgehen konnte.

Wen es interessiert:

"ticker.php" (ehemals "message.php"):
<?php
require_once('ReadNews.php');

$news = ReadNews();

for ( $i = 0; $i < count($news); $i++ ) {
$theNews = $news[$i]['text']." --- ".$strNews;
$strNews = $theNews;
}

echo "news= --- ". utf8_encode($strNews);

?>

"ReadNews.php" (welche ich bereits in meinem Newssystem genutzt habe):
<?php

function ReadNews(){

$serverlink = mysql_connect('127.0.0.1','***','***');
mysql_select_db('newsticker');
$query = 'select * from news ORDER BY `id` ASC';
$result = mysql_query($query);

$news = array();

while ($row = mysql_fetch_assoc($result)) {
$news[] = $row;
}

return $news;

}
?>

Und in der "ticker.fla" bzw .swf hat sich nur folgendes geändert:
lv.load("http://localhost/php/ticker.php");

sowie:
var gap = 0;

Gast
2009-05-07, 15:28:55
Ich habe bereits einige JS-Ticker gesehen und die basierten alle darauf, den String Zeichen für Zeichen in eine Richtung zu verschieben. Dadurch ruckeln diese Ticker enorm.
in kombination mit css bekommt man auch ein weiches scrollen hin.