DelphiDell
Erfahrenes Mitglied
Hallo ich habe das Flash Chat-Tutorial durchgemacht. http://www.tutorials.de/tutorials214865.html
Aber wie hätte es auch anders seien können, dass Script ist voller Fehler, die ich alleine einfach nicht finde.
Meine Dateien:
chat.php
Und Hier der Flash Code in dem die Funktion Login usw vorkommen:
Ich hoffe der fehler ist schon in diesen beiden Quelltexten vorhanden, ansonsten werde ich euch selbstverständlich noch mehr Code Posten.
Hoffe jemand kann mier helfen.
Gruss DelphiDell
PS: Es tritt eigentlich kein fehler auf, sondern es wird noch nicht einmal der User in die DB geschrieben.
Aber wie hätte es auch anders seien können, dass Script ist voller Fehler, die ich alleine einfach nicht finde.
Meine Dateien:
chat.php
PHP:
<?php
function connect()
{
$connect = mysql_connect("localhost",":user:",":pass:");
mysql_select_db("1337ftp",$connect);
}
$timeout = 30; //30 Sekunden
$timeout_msg = 2; //Stunden
if(isset($_POST["action"]))
{
connect();
checkTimeout();
switch($_POST["action"])
{
case"login": Login($_POST["nickname"]); break;
case"logout": Logout($_POST["user_id"],true); break;
case"posting": post($_POST["message"],$_POST["user_id"]); break;
case"update": update($_POST["user_id"],false); break;
}
}
function checkTimeout()
{
global $timeout, $timeout_msg;
mysql_query("DELETE FROM chat_user WHERE last_action < DATE_SUB(NOW(), INTERVAL ".$timeout." SECOND)");
$ar = mysql_affected_rows();
mysql_query("DELETE FROM chat_history WHERE msg_time < DATE_SUB(NOW(), INTERVAL ".$timeout_msg." HOUR)");
}
function Login($nickname)
{
if(!nickexist($nickname))
{
connect();
$user_id = uniqid(rand());
$result = mysql_query("SELECT id FROM chat_history WHERE 1 ORDER BY id DESC LIMIT 1");
if($line = mysql_fetch_assoc($result))
{
$last_id = $line["id"]; //Hiermit wird der zuletzt erhasltene beitrag gespeichert
}
else
{
$last_id = 0;
}
mysql_query("INSERT INTO chat_user (nickname, user_id, last_id, last_action) VALUES ('$nickname','$user_id','$last_id',NOW())");
}
else
{
Error("Nick Exist");
}
Update($user_id,false);
}
function nickexist($nick)
{
connect();
$res = mysql_query("SELECT id FROM chat_user WHERE nickname = '".$nick."'");
if(mysql_num_rows($res) > 0)
{
return true;
}
else
{
return false;
}
}
function Error($msg)
{
echo '<error msg="'.$msgf.'" />';
exit();
}
function Logout($user_id,$update)
{
mysql_query("DELETE FROM chat_user WHERE user_id = '".$user_id."'");
if($update) Update($user_id,true);
}
function Update($user_id,$logout)
{
if($user_id)
{
$res = mysql_query("SELECT * FROM chat_user");
$last_id = 0;
if($logout)
{
$myid = "";
}
else
{
$myid = $user_id;
}
$str = '<users myid="'.$myid.'">';
while($row = mysql_fetch_assoc($res))
{
if($row["user_id"] == $user_id)
{
$last_id = $row["last_id"];
}
$str .= '<user id="'.$row["user_id"].'" nick="'.$row["nickname"].'" />';
}
$str .= '</users>';
if(!logout)
{
$result = mysql_query("SELECT * FROM chat_history WHERE id > '".$last_id."' ORDER BY msg_time ASC");
$mstr = '<messages>';
while($mrow = mysql_fetch_assoc($result))
{
$mstr .= '<msg user_id="'.$mrow["user_id"].'" time="'.$mrow["msg_time"].'"><![CDATA['.$rmow["message"].']]></msg>'; //CDATA Gibt sondezeichen aus.
$last_id = $mrow["id"];
}
$mstr .= '</message>';
mysql_query("UPDATE chat_user SET last_id = '".$last_id."', last_action = NOW() WHERE user_id = '".$user_id."'");
}
else
{
$mstr = '<messages/>';
}
Output($str,$mstr); //Ausgabe
}
else //Wenn keine id uebregeben wurde
{
Error("Not Loged In");
}
}
function Output($user, $msg) {
echo ($user.$msg);
}
?>
Und Hier der Flash Code in dem die Funktion Login usw vorkommen:
Code:
_global.chat_root = this;
var chat_userID = "";
var chat_nickName = "";
var checking = false;
var timeout = 2000;
var iv = 0;
var users = new Array();
var xm = new XML()
xm.ignoreWhite();
xm.onLoad = function()
{
initUpdate(this);
}
function Update()
{
var lv = new LoadVars();
lv.action = "update";
lv.user_id = chat_userID;
clearInterval(iv);
lv.sendAndLoad("chat.php",xm,"POST");
}
function Logout()
{
setStatus("Logout");
var lv = new LoadVars();
lv.action = "logout";
lv.user_id = chat_userID;
checking = false;
clearInterval(iv);
lv.sendAndLoad("chat.php",xm,"POST");
}
function Login(nick)
{
setStatus("Login: "+nick);
lv.action = "login";
lv.nickname = nick;
checking = true;
clearInterval(iv);
lv.sendAndLoad("chat.php",xm,"POST");
chat_nickName = nick;
}
function Post(msg)
{
setStatus("posting...");
var lv = new LoadVars();
lv.action = "posting";
lv.user_id = chat_userID;
lv.message = escape(msg);
checking = true;
clearInterval(iv);
lv.sendAndLoad("chat.php", xm, "POST");
}
function initUpdate(obj)
{
var userlist = obj.childNodes[0];
var messages = obj.childNodes[1];
initUsers(userlist);
initMessages(messages);
if(checking) iv = setInterval(function() { Update(); }, timeout);
}
function initUsers(node)
{
if(node.nodeName == "error")
{
setStatus("ERROR: " + obj.attributes.msg);
}
else
{
users = new Array();
if (obj.attributes.myid != chat_userID)
{
chat_userID = obj.attributes.myid;
}
var mid = -1;
for (var i=0; i<node.childNodes.length; i++) {
users[i] = new Object();
users[i].nick = node.childNodes[i].attributes.nick;
users[i].id = node.childNodes[i].attributes.id;
if (chat_userID == node.childNodes[i].attributes.id) mid = i;
}
userlist.updateList(users, mid);
}
}
function initMessages(node)
{
if(node.nodeName == "error")
{
setStatus("ERROR: " + obj.attributes.msg);
}
else
{
for(var i=0;i < node.childNodes.length;i++)
{
var nod = nodes.childNodes[i];
var user = getUsername(nod.attributes.user_id);
var mtime = niceDate(nod.attributes.time);
var msg = parseEt(node.firstChild);
history.addMessage(user,mtime,msg);
}
}
}
function getUsername(id)
{
for(var i = 0;i<users.length;i++)
{
if(id == users[i].id)
{
return users[i].nick;
}
}
return "<logged out>"
}
function niceDate(str) {
var t = str.split(" ")[1];
return t;
}
function parseEt(obj) {
var str = unescape(obj.toString());
var et = new Array('<', '>', chr(10));
var sg = new Array('<', '>', '');
for (var i=0; i<et.length; i++) {
str = str.split(et[i]).join(sg[i]);
}
return str;
}
function setStatus(msg) {
status_win.setStatus(msg);
}
Ich hoffe der fehler ist schon in diesen beiden Quelltexten vorhanden, ansonsten werde ich euch selbstverständlich noch mehr Code Posten.
Hoffe jemand kann mier helfen.
Gruss DelphiDell
PS: Es tritt eigentlich kein fehler auf, sondern es wird noch nicht einmal der User in die DB geschrieben.
Zuletzt bearbeitet: