ERLEDIGT
NEIN
NEIN
ANTWORTEN
7
7
ZUGRIFFE
522
522
EMPFEHLEN
-
Ich habe folgende File: Chat.php
PHP-Code:<?php
error_reporting(0);
session_start();
header('Cache-control: private'); // IE6 fix
header("Content-Type: text/html; charset=utf-8");
if (!isset($_SESSION['USER_ID'])) $_SESSION['USER_ID'] = rand(1, 24);
$USER_ID = $_SESSION['USER_ID'];
session_write_close();
ob_flush();
flush();
$fn = 'chat.txt';
$read = &$_GET['r'];
if (isset($read)) {
if (!file_exists($fn)) {
touch($fn);
chmod($fn, 0644);
}
if ($read == 0) chat_write('<E>');
ignore_user_abort(true);
$i = 0;
while (true) {
$f = fopen($fn, 'r');
flock($f, 2);
$offset = 0;
$offset = trim(fgets($f));
if ($offset > $read) break;
flock($f, 3);
fclose($f);
@set_time_limit(0);
if ($i > 20) sleep(10);
else sleep(3);
echo "\n";
ob_flush();
flush();
if (connection_status() != 0) {
chat_write('<L>');
exit();
}
$i++;
}
while ($s = fgets($f)) {
echo utf8_encode($s);
if ($offset <= ++$read) break;
}
flock($f, 3);
fclose($f);
exit();
}
function chat_write($write) {
global $USER_ID, $fn;
$maxlines = 35;
if (trim($write) == '') return;
if (!file_exists($fn)) {
touch($fn);
chmod($fn, 0644);
}
$f = fopen($fn, 'r+');
flock($f, 2);
$offset = 0;
fscanf($f, "%s\n", $offset);
$offset++;
$i = 0;
$chat = '';
while (($i < $maxlines) && ($s = fgets($f))) {
$chat .= $s;
$i++;
}
$time = date('H:i:s');
$js = "cs($offset,$USER_ID,'$time','User','$write','');\n";
fseek($f, 0);
ftruncate($f, 0);
fwrite($f, "$offset\n");
fwrite($f, $js);
fwrite($f, $chat);
flock($f, 3);
fclose($f);
return $js;
}
function chat_delete($delete) {
global $fn;
if ($delete == '') exit();
if (!file_exists($fn)) {
touch($fn);
chmod($fn, 0644);
}
$f = fopen($fn, 'r+');
flock($f, 2);
$offset = 0;
fscanf($f, "%s\n", $offset);
$chat = '';
$i = 0;
while ($s = fgets($f)) {
$s = str_replace("'$delete'", "''", $s);
$chat .= $s;
$i++;
}
fseek($f, 0);
ftruncate($f, 0);
fwrite($f, "$offset\n");
fwrite($f, $chat);
flock($f, 3);
fclose($f);
}
$write = &$_POST['w'];
if (isset($write)) {
if ($write == '') exit();
$write = stripslashes($write);
$write = htmlspecialchars($write, ENT_QUOTES);
$write = addslashes($write);
if (strpos($write, '/del ') === 0) {
$delete = str_replace('/del ', '', $write);
chat_delete($delete);
exit();
}
$lines = wordwrap($write, 100, "\n", true);
$lines = explode("\n", $lines);
foreach ($lines as &$line) {
echo utf8_encode(chat_write($line));
}
exit();
}
?>
var lines = 35;
var title = '';
var offset = 0;
var messages = new Array();
var message = document.getElementById('message');
var chat = document.getElementById('chat');
var tmrRead = setTimeout('chat_read();', 300);
function request_write(url, post) {
r = false;
if (window.XMLHttpRequest) {
r = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
r = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
r = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
}
}
}
if (!r) return false;
r.onreadystatechange = alert_write;
if (post == null) {
r.open('GET', url, true);
r.send(null);
} else {
r.open('POST', url, true);
r.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
r.send(post);
}
}
function alert_write() {
try {
if ((r.readyState == 4) && (r.status == 200)) parse(r.responseText);
} catch(e) {
}
}
function request_read(url, post) {
r2 = false;
if (window.XMLHttpRequest) {
r2 = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
r2 = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
r2 = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
}
}
}
if (!r2) return false;
r2.abort();
r2.onreadystatechange = alert_read;
if (post == null) {
r2.open('GET', url, true);
r2.send(null);
} else {
r2.open('POST', url, true);
r2.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
r2.send(post);
}
}
function alert_read() {
clearTimeout(tmrRead);
try {
if ((r2.readyState == 4) && (r2.status == 200)) {
parse(r2.responseText);
tmrRead = setTimeout('chat_read();', 30);
}
} catch(e) {
tmrRead = setTimeout('chat_read();', 3000);
}
}
function chat_read() {
clearTimeout(tmrRead);
request_read('chat.php?r='+offset, null);
}
function keyup(e) {
if (window.event) k = window.event.keyCode;
else if (e) k = e.which;
else return true;
if (k == 13) chat_write();
}
function chat_display() {
html = '';
i = 0;
while ((i < lines) && (i < offset)) {
h = offset-i;
if (messages[h]) html = messages[h] + html;
i++;
}
chat.innerHTML = html;
if (title != '') {
title = title.replace(/&/g, '&');
title = title.replace(/"/g, '"');
title = title.replace(/'/g, '\'');
title = title.replace(/</g, '<');
title = title.replace(/>/g, '>');
document.title = title + ' - Chat by WebTemp.org';
}
}
function chat_write() {
request_write('chat.php', 'w='+escape(message.value));
message.value = '';
}
function cs(o, i, t, u, m, c) {
if (m == '<E>') {
if (u != '') messages[o] = '<span id="C'+i+'">['+t+'] * '+u+' has entered the chat *</span><br />';
} else if (m == '<L>') {
if (u != '') messages[o] = '<span id="C'+i+'">['+t+'] * '+u+' has left the chat *</span><br />';
} else {
if (u != '') {
u += ':';
spaces = 5 - u.length;
for (j = 0; j < spaces; j++) u += " ";
u += ' ';
}
if (title == '') title = m;
m = m.replace(/ /g, ' ');
messages[o] = '<span id="C'+i+'">['+t+'] '+u+'<b>'+m+'</b></span><br />';
}
if (o > offset) {
offset = o;
window.focus();
message.focus();
}
}
function parse(s) {
if (s != '') {
s = unescape(s);
eval(s);
chat_display();
}
}
Nun will ich das er aus meinem Membereich die Namen auslie´t, ich habe es schonmal versucht anhand der Session uid die ich mit dem Login habe die Namen auslesen zu lassen und dann an den Chat zu übergeben. an dieser Stelle ist das geregelt welcher Name benutzt wird:
PHP-Code:$js = "cs($offset,$USER_ID,'$time','User','$write','');\n";
Wenn ich da jetzt Statt User, Hallo eingeb funktioniert der Chat noch, wenn ich nun meine MySQL ausgabe da einfüge ($row['username']) dann bleibt der Chat bei Connecting..... stehen.
Kann mir wer nen Tipp geben? habe auch schon die ausgabe anders definiert und es funktioniert nicht... auch schon bei der Chat Session selber statt User_ID uid eingetragen aber i-wie ist es verhext...
hier wichtige Daten:
Mein Userbereich hat flgende Userid Session $_Session['uid']
meine MySQL Datenbank hat folgende Struktur:
user.sql:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
`id` int(11) NOT NULL auto_increment, `username` varchar(32) NOT NULL, `password` varchar(32) NOT NULL, `email` varchar(255) NOT NULL, `name` varchar(64) NOT NULL, `icq` varchar(16) NOT NULL, `admin` int(11) NOT NULL default '0', `time` int(15) NOT NULL default '0', `msn` varchar(45) NOT NULL, `hobbie` text NOT NULL, `lieblingsfaecher` text NOT NULL, `hassfaecher` text NOT NULL, `klasse` varchar(3) NOT NULL, `schule` text NOT NULL, `avatarid` int(8) NOT NULL, `online` int(2) default NULL, PRIMARY KEY (`id`)
Vielen Dank schon mal!
Mfg Raage
-
[QUOTE=raage;1832256]Ich habe folgende File: Chat.php
Wieso steht das in Anführungszeichen? Ich würde das so schreiben:PHP-Code:$js = "cs($offset,$USER_ID,'$time','User','$write','');\n";
LGPHP-Code:$js = cs($offset, $USER_ID, $time, "User", $write, "");
Kerstel
-
ist das nicht wayne ob ' ' oder " " ... also ich aknn keinen unterschied feststellen
-
klar kannst du auch '' anstatt "" schreiben, ich meinte die Anführungszeichen um die Variablen und um die Funktion, damit wäre $js ein String mit dem Inhalt:
cs($offset,$USER_ID,'$time','User','$write','');\n, d.h. die Funktion cs wird gar nicht aufgeführt. Also Anführungszeichen um Funktion weg, dann darf bei der Übergabe an eine Funktion eine Variable nicht in Anführungszeichen stehen, da Du sonst auch hier nur einen String übergibst, also anstatt '$time' $time übergeben.
-
Ich habe jetzt mal über alles andere folgendes gesetzt:
weil ich ja meine User auslesen möchte und den Namen an den Chat übergeben möchte damit da nicht immer nur User stehtPHP-Code:$sql="SELECT username FROM users WHERE id='".$_SESSION['uid']."'";
$result = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_assoc($result);
dementsprechend habe ich diese Zeile abgeändert und diesmal die ' ' weg gelassen:
Funktioniert immer noch nicht obwohl es für mich logisch erscheint... wenn ich statt $row['username'] XYZ oder Halll oeingebe heißen alle User entweder XYZ oder Hallo... warum funktioniert das hier nicht mit dem Usernamen... bzw. was mache ich falsch?PHP-Code:$time = date('H:i:s');
$js = "cs($offset,$USER_ID,$time,$row['username'],$write,'');\n";
hier nochmal die File die den Chat später anzeigt: index.php
PHP-Code:echo " <style type=\"text/css\">";
echo"<!--";
echo"body {color:black; background:white; font-family:verdana,arial,helvetica,sans-serif; font-size:13px;}";
echo"#C1 {color:#000;}";
echo"#C2 {color:#008;}";
echo"#C3 {color:#004;}";
echo"#C4 {color:#080;}";
echo"#C5 {color:#088;}";
echo"#C6 {color:#084;}";
echo"#C7 {color:#040;}";
echo"#C8 {color:#048;}";
echo"#C9 {color:#044;}";
echo"#C10 {color:#800;}";
echo"#C11 {color:#808;}";
echo"#C12 {color:#804;}";
echo"#C13 {color:#880;}";
echo"#C14 {color:#888;}";
echo"#C15 {color:#884;}";
echo"#C16 {color:#840;}";
echo"#C17 {color:#848;}";
echo"#C18 {color:#844;}";
echo"#C19 {color:#400;}";
echo"#C20 {color:#408;}";
echo"#C21 {color:#404;}";
echo"#C22 {color:#480;}";
echo"#C23 {color:#4CC;}";
echo"#C24 {color:#440;}";
echo"#chat {height:561px; width:830px; font-family:courier new,monospace; font-size:11px; line-height:16px; border:1px solid #CCC; background:#EEE;}";
echo"#message {font-family:courier new,monospace; font-size:12px; color:#00F;}";
echo"a.copyright {font-size: 10px; color:#888;}";
echo"-->";
echo"</style>";
echo"</head>";
echo"<body>";
echo"<div id=\"chat\">Connecting...</div>";
echo"<input id=\"message\" type=\"text\" size=\"100\" onkeyup=\"keyup(event);\" />";
echo"<input type=\"button\" value=\"Absenden\" onclick=\"chat_write();\" /><br />";
echo" <script language=\"JavaScript\" type=\"text/javascript\" src=\"chat.php\"></script>";
Geändert von raage (21.01.10 um 15:40 Uhr)
-
Details zu {} findest du im Link in meiner Signatur (letzter Punkt).PHP-Code:
$js = "cs({$offset},{$USER_ID},{$time},{$row['username']},{$write},'');\n";
Ich bevorzuge die letzte VariantePHP-Code:// Funktioniert aber beachten Sie: außerhalb von
// String-Anführungszeichen funktioniert das anders
echo "Eine Banane ist $früchte[Banane].";
.....
// Funktioniert nicht; verwenden Sie geschweifte Klammern. Das
// erzeugt einen Parser-Fehler.
echo "Eine Banane ist $früchte['Banane'].";
// Funktioniert
echo "Eine Banane ist {$früchte['Banane']}.";
Geändert von Yaslaw (21.01.10 um 15:38 Uhr)
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
21.01.10 17:38 #7
Probier doch mal mit
ob eine Fehlermeldung kommt.PHP-Code:error_reporting(E_ALL);
Wenn ja, dann poste Sie bitte...
Edit: Er könnte es auch so probieren:LGPHP-Code:echo "Eine Banane ist ".$früchte['Banane'].".";
DanielGeändert von Daniel0108 (21.01.10 um 17:40 Uhr)
-
vielen dank leute
das problem lag wo anders... habe meine datenbankabfrage an den anfang des Scriptes gesetzt wobei es eigentlich eher mittig gesetzt werden sollte
Ähnliche Themen
-
Problem mit AJAX-Chat
Von Sasser im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 14.03.10, 23:10 -
Chat mit Ajax ins bestehende Membersystem
Von aargau im Forum PHPAntworten: 5Letzter Beitrag: 06.04.09, 17:36 -
Ajax Chat Tutorial
Von Kurt Cobain im Forum Javascript & AjaxAntworten: 5Letzter Beitrag: 28.02.08, 21:42 -
Ajax Chat - Problem
Von frank24 im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 27.07.06, 17:30 -
Awaysystem für Ajax chat
Von wt-e im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 24.03.06, 04:18





Zitieren

Login






[PHP][Snippet] Array zu XML konvertieren