PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [php]text aus mysql einfügen



chicill
20.02.2004, 02:14
hi Leute,
ich habe ein kleines Problem undzwar habe ich mir ein php buch bestellt und angefangen zu lernen ganz normal halt so und nun hab ich angefangen mal mein erstes kleineres "scriptchen":p zu basteln es geht auch alles soweit nur ich habe ein kleines Problem beim einfügen der daten die aus der datenbank kommen und in einen lauftext eingefügt werden!

Also erstmal zur erklärung des Scriptes, damit sich die leutchen ein besseres Bild machen können worum es geht ^^.
Ich wollte für meinen Clan ein Script machen mit dem alle der Leader oder die Orgas den Newsticker ändern können der auf der Seite angezeigt wird über ein admin menue (is noch in weiter ferne :p ). So die Daten werden auch schon aus der Datenbank abgerufen und so weiter nur soll der Text jetzt in den lauftext reinkopiert werden und dabei hab ich nen Prob. :).

Hier das Script:
(is mein erstes Script, also bitte nich soviel meckern aller Anfang ist schwer :).)





<html>
<head>
<title>Dies ist der Ticker</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>
<body text="#000000">
<?php
$dbconnect = @mysql_connect("localhost", "fdsfds", "fdfsfsfds");
if (!$dbconnect) { //Wenn zur Datenbank nicht connectet werden kann, erscheint diese Fehlermeldung
echo( "<p>Verbindung zur Datenbank kann zur Zeit nicht hergestellt werden.</p>");
exit();
}
if (! @mysql_select_db("sdfsfdsfs") ) { //Es wird die Datenbank ausgewählt. Wenn nicht connectet werden kann erscheint diese Fehlermeldung
echo ("<p>Auswahl des Tickers zur Zeit nicht möglich.</p>");
exit();
}
$result = @mysql_query("select ticker FROM ticker_data"); //Der Text wird aus der Datenbank geholt
if (!$result) { //Wenn keine Verbindung hergestellt werden kann erscheint diese Fehlermeldung
echo("<p>Der Ticker kann zur Zeit nicht geladen werden.</p>");
exit();
}

while ( $row = mysql_fetch_array($result) ) {
}
?>
<table width="100" cellspacing="0" cellpadding="0">
<tr>
<td>
<marquee scrollamount="2" scrolldelay="2">
<font size="5"><?php echo(" $row["ticker"] "); ?></font>
</marquee>
</td>
</tr>
</table>
</body>
</html>


Der einzige fehler der auftritt ist der dass nicht angezeigt wird ^^.
Hoffentlich weiß einer wie man das Problem behebt :).

greetz Razer

Ineluki
20.02.2004, 06:14
hm .. ich hab von php nicht wirklich ahnung ... aber hast dus schon mal so probiert ?

<font size="5"><?php echo($row["ticker"]); ?></font>

bzw

<?php echo("<font size=\"5\">".$row["ticker"]."</font>"); ?>

Ansonsten versuch mal nicht das script zu unterbrechen sondern die Ausgabe der HTML-Befehle ueber echo in ein und das selbe script einzubauen



<?
echo ("<html>");
echo ("<head>");
echo ("<title&gt<img src=\"images/smilies/s_057.gif\" border=\"0\" alt=\"\">ies ist der Ticker</title>");
echo ("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\"></head>");
echo ("<body text=\"#000000\">");
$dbconnect = @mysql_connect("localhost", "fdsfds", "fdfsfsfds");
if (!$dbconnect) {
echo( "<p>Verbindung zur Datenbank kann zur Zeit nicht hergestellt werden.</p>");
exit();
}
if (! @mysql_select_db("sdfsfdsfs") ) {
echo ("<p>Auswahl des Tickers zur Zeit nicht möglich.</p>");
exit();
}
$result = @mysql_query("select ticker FROM ticker_data");
if (!$result)
{
echo("<p&gt<img src=\"images/smilies/s_057.gif\" border=\"0\" ".
"alt=\"\">er Ticker kann zur Zeit nicht geladen werden.</p>");
exit();
}

