Eigenen Flash Chat [Frage]

Terem

Grünschnabel
Hi,
ich habe mir das Tutorial zum eigenen Flash Chat angesehen. Ich habe auch einen gewissen Teil Ahnung von AS und Php. Allerdings würde ich mich nicht als Profi bezeichnen.

Deswegen habe ich mir die Datei am Ende des Tutorials runtergeladen. Jedoch weiß ich nicht genau, was ich machen muss um den Chat zum laufen zu bringen.
Die 2 Tabellen habe ich per phpmyAdmin erstellt. Jedoch gibt es dort nur die Möglichkeit:
UNSIGNED und kein UNSIGNED, AUTOWERT.

Die PhpDatei habe ich schon soweit bearbeitet. Flash habe ich so gelassen, wie es war.
Wenn ich mich also versuche in den Chat "einzuloggen", gebe ich meinen Nickname ein und drücke: Login.
Mein Name erscheint in der Liste und kurz darauf kommt eine Meldung: ERROR: Not logged in.

Kann mir jemand sagen, was genau ich machen muss, um den Chat zum laufen zu bringen?

Gruß Terem

//edit:
Die Fehlermeldung taucht meiner Meinung nach auf, weil keine ID zurückgegeben wird.
Ich habe mitlerweile die Stelle gefunden, bei der man eingeben kann, dass eine AUTOWERT Zahl gegeben wird. Jedoch kommt dann die Fehlermeldung:
#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
Trotz vorhandener Englischkenntnisse sagt mir diese Meldung nichts.

Hat jemand von euch Ahnung?

//edit2: Habe jetzt gefunden wie das mit Autowert geht. Habe ausversehen das Primärschlüssel übersehen. Das müsste jetzt soweit funktionieren. Jedoch immernoch die selbe Nachricht wenn ich einen Namen eingeben und auf Login klicke -> Login: NAME -> Error: Not logged in.
Leider weiß ich nichtmehr weiter wieso.

Werde mir die PhpDatei nochmal vorknöpfen =/
 
Zuletzt bearbeitet:
Hi,

die connect.php befindet sich nicht auf dem Server; eine update.php existiert ebenfalls nicht. Poste bitte mal den Quelltext Deiner chat.php und einen sql-dump Deiner Datenbank.

Gruß
.
 
Php:
PHP:
<?php
function connect()
{
   $connect = mysql_connect("localhost","is klar","und das geheim^^");
   mysql_select_db("projectphoenix",$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="'.$msg.'" />';  
   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 .= '</messages>';
     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 Logged In");
 }
}

function Output($user, $msg) {
    echo ($user.$msg);
}
?>

Sql Dump:
http://projectphoenix.pr.funpic.de/projectphoenix.sql
 
Zuletzt bearbeitet:
Auf den ersten Blick kann ich keinen Fehler entdecken.

Lediglich hier:
PHP:
case"update": update($_POST["user_id"],false); break;
schreibst Du "update" klein, obwohl bei Dir alle Funktionsnamen mit Großbuchstaben beginnen.

Der Eintrag in die User-Tabelle scheint zu funktionieren, die Fehlermeldung (not logged in) in Kombination mit der Anzeige des Users im List-Fenster lässt mich vermuten, dass Deine Flash-Datei die user_id, die sie übergeben bekommt, beim Update nicht korrekt an PHP zurückgibt.

Lass Dir a) mal in Flash in einem Textfeld anzeigen, welche User-ID nach einen LogIn übergeben wird und schau, ob sie auch korrekt gesendet wird. Poste bitte mal Deine .fla.

Gruß
.
 
Danke, habe den Fehler verbessert.

Leider weiß ich nicht genau, wie ich mit Flash die ID aus der SqlDatenbank ausgelesen bekomme. Könntest Du mir dabei auch behilflich sein?

Meine *.fla Datei ist die selbe wie unter:
http://www.tutorials.de/forum/flash-tutorials/214865-flash-mx2004-mini-chat-mit-php-und-mysql.html
zu finden. Es wurde daher nichts an dem AS verändert. Lediglich das Design wollte ich anpassen, was ich jedoch aufgegeben habe, als ich gemerkt habe, dass es nicht ging.
 
Ändere mal in der Flashdatei die "sendAndLoad"-Akion beim Update in eine "send"-Aktion und poste die Ausgabe des php-Scriptes hier.

Ansonsten werde ich morgen mal versuchen, den Chat bei mir mit Deiner php-Datei zu testen.

Gruß
.
 
Dann müsste das wie folgt aussehen:

function doUpdate() {
var lv = new LoadVars();
lv.action = "update";
lv.uid = chat_userID;
clearInterval(iv);
lv.send("chat.php", xm, "POST");

oder?
Wenn ich den Chat damit laufen lasse treten die genannten Fehler immernoch auf
(klar, wurde ja nicht viel verändert und war auch nicht anders zu erwarten)

Wenn ich danach "Chat.php" wieder auf meinen Rechner lade und öffne hat sich nicht wirklich etwas daran geändert.

PHP:
<?php
function connect()
{
   $connect = mysql_connect("localhost","s.o","sag ich immernoch nicht");
   mysql_select_db("projectphoenix",$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="'.$msg.'" />';  
   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 .= '</messages>';
     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 Logged In");
 }
}

function Output($user, $msg) {
    echo ($user.$msg);
}
?>

Danke für deine Gedult mit meinem Problem. Weiß ich wirklich zu schätzen.

Gruß und einen schönen Abend noch
Sebastian
 
Es müsste so lauten:
Code:
lv.send("chat.php", "_blank", "POST");

Wenn ich danach "Chat.php" wieder auf meinen Rechner lade und öffne hat sich nicht wirklich etwas daran geändert.
Es war auch keine Rede davon, dass sich die Datei ändern. Bei der send-Methode sollte sich ein neues Fenster öffnen, in dem Du die Ausgabe des Scriptes siehst ...
 
Zurück