anpera.net https://anpera.homeip.net/phpbb3/ |
|
logd Chat https://anpera.homeip.net/phpbb3/viewtopic.php?f=34&t=3751 |
Seite 1 von 1 |
Autor: | Lesdates [ Mi 27 Jun, 2007 16:29 ] |
Betreff des Beitrags: | logd Chat |
hi erstmal also.... ich habe versucht (betonung liegt auf versucht) mir einen chat zu bauen für mein logd da mich die leere chat.php gestört hat naja wie das so ist (ichbin kein meister in PHP und schon gar nicht gut mit MySQL) habe ich das was fertig gemacht das eigendlich gut aussieht aber nicht geht ^^ ich habe hier nur ein leeres feld drinne stehen (besser als ne fehlermeldung ich weiß aber doch deprimierend) ich glaub eine sqlcode könnte ich auch noch gebrauchen für die aktion aber da habsch garkein plan hier mal die chat.php [php]<?php require_once "common.php"; $timeout = 30; // Sekunden $timeout_msg = 2; // Stunden if (isset($_POST["action"])) { include("connect.php"); db_connect(); db_select(); checkTimeout(); switch($_POST["action"]) { case "login": doLogin($_POST["nickname"], $_POST["uid"]); break; case "logout": doLogout($_POST["uid"], true); break; case "posting": doPosting($_POST["message"], $_POST["uid"]); break; case "update": doUpdate($_POST["uid"], false); break; } } function checkTimeout() { global $timeout, $timeout_msg; $now = date("Y-m-d H:i:s"); $query = 'DELETE FROM chat_user WHERE last_action < DATE_SUB("'.$now.'", INTERVAL '.$timeout.' SECOND)'; $result = mysql_query($query) or doError(mysql_error()); $ar = mysql_affected_rows(); $query = 'DELETE FROM chat_history WHERE msg_time < DATE_SUB("'.$now.'", INTERVAL '.$timeout_msg.' HOUR)'; $result = mysql_query($query) or doError(mysql_error()); if ($ar > 0 || mysql_affected_rows() > 0) { initTables(); } } function initTables() { $query = 'SELECT * from chat_history WHERE 1'; $result = mysql_query($query) or doError(mysql_error()); $lines = mysql_num_rows($result); if ($lines == 0) { $query = 'ALTER TABLE chat_history AUTO_INCREMENT=0'; $result = mysql_query($query) or doError(mysql_error()); } $query = 'SELECT * from chat_user WHERE 1'; $result = mysql_query($query) or doError(mysql_error()); $lines = mysql_num_rows($result); if ($lines == 0) { $query = 'ALTER TABLE chat_user AUTO_INCREMENT=0'; $result = mysql_query($query) or doError(mysql_error()); } } function doLogin($nickname, $uid) { if (isset($uid)) { doLogout($uid, false); } if (!nickExists($nickname)) { $uid = uniqid(rand()); $query = 'SELECT id FROM chat_history WHERE 1 ORDER BY id DESC LIMIT 1'; $result = mysql_query($query) or doError(mysql_error()); if ($line = mysql_fetch_assoc($result)) { $lid = $line["id"]; } else { $lid = 0; } $now = date("Y-m-d H:i:s"); $query = 'INSERT into chat_user (nickname, user_id, last_id, last_action) VALUES("'.$nickname.'", "'.$uid.'", "'.$lid.'", "'.$now.'")'; $result = mysql_query($query) or doError(mysql_error()); doUpdate($uid, false); } else { doError("Nick exists"); } } function nickExists($nick) { $query = 'SELECT id from chat_user WHERE nickname="'.$nick.'"'; $result = mysql_query($query) or doError(mysql_error()); if (mysql_affected_rows() > 0) { return true; } else { return false; } } function doLogout($uid, $update) { $query = 'DELETE FROM chat_user WHERE user_id = "'.$uid.'"'; $result = mysql_query($query) or doError(mysql_error()); if ($update) doUpdate($uid, true); } function doPosting($msg, $uid) { if ($uid && $uid != "") { $now = date("Y-m-d H:i:s"); $query = 'INSERT INTO chat_history (msg_time, user_id, message) VALUES("'.$now.'", "'.$uid.'", "'.$msg.'")'; $result = mysql_query($query) or doError(mysql_error()); doUpdate($uid, false); } else { doError("posting without ID"); } } function doUpdate($uid, $logout) { if ($uid) { // Userliste ausgeben: $query = 'SELECT * FROM chat_user WHERE 1'; $result = mysql_query($query) or die(mysql_error()); $last_id = 0; if ($logout) { $myid = ""; } else { $myid = $uid; } $ustr = '<users myid="'.$myid.'">'; while ($line = mysql_fetch_assoc($result)) { if ($line["user_id"] == $uid) { $last_id = $line["last_id"]; } $ustr .= '<user id="'.$line["user_id"].'" nick="'.$line["nickname"].'" />'; } $ustr .= '</users>'; // Letzte Postings ausgeben: if (!$logout) { $query = 'SELECT * FROM chat_history WHERE id > "'.$last_id.'" ORDER BY msg_time ASC'; $result = mysql_query($query) or doError(mysql_error()); $hstr = '<messages>'; while ($line = mysql_fetch_assoc($result)) { $hstr .= '<msg uid="'.$line["user_id"].'" time="'.$line["msg_time"].'" ><![CDATA['.$line["message"].']]></msg>'; $last_id = $line["id"]; } $hstr .= '</messages>'; // Letzte ID speichern: $now = date("Y-m-d H:i:s"); $query = 'UPDATE chat_user SET last_id="'.$last_id.'", last_action="'.$now.'" WHERE user_id = "'.$uid.'"'; $result = mysql_query($query) or doError(mysql_error()); } else { $hstr = "<messages />"; } doOutput($ustr, $hstr); } else { doError("not logged in"); } } function doOutput($user, $msg) { echo ($user.$msg); } function doError($msg) { echo '<error msg="'.$msg.'" />'; exit(); } ?> [/php] so nun wollt ich mal fragen 1 wo ist der fehler? 2 macht das ding überhaubt einen sinn? 3 gibt es hier im forum vieleicht schon einen post darüber den ich lesen sollte? 4 soll ich's lieber gleich sein lassen? würde mich über antwort freuen wenn es geht leicht erklären bin nicht der schnellste beim mit denken ![]() danke und gruß die nervensäge ^^ |
Autor: | Lestat [ Do 28 Jun, 2007 21:16 ] |
Betreff des Beitrags: | |
Guten Abend! Ich würde nicht versuchen einen Chat selbst zu schreiben. Es gibt im Netz ein paar gute fertige Chats, welche du herunterladen kannst. Ich verwende z.B. den Chat von http://www.pcpin.com/ und bin sehr zufrieden damit. Ist sehr gut vom Design anpassbar und bietet IMHO alles was man so braucht. Schau's dir mal an. ![]() |
Autor: | anpera [ Fr 29 Jun, 2007 08:10 ] |
Betreff des Beitrags: | |
Also genau genommen macht das Progrämmchen da oben ... gar nichts. Es besteht praktisch nur aus Funktionsdefinitionen für Funktionen, die niemals aufgerufen werden, und einer Fallabfrage, die niemals eintritt. Die Seite bleibt weiß. Selbst wenn der abgefragte Fall zum Beispiel irgendwo durch die connect.php erzwungen würde, würde nichts passieren, da im kompletten Script keine einzige Ausgabe stattfindet. Wenn du die common.php einbindest, kannst du nicht mit echo arbeiten. |
Autor: | Lesdates [ Di 03 Jul, 2007 20:42 ] |
Betreff des Beitrags: | |
okay danke für den tip Lestat werde ich befolgen auch noch ein danke an anpera das der bildschirm weiß bleibt ist mir aufgefallen jetzt kenn ich ja den grund ^^ |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |