anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Mo 09 Jun, 2025 18:56

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: logd Chat
BeitragVerfasst: Mi 27 Jun, 2007 16:29 
Offline
Lehrling
Lehrling
Benutzeravatar

Registriert: Mo 28 Aug, 2006 13:43
Beiträge: 25
Wohnort: Zwickau
LoGD: Asgarth.de
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 :D

danke und gruß die nervensäge ^^

_________________
Oh man User können so anstrengend sein....
Immer stellen sie Fragen dabei habe ich doch selber keine Ahnung was ich mache

Derzeitiges LotGD Projekt auf Asgarth.de :
- PHP lernen
- SQL lernen
- wie öffne ich eine dose ohne werkzeug


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do 28 Jun, 2007 21:16 
Offline
Held
Held
Benutzeravatar

Registriert: Di 23 Aug, 2005 23:46
Beiträge: 268
Wohnort: Köln
LoGD: http://www.dragnir.de
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. :wink:

_________________
Warum UNIX/Linux böse ist:

- 'kill' macht Menschen zu brutalen, blutrünstigen Bestien
- 'killall' züchtet regelrecht Massenmörder
- 'whoami' löst bei psychisch labilen Personen Existenzkrisen aus!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr 29 Jun, 2007 08:10 
Offline
Admin
Admin
Benutzeravatar

Registriert: Di 21 Jan, 2003 01:11
Beiträge: 1604
Wohnort: Haßfurt
Geschlecht: Männlich
LoGD: http://www.anpera.net/logd
Skype: anpera-net
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.

_________________
Praxis ist, wenn alles klappt aber keiner weiß warum. Theorie ist, wenn man weiß wie es geht, aber nichts klappt. Wir haben beides erfolgreich vereinigt: Bei uns klappt nichts und keiner weiß warum!

Neues Video: Marios freier Tag in Second Life


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di 03 Jul, 2007 20:42 
Offline
Lehrling
Lehrling
Benutzeravatar

Registriert: Mo 28 Aug, 2006 13:43
Beiträge: 25
Wohnort: Zwickau
LoGD: Asgarth.de
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 ^^

_________________
Oh man User können so anstrengend sein....
Immer stellen sie Fragen dabei habe ich doch selber keine Ahnung was ich mache

Derzeitiges LotGD Projekt auf Asgarth.de :
- PHP lernen
- SQL lernen
- wie öffne ich eine dose ohne werkzeug


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 22 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen
Du darfst keine Antworten zu Themen in diesem Forum erstellen
Du darfst deine Beiträge in diesem Forum nicht ändern
Du darfst deine Beiträge in diesem Forum nicht löschen
Du darfst keine Dateianhänge in diesem Forum erstellen

Suche nach:
Gehe zu:  
cron
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum