![]() | ![]() | |
![]() |
Die ASP.NET- und die PHP-Lösung sind weitgehend identisch. Zunächst werden aus einer Datenbank die ersten drei News gelesen und aneinander gehängt. Dann wird ein<div>-Container für die Ausgabe des Lauftextes erzeugt (alternativ kann es auch ein Textfeld oder die Statusleiste sein). Zu guter Letzt wird die Funktion zur Erzeugung des Lauftextes aufgerufen. Am Anfang steht der Newsticker. Dieser besteht im Wesentlichen aus der Verwendung von Timeouts und ein wenig DHTML (oder, genauer gesagt,getElementById() undinnerHTML). Hier die entsprechende Funktion: function ticker_div(divid, text, verzoegerung) { document.getElementById(divid).innerHTML = text; text = text.substring(1, text.length) + text.charAt(0); var temp = text var pos = 0; while (temp.indexOf("\"", pos) > –1) { temp = temp.substring(0, temp.indexOf("\"", pos)) + "\\\"" + temp.substring(temp.indexOf("\"", pos) + 1, temp.length); pos = temp.indexOf("\"", pos) + 1; } var id = setTimeout( "ticker_div(\"" + divid + "\", \"" + temp + "\", " + verzoegerung + ")", verzoegerung); return id;} Nun zur Serverseite; beginnen wir zunächst mit der ASP.NET-Lösung: <%Dim news As String = ""Dim strConn As String = "Trusted_Connection=yes;initial catalog=news;data source=(local)"Dim n As New System.Data.SqlClient.SqlConnection(strConn)n.Open()Dim cmd As New System.Data.SqlClient.SqlCommand()cmd.CommandText = "SELECT TOP 3 headline FROM news"cmd.Connection = nDim r As System.Data.IDataReader = cmd.ExecuteReader()While r.Read() news = news & r("headline") & " +++ "End Whilen.Close()' Sonderzeichen ersetzennews = Replace(news, vbCrLf, "") ' Umbrüche entfernennews = Replace(news, """", "\""") ' " -> \"news = Server.HTMLEncode(news) ' HTML-Umwandlung%><html><head><title>Newsticker mit ASP.NET</title><script type="text/javascript" src="lauftext.js"></script><script type="text/javascript"><!--// ASP-Variable in JavaScript-Variable speichernvar news = "<% =news %>";//--></script></head><bodyonload="ticker_div('ticker', news, 500);"><div></div></body></html> Beachten Sie die Ersetzung der Sonderzeichen. Im Newstext dürfen beispielsweise keine Umbrüche oder Anführungszeichen auftreten, weil diese dann bei der Zuweisung an die JavaScript-Variable zu Problemen führen würden. Ebenso werden HTML-Sonderzeichen wie etwa spitze Klammern durch die entsprechenden Entitäten ersetzt (das macht in ASP.NET die FunktionServer.HTMLEncode() und in PHP die Funktionhtmlspecialchars()), damit später die HTML-Ausgabe funktioniert. Die PHP-Lösung sieht ähnlich aus. Bei PHP lautet zunächst die Gretchenfrage, ob man als Datenbank auf MySQL setzt (unter Linux ist das fast schon Pflicht, von dem weniger verbreiteten, aber ebenfalls mächtigen Postgres einmal abgesehen) oder – sofern der Webserver unter Windows läuft – auf eine ODBC-Verbindung oder gar direkt auf den Microsoft SQL Server. Ein großer Vergleichstest in einer renommierten Computerzeitschrift hat im Juli 2001 ergeben, dass das performanteste System eine Kombination aus Windows 2000, PHP und Microsoft SQL Server 2000 ist.1 Generell ist vom Einsatz von MySQL unter Windows abzuraten, da die Datenbank insbesondere für Anfänger bei weitem nicht so komfortabel zu bedienen ist wie das Microsoft-Pendant. Aus Gründen der Ausgewogenheit der Mittel widmet sich der PHP-Abschnitt dennoch dem Zugriff auf eine MySQL-Datenbank; Windows-Nutzer können das Skript ohne großen Aufwand für einen Microsoft-SQL-Server-Zugriff umschreiben oder auf ASP.NET setzen. <?phpmysql_connect('localhost', 'root', '123');mysql_select_db('news');$result = mysql_query('SELECT TOP 3 headline FROM news');$news = '';while ($zeile = mysql_fetch_assoc($result)) { $news .= $zeile['headline'] . ' +++ ';}mysql_close();// Sonderzeichen ersetzen$news = str_replace("\n", '', $news); // Umbrüche entfernen$news = htmlspecialchars($news); // HTML-Umwandlung$news = addslashes($news); // " -> \"?><html><head><title>Newsticker mit PHP</title><script type="text/javascript" src="lauftext.js"></script><script type="text/javascript"><!--// PHP-Variable in JavaScript-Variable speichernvar news = "<?php echo $news; ?>";//--></script></head><bodyonload="ticker_div('ticker', news, 500);"><div></div></body></html>
Abbildung 25.2 Die News kommen frisch aus der Datenbank. Somit haben Sie mit nur wenigen Zeilen JavaScript-Code – und der ASP.NET/PHP-Code hielt sich auch in Grenzen – eine datenbankgestützte, dynamische Newsticker-Applikation geschaffen. 25.2.2 Bankleitzahlen | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Die in der URL übergebene BLZ muss ausgelesen werden. |
| In einer Datenbankabfrage muss der zugehörige Bankname herausgefunden werden. |
| Es muss JavaScript-Code generiert werden, der den ermittelten Banknamen in das Überweisungsformular einträgt. |
Von ASP.NET-Seite her benötigt man noch das Wissen, dass die übergebene BLZ mitRequest.QueryString("BLZ") ausgelesen werden kann. Das JavaScript-Kommando, um das Feld mit dem Banknamen zu füllen, lautet wie folgt (egal ob PHP oder ASP.NET):
parent.frames["ueberweisung"].document.forms["ueberweisung"].elements["bankname"].value = "Wert aus der Datenbank";
Damit lässt sich das Skript programmieren.
<%Dim bankname As String = ""If Not Request.QueryString("BLZ") Is Nothing AndAlso _ Request.QueryString("BLZ") <> "" Then Dim strConn As String = "Trusted_Connection=yes;initial catalog=banken;data source=(local)" Dim b As New System.Data.SqlClient.SqlConnection(strConn) Dim sql As String = "SELECT bankname FROM banken " sql = sql & "WHERE blz='" & _ Replace(Request.QueryString("BLZ"), "'", "") & "'" Dim cmd As New System.Data.SqlClient.SqlCommand() cmd.CommandText = sql cmd.Connection = b Dim r As System.Data.IDataReader = cmd.ExecuteReader() If r.Read() Then bankname = r("bankname") End If b.Close()End If%><html><head><title>BLZ</title><script type="text/javascript"><!--parent.frames["ueberweisung"].document.forms["ueberweisung"].elements["bankname"].value = "<% =bankname %>";//--></script></head><body></body></html>
Wird dieses Skript mit dem Parameterblz=7000000 aufgerufen, könnte die Ausgabe in etwa wie folgt aussehen:
<html><head><title>BLZ</title><script type="text/javascript"><!--parent.frames["ueberweisung"].document.forms["ueberweisung"].elements["bankname"].value = "Landeszentralbank";//--></script></head><body></body></html>
Die PHP-Variante sieht ähnlich aus, nur die Art des Datenbankzugriffs ist eine andere. Der Zugriff auf die übergebene Bankleitzahl erfolgt mit$_GET['BLZ']:
<?php$bankname = '';if (isset($_GET['BLZ']) && (int)$_GET['BLZ'] > 0) { mysql_connect('localhost', 'root', '123'); mysql_select_db('banken'); $sql = 'SELECT bankname FROM banken WHERE '; $sql = $sql . 'blz=\'' . (int)($_GET['BLZ']) . '\''; $result = mysql_query($sql); if ($zeile = mysql_fetch_assoc($result)) { $bankname = $zeile['bankname']; } mysql_close();}?><html><head><title>BLZ</title><script type="text/javascript"><!--parent.frames["ueberweisung"].document.forms["ueberweisung"].elements["bankname"].value = "<?php echo $bankname; ?>";//--></script></head><body></body></html>

Hier klicken, um das Bild zu Vergrößern
Abbildung 25.3 Der Bankname wurde automatisch ergänzt.
Damit ist das Beispiel fertiggestellt. Sie müssen sich nun nur noch um die Rahmenparameter kümmern, wie beispielsweise um eine Datenbank mit allen inländischen Bankleitzahlen und den dazugehörigen Banknamen. Die hier vorgestellte Technik ist jedoch auch beliebig auf andere Anwendungen übertragbar – beispielsweise könnte bei einem Online-Bestellschein nach der Eingabe der Bestellnummer (z. B. aus dem gedruckten Katalog) direkt der Produktname daneben erscheinen. Sie sind auch nicht auf Formular-Textfelder beschränkt, sondern können den Text auch per DHTML in einem<div>-Container ausgeben und somit frei(er) positionieren und vor allem besser layouten.
Ist Ihnen vor allem beim letzten Beispiel etwas aufgefallen? Genau, das Laden der Bankleitzahl ist eine AJAX-Anwendung – hier aber ganz ohne dasXMLHttpRequest-Objekt gelöst worden. Erinnern Sie sich an meine Aussage aus Kapitel 18: AJAX ist keine neue Technologie, sondern lediglich ein fescher neuer Name.
1 Das ist zwar schon eine Weile her, aber zeigt dennoch, dass man ideologische Grenzen überwinden und über den Tellerrand schauen sollte.
| << zurück |
| ||||||||||
![]() | ||||||||||
| ||||||||||
![]() | ||||||||||
| ||||||||||
![]() | ||||||||||
| ||||||||||
Copyright © Rheinwerk Verlag GmbH 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.