Chat Tutorial brauche Hilfe

Status
Nicht offen für weitere Antworten.

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

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 "&lt;logged out&gt;"
}

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('&lt;', '&gt;', '');
	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:
Hi,

Poste niemals Deine Login-Daten in einem Forum!

hmm:
  • In der Funktion "Error" müsste es lauten:
PHP:
echo '<error msg="'.$msg.'" />';


  • Warum übergibst Du der Funktion Login keine User-ID? (Ist nicht so wichtig, verhindert aber, dass sich zwei User versehentlich gleichzeitig mit der selben ID anmelden)

  • In der Funktion "Update" hast Du einmal
PHP:
$mstr .= '</message>';
stehen: Korrekt wäre allerdings "messages".


  • In dieser Zeile:
PHP:
mysql_query("UPDATE chat_user SET last_id = '".$last_id."', last_action = NOW() WHERE user_id = '".$user_id."'");
schließt Du bei user_id ein Doppeltes Anführungszeichen mit einem einfachen. Korrekt wäre:
PHP:
mysql_query("UPDATE chat_user SET last_id = '".$last_id."', last_action = NOW() WHERE user_id = '".$user_id.'"');

Durch den AS-Code mag ich mich jetzt nicht komplett durchwühlen - hilfreich wäre es, wenn Du
  • a) die Fehlermeldungen postest, die Du erhältst - und wenn Du keine bekommst, wichtige Daten mit trace (Flash-Seite) bzw. echo (PHP-Seite) ausgeben lässt (Das PHP-Script kannst Du z.B. "trocken" im Browserfenster laufen lassen und die per $_POST übergebenen Variablen per Hand setzen)

  • b) Beide Dateien (die .fla und die .php) postest - und zwar zusammen mit einem Dump Deiner Tabellen (Der Fehler könnte z.B. ja auch an falsch angelegten Tabellenfeldern liegen).

    Grund: So etwas lässt sich in einer "Live-Situation" viel einfacher debuggen als durch einfaches Durchlesen des Quelltextes. ;)

Gruß
.
 
Hi, an der Tabelle liegt es nicht.

Weil, ich habe mal den Login manuell getestet, und dass hat funktioniert.

Im anhang befinden sich die Dateien.

Also ich glaube es liegt am AS, kann aber auch immernoch am PHP liegen.

Gruss

DelphiDell

Download:

http://1337ftp.13.funpic.de/chat/CHAT.zip //Datei war zu gross für anhang.
 
Zuletzt bearbeitet:
Deine Datei ist auf dem Server nicht zu finden.

Im Übrigen wird das "pushen" eigener Threads hier nicht gerne gesehen; wer Hilfe möchte, sollte sich auch in etwas Geduld üben können. ;)

Gruß
.
 
Hi
Eine Frage... Ich kenne mich nich zuwenig aus in Flash um mir einen eigenen Chat zu Basteln. Jetzt wollte ich den nehmen den es zum Runterladen vom Chat tutorial gibt und in meine Site einbauen. Wie stelle ich das an? Welche Dateine müssen wohin und so weiter? Das würde mir nähmlich generell mit cgi Dateine und so Helfen..
Vielen Dank
mfg green
 
@green_phanta:
Vermeide bitte Doppelpostings! Du hast dein Problem bereits in einem anderen, neu erstellten Beitrag geschildert und da wird dir auch geholfen!
 
Status
Nicht offen für weitere Antworten.

Neue Beiträge

Zurück