PHPChat V2 (mysql)
Het vervolg op PHP Chatbox
Een Chatbox die gebruikmaakt van XMLHttpRequest, wat er voor zorgt dat bij iedere request alleen de berichten die nog niet bij de gebruiker bekend zijn worden verzonden. Als het goed is zorgt dit voor minder verbruik in bandbreedte. Uiteraard wel meer serverload ^^,
Waarom deze chatbox beter is dan ieder ander?
-Hij is heel makkelijk uit te breiden, zonder de source aan te hoven passen, doordat hij alle bestanden die in de directorie /plugins automatisch inlaad, en de rest van het script zo is gemaakt dat deze vrij simpel kan worden uitgebreid.
-Hij heeft ondersteuning voor commando's net zoals in IRC, welken ook weer gemakkelijk toe te voegen zijn via bestanden in de /plugins directorie.
-Hij stuurt per aanvraag alleen de nieuwe berichten op. Dus geen overbodig bandbreedteverbruik meer, maar wel het idee dat je realtime chat, zodner vertragingen. (bij standaardinstellingen)
-Voor de handigheid geleverd met installer. (niet hieronder in de source vermeld)
Beschikbare plugins:
ipblocker download (om mensen te kicken en te bannen)
default_commands download (zeer aangeraden uitbreiding)
SmileyParser download
Toeligting op het voorbeeld
Beschikbare commando's
typ maar eens /help in. Voor gedetailleerde help typ /help functienaam, bijv /help login.
Als hij het niet meer doet, niet reageert, of je kunt niet meer op de send-knop drukken: Pagina even reloaden. Meestal is dit het gevolg van traag antwoord van de server.
officieel gezien moet ik een licentie meeleveren. GNU GPL Licentie hier beschikbaar (neem aan welbekend).
Veranderingen
16 mei 2005: naam kan nu spaties bevatten
16 mei 2005: Dat wat D@rk zei, oplossing voor/tegen lege grijze vakjes.
17 mei 2005: SQLtable die stond in server.php miste het ip-veld. Staat er nu bij. In de installer zat het al wel.
17 mei 2005: function_exists hier en daar verwijdert, had toch geen nut.
17 mei 2005: een errorbericht weggehaald, omdat het al ergens anders werd gemeld.
31 mei 2005: Smileyparser toegevoegd, ook wel bekend als messageparser. Maakt gebruik van .pak-bestanden (bekend van phpBB).
Credits:
Veel dank aan Jochum Molenaar die mij op het idee heeft gebracht om sessions te gebruiken. Ik was er (stom genoeg) niet opgekomen zonder zijn hulp.
Ook dank aan de mensen van dit topic voor de wordwrap functie.
Voorbeeld: http://phphulp.ikhoefgeen.nl/chatv2/
Gesponsorde koppelingen
PHP script bestanden
178 reacties op 'PHPChat V2 (mysql)'
Gesponsorde koppelingen
Errors die ik kreeg:
============
- Als je /name ingeeft, zonder naam er achter krijg je errors
- Ik gaf als naam in met IE, The Real Dark Force en gaf als naam The
- Als ik het script zelf heb geinstaleerd geeft hij om de 5 seconden zo een grijs venster waar een reactie zou moeten staan. Ook al geef ik geen reactie komt er zo een leeg venster bij om de 5 sec ( Dit heb ik zelf opgelost door rond regel 231 in index.php te zetten:
if(xmlhttp.responseText != " "){
document.getElementById('chatwindow').innerHTML += "<fieldset class=\"error\">"+xmlhttp.responseText+"</fieldset>\n";
}
En nu werkt het perfect !!
Dus dat wordt even handmatig je configbestandje maken...
(de installer is niet echt bepaald bugloos, op sommige servers kan hij het ene niet, en op anderen het andere weer niet...)
Om eerlijk te zijn: geen idee. Heb je misschien een lege regel voor in een van de bestanden?
(Sterker nog, om een of andere reden geeft hij random berichten op mijn lycoshost, dus vreemd gedrag wil hij nog wel eens vertonen...)
Bij mij was het door een spatie achter server.php. Maar eerst wist ik het niet, dus lostte ik het op met dit:
if(xmlhttp.responseText != " "){
document.getElementById('chatwindow').innerHTML += "<fieldset class=\"error\">"+xmlhttp.responseText+"</fieldset>\n";
}
if(trim($message) != ""){
iets();
}else{
print("DIE||You can't add nothing");
return false;
}
Maar idd ook als ik middenin een bericht een plusje zett, verdwijnt die. Al snap ik dus niet waarom.
http://devel.deyel.nl/chat/
Na een tijdje gaat hij berichten (random?!) herhalen. Iemand enig idee waar dit aan ligt?
PS: met /disconnect kun je de client doen stoppen van refreshen, voor als hij te vol raakt en problemen begint te veroorzaken.
CREATE TABLE IF NOT EXISTS `PREFIXmessages` (
`id` int(8) NOT NULL auto_increment,
`message` mediumtext NOT NULL,
`author` text NOT NULL,
`ip` varchar(15) NOT NULL default '',
`timestamp` int(10) NOT NULL default '0',
`type` enum('message','notice','warning','error') NOT NULL default 'message',
UNIQUE KEY `id` (`id`)
) TYPE=MyISAM AUTO_INCREMENT=42 ;
uitvoeren in een sqlquery, zodat die tabel wordt aangemaakt, maar daarnaa moet alles 'automatisch' gaan.
Blijven alle berichten die is verstuurd zijn in de MySQL database staan? Dat is namelijk handig, als er zeg maar eens iets gebeurt, kan je het altijd na checken.
Ook een admin functie in je script zal handig zijn, en toch ook hoeveel mensen online, en welke mensen online zijn is handig.
In mijn pluginslijstje staan een bestand voor extra commando's, waaronder ook een aantal om bijvoorbeeld handmatig de database met alle berichten te legen, en ook een om bepaalde gebruikers te verbannen. MOmenteel zijn dat de enige plugins die ik heb, ben nu bezig (af en toe) met een nieuwe versie/uitbreiding, die wel moet bij kunnen houden welke gebruikers er allemaal online zijn.
Standaard blijven er tot 500 berichten in de database staan, en daarna wordt hij ge TRUNCATE, oftewel, geleegd. Maar dit kun je uiteraard ook aanpassen.
De bestanden die hij gebruikt zijn .pakbestanden, jaja, dezelfde bestanden die phpBB exporteerd. Dus nu kun je makklijk je eigen smilies downloaden van phpBB.
Typ '/emoticons' in de demo om een lijst met alle geïnstalleede emoticons te kunnen bekijken.
Het kan zijn dat je een fout hebt in het script (javascriptedeelte, of in de adressen) of je gebruikt zulke vreemde karakters dat ik hem daar nog nooit mee heb getest ^^,
Heb je hetzelfde probleem ook in het voorbeeld?
Het is geen officieel project. [zoals bijv een project op soureforge]
Als er mensen zijn die willen meehelpen, of code willen bijdragen, alsjeblieft email mij, als er dan belangstelling voor is zet ik een [officieel] project op. Misschien krijg ik dan ook weer wat motivatie.
Ik heb het javascriptdeel wel al bijna helemaal af, maar het php-gedeelte is zo saai dat dat maar heel weinig opschiet.
En voor diegenen die een versie 3 willen hebben, die zal er voorlopig nog niet zijn, maar als je wilt kan ik je via e-mail datgene sturen wat ik al heb, mag je hem zelf afmaken ^^,
Helaas komt het vaak voor dat php in safe-mode draait, dat betekend dat je zelf een config.php moet maken (volgens mij wel bijgeleverd, alleen even een bestand hernoemen en waarden in het bestand aanpassen)
Wanneer ik config.php.default niet aanpas krijg ik een menu om het een en ander aan te passen. De bovenste drie regels worden rood na het in te vullen.
Heb je nog een idee, tip of advies voor me?
Groet
link is http://www.partycarecrew.nl/marco/chat/index.php
heb je mischien msn of email, dat werkt denk ik iets sneller... wel alvast bedankt dat je wil helpen ;)..
groetjes marco
if(PLUGINS_ENABLED && is_dir(PLUGINS_DIR)){
if ($handle = opendir(PLUGINS_DIR."/")){
while (false !== ($file = readdir($handle))) {
$bestand = PLUGINS_DIR."/".$file ;
$ext = pathinfo($bestand);
if(isset($ext['extension']) && $ext['extension'] == "php"){
include(PLUGINS_DIR."/".$file);
}
}
closedir($handle);
}
}
if(mysql_query("INSERT INTO ".MYSQL_PREFIX."messages (message,author,ip,timestamp,type) VALUES ('".addslashes($message)."','".addslashes(htmlentities($name))."','".$_SERVER['REMOTE_ADDR']."',".mktime().",'".$type."')")){
Jouw smilieparser-functie wordt dan iets in de zin van:
2
3
4
5
6
7
function smilieparser($message){
$message = str_replace(':P', '<img scr="tongue.gif">', $message);
//enzovoord
return $message;
}
?>
Volgens mij vind hij het niet zo lekker waneer er een spatie voor < ?php of na ?> staat, aangezien hij dan niet als eerste OK ziet staan. Controleer daar desnoods even alle bestanden op.
Notice: Use of undefined constant PLUGINS_ENABLED - assumed 'PLUGINS_ENABLED' in /data/members/free/tripod/nl/d/o/n/donagansta/htdocs/Chat/server.php on line 291
Notice: Use of undefined constant PLUGINS_DIR - assumed 'PLUGINS_DIR' in /data/members/free/tripod/nl/d/o/n/donagansta/htdocs/Chat/server.php on line 291
Notice: Use of undefined constant MYSQL_SERVER - assumed 'MYSQL_SERVER' in /data/members/free/tripod/nl/d/o/n/donagansta/htdocs/Chat/server.php on line 82
Notice: Use of undefined constant MYSQL_USER - assumed 'MYSQL_USER' in /data/members/free/tripod/nl/d/o/n/donagansta/htdocs/Chat/server.php on line 82
Notice: Use of undefined constant MYSQL_PASSWORD - assumed 'MYSQL_PASSWORD' in /data/members/free/tripod/nl/d/o/n/donagansta/htdocs/Chat/server.php on line 82
Notice: Use of undefined constant MYSQL_DATABASE - assumed 'MYSQL_DATABASE' in /data/members/free/tripod/nl/d/o/n/donagansta/htdocs/Chat/server.php on line 83
DIE||Fout nr 1044 bij het selecteren van de database: Access denied for user: 'donagansta_nl@%.lyceu.net' to database 'MYSQL_DATABASE' DIE||Functie addmessage() krijgt geen verbinding met database.\nDIE||Kon berichten niet weergeven
Ik heb een nieuwe tabel genaamd chat_users. De gegevens worden gelijktijdig met de andere opgehaal. Dit gebeurd met het volgende scripje (in server.php)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function users()
{
global $dbverbinding;
if(connected()){
mysql_query("DELETE FROM `chat_users` WHERE `online` < ".time()." - 6") or die (mysql_error());
$sql = "SELECT `pid` FROM `chat_users` WHERE `pid` = '".$_SESSION['id']."'";
$resultaat = mysql_query($sql) OR die ("Kon geen verbinding maken met MySQL");
if (mysql_num_rows($resultaat) == 0) {
mysql_query("INSERT INTO `chat_users` (pid, online) VALUES ('".$_SESSION['id']."', '".time()."')");
}else{
mysql_query("UPDATE `chat_users` SET `online` = '".time()."' WHERE `pid` = '".$_SESSION['id']."'");
}
$sql = "SELECT `pid` FROM `chat_users` ORDER by `pid` DESC";
$resultaat = mysql_query($sql) OR die ("Er kon geen verbinding met de database worden gemaakt! Probeer het later nog eens.");
for($i=0; list($pid) = mysql_fetch_row($resultaat); $i++) {
$sql2 = "SELECT `naam` FROM `users` WHERE `aid` = '$pid'";
$resultaat2 = mysql_query($sql2) OR die ("Er kon geen verbinding met de database worden gemaakt! Probeer het later nog eens.");
list($u_naam) = mysql_fetch_row($resultaat2);
print("USERS||» ".$u_naam."<BR>\n");
}
}
}
?>
In index.php heb ik het volgende toevoegd:
case "USERS":
if(data[0] == "OK"){data[0]=data[1];data[1]=data[2];}
document.getElementById('userscreen').innerHTML += "<fieldset class=\"personal\"><div class=\"messagebody\">"+data[1]+"</div></fieldset>\n";
break;
De gegevens worden goed weergeven in het 'userscreen'. Maar de default weergeeft ze ook (heb ik getest). Waarom doet hij dat?
if(!isset($_SESSION['name']) && !isset($_GET['message'])){
echo "SETNAME";
}
Verander dat naar bijvoorbeeld:
if(!isset($_SESSION['name']) && !isset($_GET['message'])){
$_SESSION['name'] = 'Anoniempje';
}
Eventueel zou je nog een tijd in de naam kunnen zetten, zodat de naam van verschillende anonieme gebruikers niet hetzelfde is.
Fout nr 1146 bij het uitvoeren van de SQLquery: Table 'fh2028_usersklas.chat_messages' doesn't exist Kon berichten niet weergeven DIE||Fout nr 1146 bij het uitvoeren van de SQLquery: Table 'fh2028_usersklas.chat_messages' doesn't exist DIE||Kon berichten niet weergeven
En als ik kijk in mijn phpmyadmin, dan is alles normaal... wat moet ik doen? reageer ff eh!
slecht in php beginner !!
Warning: mysql_connect(): Access denied for user: 'root@localhost' (Using password: NO) in /home/moioxnl/public_html/chatbox/server.php on line 82
DIE||Fout bij het verinding maken met de database op localhost als root DIE||Functie addmessage() krijgt geen verbinding met database.\nDIE||Kon berichten niet weergeven
Warning: mysql_connect(): Access denied for user: 'root@localhost' (Using password: NO) in /home/moioxnl/public_html/chatbox/server.php on line 82
DIE||Fout bij het verinding maken met de database op localhost als root DIE||Functie addmessage() krijgt geen verbinding met database.\nDIE||Kon berichten niet weergeven Fout bij het verinding maken met de database op localhost als root Functie addmessage() krijgt geen verbinding met database.\nDIE
Warning: mysql_connect(): Access denied for user: 'root@localhost' (Using password: NO) in /home/moioxnl/public_html/chatbox/server.php on line 82
DIE||Fout bij het verinding maken met de database op localhost als root DIE||Functie addmessage() krijgt geen verbinding met database.\nDIE||Kon berichten niet weergeven Client terminated. Please reload this page to restart the chat.
moet je dan je eigen wachtwoord van me inlog systeem schrijven ?
deze foutmelding staan in de installer.php
Warning: Cannot modify header information - headers already sent by (output started at C:\server\Apache2\htdocs\chatbox\installer.php:31) in C:\server\Apache2\htdocs\chatbox\installer.php on line 107
hier kopieer ik dat stukje tekst
if(mysql_query($query)){
$file = &$configfile;
foreach($_POST as $name => $value){
$file = str_replace("##".$name."##", $value, $file);
}
if(file_put_contents("config.php",$file)){
------------->deze regel header("Location: index.php");
}else{
die("Kan gegenvens niet naar config.php schrijven.\n\nDit kun je handmatig doen door devolgende gegevens in het bestand config.php te zetten:\n\n".$file);
}
kan iemand mij helpen
flappie11
Maar het geeft niet, dat hij bij die regel aankomt, betekent al dat hij succesvol geïnstalleerd is. Nu kan je installer.php in principe verwijderen, en gewoon via index.php gaan chatten.
Maar...
...ik krijg steeds volgende melding wanneer ik het bestand '' mee in de plugin map zet. Enig idee hoe deze melding te doen verdwijden:
Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of smilieparser(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in /home/httpd/vhosts/revolution-productions.be/httpdocs/edoggy/nl/chat/server.php(166) : eval()'d code on line 1
Voor de rest werkt alles prima!
Alvast bedankt!
Een mogelijke oplossing zou zijn om boven in server.php deze lijn te zetten:
Dat zou moeten werken mits je genoeg rechten hebt op je server.
Een 2e oplossing zou zijn door in dat bestand dat daar tussen de haakjes moet staan alle &-tekens weg te halen. Ik weet alleen niet hoe ernstig dat de functionaliteit beïnvloedt.
Een laatste redmiddel die zeker werkt, maar niet de meest fijne oplossing is is om deze regel:
te vervangen met:
Maar, vooral in de development fase, moet je oppassen dat je nu totaal geen foutmeldingen meer krijgt, ook niet als er daadwerkelijk iets noemenswaardigs misgaat.
Alvast bedankt voor de moeite...
Groetjes
Het is inderdaad door een andere versie van PHP. Echter, waneer ik het zou aanpassen aan de nieuwe versie, waardoor er geen 'melding' meer van gemaakt wordt, werkt het niet meer in de voorgaande versies van PHP.
maar tog zijn enkele dingen niet echt duidelijk voor mij met het gevolg dat het niet werkt
moet ik nog iets in de database invoeren ? een tabel in de Querry , nu is mijn mySQL database vollegig leeg, mischien een domme, maar vind het enigsinds vaag, ik krijg ok een fout te zien op mijn site
www.loosjes.nl
moet in in config.php ook nog iets invullenop _chat ?
define("MYSQL_DATABASE", "loosjesnl_schat");
define("MYSQL_PREFIX", "_chat");
define("MAX_SIZE_DB", 500);
ik heb een vermoedden wat het mischien daar aan licht maar zou niet weten wat te doen.
Als iemand een idee heeft van wat er aan de hant kan zijn graag !
config.php moet dan in dat geval ook nog even wat aandacht hebben. De instellingen hier moeten overeen komen met die die je hebt gebruik voor je database-tabellen.
mooi script hoor maar ik krijg een fout waar ik geen oplossing op weet:
http://www.garnalenkweker.nl/chatbox/index.php
wat doe ik fout??? :S
Groetjes,
Geert
1. Ik heb een beetje zitten te klooien met het script, en nu zegt hij niet meer wanneer er iemand 'binnenkomt'
2. In FF is dit geen probleem maar in IE laat hij pas de berichten van de andere zien als je zelf iets tikt.
url :
http://www.xgeneral.com/chat/chat.php
--> eerst inloggen op xgeneral.com met tom, 5656 en dan naar de link gaan.
EDIT: Of klik hier: http://www.phphulp.nl/php/scripts/6/474/
Ik heb gebruik gemaakt an dit script. Het werkte allemaal goed enzo, maar toen ging ik er een beetje mee kloten (dom:P) Dus toen kwam ik er achter dat het script niet meer werkte. Allemaal errors:P Dus ik dacht, nou dan doe ik het weer ff helemaal opnieuw. Dus ik dat doen. Ik ging weer naar de installer.php. Daar vulde ik mn gegevens in en klikte op doorgaan (zoiets) Toen kwam erineens een error van: header already send to (blablabla). K heb egt alles al geprobeerd. Er staan geen witregels op de pagina's. K heb heel internet al afgezochd enzo. Maar het werkt allemaal niet:S Wie kan mij helpen???? Vr. groetjes marcel
Dus: de tabellen verwijderen, installer draaien en controleren of er in de gebruikers-tabel een gebruiker genaamd 'anyone' met id '0' is, en anders aanmaken. Dan zou alles weer ok moeten zijn.
Als ik het handmatig doe (niet door denken pls:P:P), dan krijg ik geen error, maar dan werkt de hele chatbox niet. Als ik dan een berricht typ en op enter druk gebeurt er nix. En soms kan ik nix typen. en als ik mn naam dan wil veranderen staat er "failed to set a nickname"in het rode gedeelde
Maar misschien helpt het als je ook even zei wat de fout was. Een foutmelding is meestal juist een goed teken. Weet je tenminste wat het probleem is. Als hij helemaal niets doet, dan zit je pas in de puree.
Nog een andere manier om een mogelijke foutmelding te vinden: server.php even direct aanroepen.
SETNAME is ook goed trouwens. Als er echt iets mis is, dan is dat in index.php. Geeft deze ook een javascript foutmelding, of een foutmelding op enige andere wijze?
Ranzige details: XMLHTTPRequest kan niet (zonder hacks) een ander domein dan het domein waar hij momenteel is benaderen. Je bent op het domein 'www.deam...' maar hij staat ingesteld op 'deamon-fig..', zonder www ervoor. In je config.php kan je dat veranderen.
En als hij dan eenmaal werkt, misschien wil je dan nog wel even de magic_quotes_gpc uitzetten. Kan je tenminste chatten met quotes.
Op die lijn staat dit: if($ext['extension'] == "php"){
gr marcel
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
define("MAX_MESSAGES", 10);
define("FIRSTTIME_MAX_MESSAGES", 1);
define("MYSQL_SERVER", "localhost");
define("MYSQL_USER", "******");
define("MYSQL_PASSWORD", "*********");
define("MYSQL_DATABASE", "********");
define("MYSQL_PREFIX", "chat_");
define("MAX_SIZE_DB", 500);
define("TIMESTAMP", "Y-m-d H:i:s");//formaat van timestamp. Zie http://nl3.php.net/manual/nl/function.date.php
define("MAX_WORD_LENGTH", 30);
define("PLUGINS_ENABLED", true);
define("PLUGINS_DIR", "./plugins");
define("PASSWORD", "*******");
?>
http://phphulp.ikhoefgeen.nl/chatv3/
Die is vele malen mooier! Ook kun je zien wie er online is.
vraagje, ik krijg 2 berichten op het scherm als ik een berichtje type. Heeft iemd enig idee?
link: http://www.gitaartabs.nl/chat/
wat is de fout? als ik nu naar de index ga, dan doet ie het wel maar dan kan ik niet /login [wachtwoord] doen!
In al die tijd moet er toch wel iets beters zijn gemaakt, toch? :)
Om te reageren heb je een account nodig en je moet ingelogd zijn.
- Details
Door:
Jelmer rrrr- 8 jaar geleden
- 2.823 x bekeken
- Labels
- Geen tags toegevoegd.
- PHP scripts opties
- Gastenboeken / Fora
- Nieuwste PHP scripts
- PHP script toevoegen


PHP hulp
0 seconden vanaf nu