while ( $row = mysql_fetch_array($result) ) {
echo ("<table width=\"100\" cellspacing=\"0\" ".
"cellpadding=\"0\"><tr><td><marquee scrollamount=\"2\" ".
"scrolldelay=\"2\"><font size=\"5\">");
echo($row["ticker"]);
echo ("</font></marquee></td></tr>
}
echo ("</table></body></html>");
?>


Ich nehme mal an, das Problem ist, dass du im Ersten Teil die While Schleife ja schon abgeschlossen hast ( du hast hinter dem While ein {} stehen), und dadurch $row im zweiten Teil nicht mehr definiert ist, bzw neu angelegt wird

Wenn ich es richtig verstanden habe, willst du doch fuer jeden Eintrag in der Datenbank eine Zeile in der Tabelle haben, oder ? .. dann muss der Code zum erzeugen der Tabelle auch in die Whileschleife hinein.

Wenn ich Bloedsinn geschrieben haben sollte, dann einfach nicht beachten ^^

Gruss Ineluki

Chocwise
20.02.2004, 06:15
Die Ausgabe miss innerhalb der While-Schleife liegen weil "$row["ticker"]" außerhalb keinen definierten Wert mehr hat:


<html>
<head>
<title&gt<img src="images/smilies/s_057.gif" border="0" alt="">ies ist der Ticker</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>
<body text="#000000">
<?php
$dbconnect = @mysql_connect("localhost", "fdsfds", "fdfsfsfds");
if (!$dbconnect) { //Wenn zur Datenbank nicht connectet werden kann, erscheint diese Fehlermeldung
echo( "<p>Verbindung zur Datenbank kann zur Zeit nicht hergestellt werden.</p>");
exit();
}
if (! @mysql_select_db("sdfsfdsfs") ) { //Es wird die Datenbank ausgewählt. Wenn nicht connectet werden kann erscheint diese Fehlermeldung
echo ("<p>Auswahl des Tickers zur Zeit nicht möglich.</p>");
exit();
}
$result = @mysql_query("select ticker FROM ticker_data"); //Der Text wird aus der Datenbank geholt
if (!$result) { //Wenn keine Verbindung hergestellt werden kann erscheint diese Fehlermeldung
echo("<p&gt<img src="images/smilies/s_057.gif" border="0" alt="">er Ticker kann zur Zeit nicht geladen werden.</p>");
exit();
}
?>
<table width="100" cellspacing="0" cellpadding="0">
<tr>
<td>
<marquee scrollamount="2" scrolldelay="2">
<font size="5"><?php
while($row = mysql_fetch_array($result)){
echo $row[ticker];
} ?></font>
</marquee>
</td>
</tr>
</table>
</body>
</html>

Viele machen auch den Fehler das sie innerhalb eines mit echo auzugebenen Strings unmaskierte Anführungsstriche ausgeben lassen wollen.

Würdest du z.B. versuchen diesen Befehl auszuführen:
echo "Ich bin ein "Testtext".";
würde PHP "Ich bin ein " als String erkennen, da der Auszugebene String aber mit den 2. Anführungsstrichen in PHP's "Augen" endet versucht PHP "Testtext" als Befehl zu interpretieren.
Um dieses Problem zu umgehen kannst du es so handhaben:
echo 'Ich bin ein "Testtext".';
oder so:
echo "Ich bin ein \"Testtext\".";
Das nur zu den Basics.
Das sage ich dir weil du es in dieser Form verwendet hast:
echo ("$row["ticker"]");

BTW: beim echo-Befehl sind keine Klammern notwendig wie du an meinen Beispielen siehst, aber es ist auch nicht unbedingt falsch.
Das selbe wenn du nur den Wert einer Variable ausgeben willst. In dem Fall kannst du sogar die Anführungsstriche weglassen (wie ichs auch in deinem Script geändert habe).


Wenn du Aufnahmebereit bist, hab ich hier noch etwas tiefergehende Info zu dem while()-Ding:
Du musst dir vorstellen, dass die While-Schleife nichts anderes tut, als einen Datansatz aus der Tabelle ticker_data nach dem anderen auszulesen.
Findet "mysql_fetch_array($result)" keinen Datensatz mehr gibt es "FALSE" bzw 0 aus, was die while-Schleife anhält.
Wenn du also nur einen Datensatz (eine Zeile) in der Tabelle "ticker_data" hast, gibt while nur ein Ergebnis aus. Hat sie mehrere, würde die while-Schleife alle hintereinander ausgeben:
Datensatz1Datensatz2Datensatz3...
Wenn du also mehrere Datensätze in dem Ticker ausgeben lassen willst, kannst du die einzelnen Messages auch voneinander trennen indem du die Alte durch diese echo-Anweisung ersetzt:
echo $row[ticker]." - ";
(Der Punkt sagt PHP AFAIK dass das stringdefinierende " nichtmehr zur Variable $row[ticker] gehört)
Das sähe dann so aus:
Datensatz1 - Datensatz2 - Datensatz3 - ...

Da die While-Schleife allerdings nur auf das angewendet wird das sich zwischen den beiden geschweiften Klammern ("{" und "}") befindet, muss deine echo-Anweisung innerhalb des while-Bereiches bleiben.

chicill
20.02.2004, 21:01
ja so geht es schonmal, aber ich wollt es so einstellen das man alles per admin menue einstellen kann, also im Falle eines Tickers die Art wie er scrollt schriftgröße etc.

Da dachte ich mir das dann so:



<html>
<head>
<title>Dies ist der Ticker</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head>
<body text="#000000">
<?php
$dbconnect = @mysql_connect("localhost", "asddsa", "adsdas"); //zu MySQL connecten
if (!$dbconnect) { //Wenn zur Datenbank nicht connectet werden kann, erscheint diese Fehlermeldung
echo( "<p>Verbindung zur Datenbank kann zur Zeit nicht hergestellt werden.</p>");
exit();
}
if (! @mysql_select_db("dsdsasds") ) { //Es wird die Datenbank ausgewählt. Wenn nicht connectet werden kann erscheint diese Fehlermeldung
echo ("<p>Auswahl des Tickers zur Zeit nicht möglich.</p>");
exit();
}
$result = @mysql_query("select ticker, amount, delay, direction, align, behaviorm, width , bgcolor FROM ticker_data"); //Der Text wird aus der Datenbank geholt
if (!$result) { //Wenn keine Verbindung hergestellt werden kann erscheint diese Fehlermeldung
echo("<p>Der Ticker kann zur Zeit nicht geladen werden.</p>");
exit();
}
while ( $row = mysql_fetch_array($result) ) { //text wird in variablen gespeichert
$tickertext = $row["ticker"];
$scrollamount = $row["amount"];
$scrolldelay = $row["delay"];
$direct = $row["direction"];
$ausrichtung = $row["align"];
$art = $row["behavior"];
$tabellenbreite = $row["width"];
$hintergrund = $row["bgcolor"];
}
?>
<table width="<? echo ("$tabellenbreite"); ?>" cellspacing="0" cellpadding="0" align="<? echo ("$ausrichtung"); ?>" bgcolor="<? echo ("$hintergrund"); ?>">
<tr>
<td>
<marquee scrollamount="<? echo ("$scrollamount"); ?>" scrolldelay="<? echo ("$scrolldelay"); ?>" direction="<? echo ("$direct"); ?>" behavior="<? echo ("$art"); ?>" >
<font size="5"></font>
</marquee>
</td>
</tr>
</table>
</body>
</html>


Nur er kriegt erst gar keine Verbindung zur Datenbank (der dritte fehler im script). Denke mal liegt am mysql query nur wie man das behebt ist mir ein rätsel :).

@Chocwise danke für erklärung, denn genau das mit der while schleife hatte ich in meinem buch voll nich kapiert ^^, aber an der aufführung haperst immernoch bei mir :/.

greetz Razer

Chocwise
20.02.2004, 22:39
Wie sind denn die Syptome?
Irgendwelche Fehlermeldungen? Was wird ausgegeben, bzw. was nicht?
Wenn z.B. das hier auftaucht: "Verbindung zur Datenbank kann zur Zeit nicht hergestellt werden." kann ich dir auch nicht helfen da ich keinen Zugriff auf deine Datenbank habe um nachzusehen ob da ein Fehler vorliegt.

Wenn allerdings alles richtig läuft, außer dem Umstand das die Daten, die aus der Datenbank geholt werden sollten, nicht ausgegeben werden, mag es daran liegen das man die Array's nicht ohne weiteres in eine Variable übertragen kann um diese Variable dann außerhalb der while-Schleife einzusetzen.
Wenn du mehr als einen Datensatz ausgeben lassen willst, klappt das AFAIK so ohnehin nicht, aber da bin ich mir nicht ganz sicher.

Ah, ich sehe grad einen Fehler:
Schau mal beim Abfragequery, dort fragst du das Feld "behaviorm ab", schau mal ob das Feld tatsächlich "behaviorm" heißt. Wenn ja, ändere den Array innerhalb der while-Schleife:
$art = $row["behaviorm"];

Sollte es dann immernoch nicht gehen, gib mal die angesprochenen fehlenden Info's. :)


Nachtrag: Es müsste auch einen Weg geben mit dem man etwas aus der Datenbank ausgeben kann ohne mit der while-Schleife arbeiten zu müssen. Das kann man dann bequem einsetzen wenn man nur einen Datensatz hat den man rausholen möchte. Ich hab das zwar schon mal in irgendeinem Script verwendet, aber ich weiß nichtmehr in welchem. :(
Vielleicht kennt hier jemand Anderer ja die Lösung. ::)

chicill
20.02.2004, 22:56
Original geschrieben von Chocwise
Ah, ich sehe grad einen Fehler:
Schau mal beim Abfragequery, dort fragst du das Feld "behaviorm ab", schau mal ob das Feld tatsächlich "behaviorm" heißt. Wenn ja, ändere den Array innerhalb der while-Schleife:
$art = $row["behaviorm"];

Sollte es dann immernoch nicht gehen, gib mal die angesprochenen fehlenden Info's. :)


So also das mit dem m hinten dran war echt der fehler, danke :). (ich könnt mir in den arsch tretten was nen scheiß>:() Jetzt geht aber endlich alles.

Very Big THX ^^.

Hier ist der Ticker, falls einer mal gucken möchte ^^
http://www.zone4-gamer.com/ticker_test.php

greetz Razer und nochmal THX 4 fast help