| Gast | [Erledigt] Probleme mit html tags! hallo erstmal alle zusammen,
meine hoffnung ist, das sihr mir hier weiterhelfen könnt, denn ich bin ein absoluter php newbie.
Mein Problem: Ich baue an einem Flash/PHP Chat, der grösstenteils auf einen vorhandenem Chat beruht. Jedoch habe ich ihn noch um einiges erweitert, z.B. Farben für Nachrichten. Und genau hier liegt das Problem. In dem Chat kann man öffentliche und private Nachrichten versenden. In Flash gibt es jetzt eine Variable Farbe, in die ich in Flash den jeweiligen Farbwert schreibe. Diese wollte ich jetzt in der chat.php datei verwenden, um dann letztendlich im Flash Ausgabefenster die Nachricht in der jeweiligen Farbe anzuzeigen.
Die Nachrichten werden alle in eine Textdatei namens msg.txt geschrieben. Zuerst einmal poste ich hier am besten die ganze chat.php, damit Ihr Euch ein Bild machen könnt:
<?php
header("Expires: ".gmdate("D, d M Y H:i:s")."GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
?>
<?php
error_reporting(7);
require ('required/config.php');
$chat_file_ok = "required/msg.txt";//message file
$users_file = "required/users.txt";//hier werden user und passwörter gespeichert
if($show_without_time == "no"){//zeige Zeit?
$substart=0;
}else{
$substart=19;
}
/* überprüfe ob der user schon verbannt wurde */
/* --------------- */
$banned_file = "required/banned_ip.txt";//the file with banned ips
$text_string = join ('', file ($banned_file));
if (ereg("(.)*$password\n",$text_string)){//this user was banned
$text_string = join ('', file ($users_file));
$new_list= str_replace ("$password", " banned", $text_string);
$fp = fopen($users_file, "w");
$fw = fwrite($fp, $new_list);
fclose($fp);
}
$person = str_replace ("\n"," ", $person);
$person = str_replace ("<", " ", $person);
$person = str_replace (">", " ", $person);
$person = trim ($person);
$person = stripslashes ($person);
?>
&output=
<?php
/* user check */
/* --------------- */
$text_string = join ('', file ($users_file));
$valid_user= "valid";
if ((ereg("(.)*$person\n(.)* kicked\n", $text_string)) or (ereg("(.)*$person\n(.)* banned\n", $text_string))){
$valid_user = "kicked";
}
if ($valid_user == "kicked"){
if (ereg("(.)*$person\n(.)* kicked\n", $text_string)){echo urlencode($kicked_user)."\n";}
if (ereg("(.)*$person\n(.)* banned\n", $text_string)){echo urlencode($banned_user)."\n";}
}else{
/* Dateigrösse der $chat_file_ok wir begrenzt*/
/* -------------------------------- */
$lines = file($chat_file_ok);
$a = count($lines);
if ($a >= $total_lenght){
$u = $a - $review_lenght;
$msg_old="";
for($i = $u; $i <= $a ;$i++){
$msg_old = $msg_old.strval($lines[$i]);
}
$fp = fopen($chat_file_ok, "w");
$fw = fwrite($fp, $msg_old);
fclose($fp);
}
/* schreibe die Nachricht in $chat_file_ok */
/* ------------------------------ */
$msg = str_replace ("\n"," ", $message);
$msg = stripslashes ($msg);
/* Filter für Beleidigungen */
/* ----------------- */
$number_of_bad_words = count($words_to_filter);
for($i = 0; $i <= $number_of_bad_words ;$i++){
if (strval($words_to_filter[$i])!=""){
$msg = eregi_replace(strval($words_to_filter[$i]),$replace_by,$msg);
}
}
if (ereg ("$private_message_expression", $msg, $regs) and ereg ("\(de $password a", $msg)){ // ist eine private Nachricht
$receiver = strval($regs[1])."\n";
$lines = file($users_file);
$a = count($lines);
$follow = 1;
for($i = 0; $i <= $a ;$i++){
if (strval($lines[$i]) == $receiver){
$add = rtrim(strval($lines[$i+1]));//liest das Passwort des Benutzers
$follow = 0;
}else{
if ($follow==1){
$add = " eztezamarchaoynoezta";// Benutzer ist nicht im Chat
}}
}
$msg .= $add;
}
if ($msg != ""){
$text_to_write = date ("(H:i:s)",time()+$correct_time)." ".$person." : ".$msg."\n";//zusammensetzen der nachricht
//echo $text_to_write;
//exit;
$fp = fopen($chat_file_ok, "a");
$fw = fwrite($fp, "$text_to_write");// Nachricht wird in msg.txt Datei geschrieben
fclose($fp);
}
/* Liest die letzten $chat_lenght Zeilen von $chat_file_ok aus*/
/* -------------------------------------------------- */
$lines = file($chat_file_ok);
$a = count($lines);
$u = $a - $chat_lenght;
/* hier wird der Textlauf gecheckt (von oben nach unten oder unten nach oben) */
/* -------------------- */
if ($text_order == "up"){
for($i = $a; $i >= $u ;$i--){
$is_private = 0;
$show_message = 1;
$line_value= strval($lines[$i]);
$string_to_add="";
/* Ausgabe in den Chat Private und allgemeine Nachrichten */
/* ----------------------------------------------- */
if (ereg($private_message_expression, $line_value, $name) and ereg("\(de (.*) a (.*)$", $line_value, $pass)){// ist eine private Nachricht
$senderpassword=strval($pass[1]);
$receiverpassword=strval($pass[2]);
$receivername=strval($name[1]);
$is_private = 1;
$show_message = 0;
}
if ($is_private == 1){
if (($receivername==$person) and ereg("(.)?$password(\n)?", $receiverpassword)){//ist der Empfänger
$line_value = ereg_replace( "\(de (.*) a (.*)$", "\n", $line_value);
echo substr(urlencode($line_value),$substart);//zeige Nachricht
} elseif(ereg("\(..:..:..\) $person :", $line_value) and ereg("(.)?$password", $senderpassword)){//ist der Sender
if (ereg("(.)?eztezamarchaoynoezta(\n)?", $receiverpassword)) {$string_to_add = $not_here_string;}
$line_value = ereg_replace( "\(de (.*) a (.*)$", "$string_to_add\n", $line_value);
echo substr(urlencode($line_value),$substart);//zeige Nachricht
}else{
$u--;
$show_message = 0;
}
}
if ($show_message == 1) {// ist eine allgemeine Nachricht
if ((ereg($bye_user,$line_value)) or (ereg($enter_string,$line_value))){
echo urlencode ($line_value);//zeige Zeit nur wenn User den Raum betritt oder verlässt
}
else{
echo substr(urlencode($line_value),$substart);//zeige Nachricht
}
}
}
}
else{
for($i = $u; $i <= $a ;$i++){
$is_private = 0;
$show_message = 1;
$line_value= strval($lines[$i]);
$string_to_add="";
/* Ausgabe in den Chat Private und allgemeine Nachrichten */
/* ----------------------------------------------- */
if (ereg($private_message_expression, $line_value, $name) and ereg("\(de (.*) a (.*)$", $line_value, $pass)){// ist eine private Nachricht
$senderpassword=strval($pass[1]);
$receiverpassword=strval($pass[2]);
$receivername=strval($name[1]);
$is_private = 1;
$show_message = 0;
}
if ($is_private == 1){
if (($receivername==$person) and ereg("(.)?$password(\n)?", $receiverpassword)){//ist der Empfänger
$line_value = ereg_replace( "\(de (.*) a (.*)$", "\n", $line_value);
echo substr(urlencode($line_value),$substart);//zeige Nachricht
} elseif(ereg("\(..:..:..\) $person :", $line_value) and ereg("(.)?$password", $senderpassword)){//ist der Sender
if (ereg("(.)?eztezamarchaoynoezta(\n)?", $receiverpassword)) {$string_to_add = $not_here_string;}
$line_value = ereg_replace( "\(de (.*) a (.*)$", "$string_to_add\n", $line_value);
echo substr(urlencode($line_value),$substart);//zeige Nachricht
}else{
$u--;
$show_message = 0;
}
}
if ($show_message == 1) {// ist eine allgemeine Nachricht
if ((ereg($bye_user,$line_value)) or (ereg($enter_string,$line_value))){
echo urlencode ($line_value);//zeige Zeit nur wenn User den Raum betritt oder verlässt
}
else{
echo substr(urlencode($line_value),$substart);//zeige Nachricht
}
}
}
}
}
echo "&order=";
echo $text_order;
?>
So, das ist ganz schön lange ich weiss. In $text_to_write steht ja hier noch folgendes:
$text_to_write = date ("(H:i:s)",time()+$correct_time)." ".$person." : ".$msg."\n";//zusammensetzen der nachricht
Jetzt dachte ich, dass wenn ich einfach hier die entsprechenden HTML Tags verwende und die Variable Farbe, die ich in Flash habe, auslese, einfüge, dann könnte ich die Nachrichten in Farbe sehen. Hierzu habe ich folgendes in der Zeile geändert:
$text_to_write = date ("(H:i:s)",time()+$correct_time)." <font color=\"#$farbe\">".$person." : ".$msg."</font>
\n";//zusammensetzen der nachricht
prinzipiell funktioniert das alles auch, jedoch wenn ich eine private nachricht versende und den empfänger falsch angebe, dann erscheint gar nichts in der flash ausgabe. in der textdatei steht alles prima drinnen. wenn ich jedoch eine private nachricht an einen user schicke, der vorhanden ist, dann wird diese nachricht dargestellt. normalerweise erscheint in der Ausgabe bei Eingabe eines falschen Usernamens "derbenutzer befindet sich nicht mehr im Chat".
Was mich sehr verwundert ist, dass wenn ich
$text_to_write = date ("(H:i:s)",time()+$correct_time)." ".$person." : ".$msg."\n";//zusammensetzen der nachricht
verwende, alles beide bestens funktioniert. wenn ich jedoch das ersetzte $text_to_write verwende, dann passiert eben das obenstehende Problem.
Ich wäre Euch allen sehr dankbar, wenn Ihr mir irgendwie helfen könntet.
Vielen Dank für Eure Mühe
der phpnewser |