Probleme mitZeichensatz von HTML-Textarea in MySQL-Datenbank
Verfasst: 24.02.2010 14:16
Hallo! Ich bin relativ neu, was HTML, CSS, PHP und MySQL angeht, und mitunter aus diesem Grund habe ich mal ein Forum aufgesetzt, also auch zum Lernen dieser Sprachen. Das Forum liegt auf www.fitness-ka.de - dort könnt ihr das Problem auch sehen - und immerhin habe ich schon ein paar Mods erfolgreich implementiert und ein paar Modifikationen vorgenommen.
Jetzt folgendes Problem:
Ich habe die index_body.html dergestalt verändert, dass je nach Zustand einer neuen Tabelle (TOPINFO) in der MySQL-Datenbank (STRATO) vor den einzelnen Foren ein Eintrag "Neueste Informationen" im Stil einer Forumskategorie angezeigt wird.
Die Datenbank hat folgende Struktur:
Nr. - Feld - Typ - Bedeutung
1 - logged - smallint(1) - User eingeloggt (0/1) -> das ist auch der eindeutige Schlüssel
2 - visible - smallint(1) - Topinfo wird angezeigt (0/1)
3 - message - mediumtext/blob (utf8_bin) - Text der Topinfo
Es sind genau 2 Datensätze enthalten, einer für angemeldete User (logged=1), einer für Gäste (logged=0), und ich kann wahlweise entscheiden, wer davon die Topinfo zu sehen bekommt und wer nicht, und welchen Text User und Gäste sehen.
Soweit so gut, wenn ich das in PHPmyAdmin eingebe funktioniert alles, also auch HTML-Tags, Zeilenumbrüche etc.
Jetzt habe ich für das ACP ein Modul geschrieben, in welchem ich mittels TEXTAREA die Texte als Admin direkt im Forum ändern kann, weil mir der Weg nach PHPmyAdmin zu umständlich ist. Das funktioniert auch prinzipiell, aber HTML-Formatierungs-Tags werden nicht übernommen. Bei der Eingabe direkt in PHPmyAdmin war das kein Problem.
Die Übergabe im ACP mache ich z.B. so:
<textarea name="T0" cols="35" rows="8" value="{T0}">{T0}</textarea>
<input type="checkbox" name="C0" value="1" {C0} /> {L_VISIBLE}
Und das Schreiben in die Datenbank so:
$message = $db->sql_escape(request_var('T' . $i, '', true));
$visible = ( isset($_POST["C$i"]) ) ? '1' :'0';
$sql = "UPDATE " . TOPINFO_TABLE . "
SET visible = '$visible', message = '$message'
WHERE logged = '$i'";
$db->sql_query($sql);
Wenn ich in die textarea z.B. folgendes eingebe <b>Fitness-KA.de</b>, steht in der Datenbank nachher folgendes: <b>fitness-ka.de!</b>
Das hat zur Folge, dass ich in der Ausgabe nachher die Tags in Klartext sehe und nicht umgesetzt.
Was mache ich falsch? Am liebsten würde ich dort sogar BBCode verwenden, aber irgendwie klappt das nicht, liegt wohl am CSS, aber davon habe ich noch weniger Ahnung...
Die Anzeige in der Index-Body sieht so aus:
<!-- IF TOPINFO_VISIBLE == 1 -->
<div class="forabg">
<div class="inner">
<span class="corners-top"><span></span></span>
<ul class="topiclist">
<li class="header"><dl><dt>{TOPINFO_TITLE}</dt></dl></li>
</ul>
<ul class="topiclist forums" style="padding: 5px">
<li>{TOPINFO_MESSAGE}</li>
</ul>
<span class="corners-bottom"><span></span></span>
</div>
</div>
<!-- ENDIF -->
Danke und Grüße,
Peer
Jetzt folgendes Problem:
Ich habe die index_body.html dergestalt verändert, dass je nach Zustand einer neuen Tabelle (TOPINFO) in der MySQL-Datenbank (STRATO) vor den einzelnen Foren ein Eintrag "Neueste Informationen" im Stil einer Forumskategorie angezeigt wird.
Die Datenbank hat folgende Struktur:
Nr. - Feld - Typ - Bedeutung
1 - logged - smallint(1) - User eingeloggt (0/1) -> das ist auch der eindeutige Schlüssel
2 - visible - smallint(1) - Topinfo wird angezeigt (0/1)
3 - message - mediumtext/blob (utf8_bin) - Text der Topinfo
Es sind genau 2 Datensätze enthalten, einer für angemeldete User (logged=1), einer für Gäste (logged=0), und ich kann wahlweise entscheiden, wer davon die Topinfo zu sehen bekommt und wer nicht, und welchen Text User und Gäste sehen.
Soweit so gut, wenn ich das in PHPmyAdmin eingebe funktioniert alles, also auch HTML-Tags, Zeilenumbrüche etc.
Jetzt habe ich für das ACP ein Modul geschrieben, in welchem ich mittels TEXTAREA die Texte als Admin direkt im Forum ändern kann, weil mir der Weg nach PHPmyAdmin zu umständlich ist. Das funktioniert auch prinzipiell, aber HTML-Formatierungs-Tags werden nicht übernommen. Bei der Eingabe direkt in PHPmyAdmin war das kein Problem.
Die Übergabe im ACP mache ich z.B. so:
<textarea name="T0" cols="35" rows="8" value="{T0}">{T0}</textarea>
<input type="checkbox" name="C0" value="1" {C0} /> {L_VISIBLE}
Und das Schreiben in die Datenbank so:
$message = $db->sql_escape(request_var('T' . $i, '', true));
$visible = ( isset($_POST["C$i"]) ) ? '1' :'0';
$sql = "UPDATE " . TOPINFO_TABLE . "
SET visible = '$visible', message = '$message'
WHERE logged = '$i'";
$db->sql_query($sql);
Wenn ich in die textarea z.B. folgendes eingebe <b>Fitness-KA.de</b>, steht in der Datenbank nachher folgendes: <b>fitness-ka.de!</b>
Das hat zur Folge, dass ich in der Ausgabe nachher die Tags in Klartext sehe und nicht umgesetzt.
Was mache ich falsch? Am liebsten würde ich dort sogar BBCode verwenden, aber irgendwie klappt das nicht, liegt wohl am CSS, aber davon habe ich noch weniger Ahnung...
Die Anzeige in der Index-Body sieht so aus:
<!-- IF TOPINFO_VISIBLE == 1 -->
<div class="forabg">
<div class="inner">
<span class="corners-top"><span></span></span>
<ul class="topiclist">
<li class="header"><dl><dt>{TOPINFO_TITLE}</dt></dl></li>
</ul>
<ul class="topiclist forums" style="padding: 5px">
<li>{TOPINFO_MESSAGE}</li>
</ul>
<span class="corners-bottom"><span></span></span>
</div>
</div>
<!-- ENDIF -->
Danke und Grüße,
Peer