Chatbox met php

Status
Niet open voor verdere reacties.

knetter3

Gebruiker
Lid geworden
5 apr 2008
Berichten
56
Hoe maak je een chatbox met php. Heb wel ens een scriptje gezien met een fopen in een bestand, en dan een header(refresh: 1) om em elke seconde te vernieuwen, maar dat staat natuurlijk niet proffesioneel.

weet iemand een script?
 
wil jij je hele code posten...

en hoe weet ik of m´n server met ajax om kan gaan..

totaal geen ervaring..

kan alleen php en html:(
 
Waarom vraag je dingen die je zo kunt opzoeken? De code staat in de tutorial, AJAX is client side en dus serveronafhankelijk...

:rolleyes:
 
site:http://www.phpfreakz.nl/library.php?sid=19051
download link:http://www.phpfreakz.nl/download.php?did=19051

!!gewoon ergens van een website geplukt!!

Code:
<?php

if(!file_exists("config.php")){
    header("Location: installer.php");
    exit();
}
session_start(); ?>
<html>
<head>
<style>
body{
    padding: 0;
    margin: 0;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 12px;
}
fieldset.message, fieldset.warning, fieldset.notice, fieldset.error, fieldset.personal{
    display: block;
    margin: 3px;
    padding: 5px;
    -moz-border-radius: 10px;
}
fieldset.warning{
    border: 1px solid #800000;
    background: #CC0000;
    color: #ffffff;
}
fieldset.notice{
    border: 1px solid #c8c8c8;
    background: #e6e6e6;
}
fieldset.personal{
    border: 1px solid #bfc790;
    background: #eff3d4;
}
fieldset.error{
    border: 1px solid #c8c8c8;
    background: #e6e6e6;
}
legend.messageheading{
    color:#999999;
    display: block;
}
div.messagebody{
    color: #000000;
    display: block;
}
span.name{
    color:#CC0000;
}
#chatwindow{
    height: 80%;
    width:100%;
    overflow: scroll;
}
form{
    margin: 0; padding: 0;
}
tt{
    color: #990000;
}
tt .optional{
    color: #009900;
}
table{
    width: 100%;
}
table, tr, td, th{
    font-size: 12px;
}
tr{
    border-bottom: 1px solid grey;
}
</style>
<script type="text/javascript">
var timeout = 5;//hoeveel seconden tussen de updates

//einde intellingen.
var xmlhttp=false;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// JScript gives us Conditional compilation, we can cope with old IE versions.
// and security blocked creation of the objects.
try {
  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
  try {
   xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (E) {
   xmlhttp = false;
  }
}
@end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  xmlhttp = new XMLHttpRequest();
}
var dead = false;
<?php
    if(isset($_SESSION['name'])){
        echo "var nickname = \"".$_SESSION['name']."\";\n";
    }
    else{
        echo "var nickname = \"annoniem\";\n";
    }
    echo "var basepath = \"http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/\";\n";
?>
var timer = 0;
var busy = false;
function setname()
{
    busy = true;
    document.getElementById("submitbutton").disabled = true;
    var d = new Date();
    var newname = prompt("Wat is je nickname", nickname);
    if(newname != null){
        xmlhttp.open("GET",basepath+"server.php?message=/NAME "+newname+"&random="+d.getFullYear()+(d.getMonth()+1)+d.getDate()+d.getHours()+d.getMinutes()+d.getSeconds(),true);
        xmlhttp.onreadystatechange=function() {
            if (xmlhttp.readyState==4) {
                if(xmlhttp.responseText.indexOf("OK") != -1){
                    document.getElementById('chatwindow').innerHTML += "<fieldset class=\"notice\">"+nickname+" has changed his name to "+newname+"</fieldset>\n";
                    document.getElementById('chatwindow').scrollTop = 10000000;
                    nickname = newname;
                    update("undefined");
                }
                //else{
                //    alert("Failed to set nickname:\n"+xmlhttp.responseText);
                //    dead = true;
                //}
            }
        }
        busy = false;
        xmlhttp.send(null);
    }
    else
    {
        document.getElementById("submitbutton").disabled = false;
        busy = false;
        return true;
    }
    document.getElementById("submitbutton").disabled = false;
    busy = false;
}

function setaway()
{
    document.getElementById("submitbutton").disabled = true;
    var d = new Date();
    xmlhttp.open("GET",basepath+"server.php?message=/AWAY&random="+d.getFullYear()+(d.getMonth()+1)+d.getDate()+d.getHours()+d.getMinutes()+d.getSeconds(),true);
    xmlhttp.onreadystatechange=function() {
        if (xmlhttp.readyState==4) {   
            if(xmlhttp.responseText.indexOf("OK") != -1){
                document.getElementById('chatwindow').innerHTML += "<fieldset class=\"notice\">Lastid is has successfully reset to zero</fieldset>\n";
                document.getElementById('chatwindow').scrollTop = 10000000;
                dead = true;
            }
            else{
                alert("Failed to reset your id:\n"+xmlhttp.responseText);
                dead = true;
            }
        }
    }
    xmlhttp.send(null);
    document.getElementById("submitbutton").disabled = false;
}


function update(bericht)
{
    if(bericht.toUpperCase() == "/DISCONNECT"){
        setaway;
        dead = true;
    }
    if(bericht != "" && busy != true && dead != true){
        busy = true;
        document.getElementById("submitbutton").disabled = true;
        timer = timeout;
        var d = new Date()
        if(bericht == "undefined"){
            var url = "server.php?random="+d.getFullYear()+(d.getMonth()+1)+d.getDate()+d.getHours()+d.getMinutes()+d.getSeconds();
        }
        else{
            var url = "server.php?message="+bericht+"&random="+d.getFullYear()+(d.getMonth()+1)+d.getDate()+d.getHours()+d.getMinutes()+d.getSeconds();
        }
        xmlhttp.open("GET",basepath+url,true);//method, target, async (set always true!)
        xmlhttp.onreadystatechange=function() {
            if (xmlhttp.readyState==4) {
                if(xmlhttp.responseText != "" && xmlhttp.responseText != " "){
                    if(xmlhttp.responseText.indexOf("SETNAME") != -1)
                    {
                        setname();
                    }
                    else{
                        var rows = xmlhttp.responseText.split("\n");
                        for(i = 0; i <= rows.length-1; i++)
                        {
                            var data = rows[i].split("||");
                            if(data[0] == "OK"){    var type = data[1];}
                            else{                    var type = data[0];}
                            switch(type.toUpperCase()){
                            case "DIE":
                                if(data[0] == "OK"){data[0]=data[1];data[1]=data[2];}
                                document.getElementById('chatwindow').innerHTML += "<fieldset class=\"error\"><div class=\"messagebody\">"+data[1]+"</div></fieldset>\n";
                                dead=true;
                                break;
                            case "MESSAGE":
                                if(data[0] == "OK"){data[0]=data[1];data[1]=data[2];data[2]=data[3],data[3]=data[4],data[4]=data[5];}
                                   document.getElementById('chatwindow').innerHTML += "<fieldset class=\"message\"><legend class=\"messageheading\"><span class=\"id\">"+data[1]+"</span><span class=\"name\">"+data[2]+"</span> said on "+data[3]+":</legend><div class=\"messagebody\">"+data[4]+"</div></fieldset>\n";
                                break;
                            case "NOTICE":
                                if(data[0] == "OK"){data[0]=data[1];data[1]=data[2];data[2]=data[3],data[3]=data[4],data[4]=data[5];}
                                document.getElementById('chatwindow').innerHTML += "<fieldset class=\"notice\"><div class=\"messagebody\">"+data[4]+"</div></fieldset>\n";
                                break;
                            case "PERSONAL":
                                if(data[0] == "OK"){data[0]=data[1];data[1]=data[2];}
                                document.getElementById('chatwindow').innerHTML += "<fieldset class=\"personal\"><div class=\"messagebody\">"+data[1]+"</div></fieldset>\n";
                                break;
                            case "WARNING":
                                if(data[0] == "OK"){data[0]=data[1];data[1]=data[2];}
                                document.getElementById('chatwindow').innerHTML += "<fieldset class=\"warning\"><div class=\"messagebody\">"+data[1]+"</div></fieldset>\n";
                                break;
                            default:
                                document.getElementById('chatwindow').innerHTML += "<fieldset class=\"error\">"+xmlhttp.responseText+"</fieldset>\n";
                                break;
                            }
                            document.getElementById('chatwindow').scrollTop = 10000000;
                        }
                    }
                }
            }
        }
        xmlhttp.send(null);
        busy = false;
        document.getElementById("submitbutton").disabled = false;
    }
    else{ if(dead){
        if(bericht.toUpperCase() == "/CONNECT"){
            dead = false;
            counter();
            document.getElementById('chatwindow').innerHTML = "<fieldset class=\"Notice\">Client has been reset.</fieldset>\n";
        }
    }}
}

function counter()
{
    if(!dead){
        if(timer <= 0)
        {
            update("undefined");
            timing = setTimeout("counter()", 1000);
        }
        else{
            timer = timer-2;
            timing = setTimeout("counter()", 1000);
        }
    }
    else{
        clearTimeout(timing)
        document.getElementById('chatwindow').innerHTML += "<fieldset class=\"error\">Client terminated. Please reload this page to restart the chat.</fieldset>\n";
    }
}
</script>
</head>
<body onunload="setaway()">
<div id="chatwindow"></div>
<form name="formulier" onSubmit="javascript: update(document.getElementById('chattext').value);document.getElementById('chattext').value = '';return false;">
    <input type="text" id="chattext" name="chattext" maxlength="256" style="width: 450px; "/>
    <input type="submit" id="submitbutton" value="Say!" style="width:150px; "/>
    <input type="button" onClick="setname()" value="andere naam"/>
</form>
<script>
    counter();
</script>
<br/>
</body>
</html>

-------------------------server.php (zoals de naam al zegt)----------------------------
<?php
ob_start();
session_start();
error_reporting(E_ALL);
/*SQLtable
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 ;
*/
//instellingen
require("config.php");
//optionele hooks
/*
function messagepreparser($message){
    //deze functie wordt uitgevoerd voordat het bericht in de database wordt geplaatst
}

function outputparser($input){
    //als je de gehele uitvoer nog eventjes wilt doorscannen op dingen die niet kunnen,
    //zoals scheldwoorden. Deze functie heeft in tegenstelling tot de vorige 2 ook invloed
    //op het naamveld het de timestamp
    $output = str_replace("****", "f*ck", $input);
    return $output;
}
*/

//belangrijke array defineren
$commands = array();

//even wat standaard commando's defineren
$commands['name'] = array();
$commands['name']['usage'] = '/name [nickname]';
$commands['name']['description'] = 'Change your nickname.';
$commands['name']['help'] = '<tt>/name</tt> changes your nickname and will inform all others.<br/>Warning: You may not use spaces in your nickname.';
$commands['name']['function'] = '
    unset($parameters[0]);
    $newname = implode(" ", $parameters);
    if(!isset($_SESSION[\'name\'])){
        addmessage($newname." has joined the chat", "Server", "notice");
    }
    else{
        addmessage($_SESSION[\'name\']." has changed his name to ".$newname,"Server","notice");
    }
    $_SESSION[\'name\'] = $newname;
    print("OK||");
    return true;
';

$commands['away'] = array();
$commands['away']['usage'] = '/away';
$commands['away']['description'] = 'Disconnects you from the chat.';
$commands['away']['help'] = '<tt>/away</tt> will send a message to all users that you have left the chatroom. Then it will reset all your personal variables and eventually your client will get the message to stop.<br/>This function is automaticly called when you leave the client.<br/>You can reconnect with the chat by reloading your browserwindow or type <tt>/connect</tt> in your messagebar.';
$commands['away']['function'] = '
    unset($_SESSION[\'lastupdate\']);
    if(isset($_SESSION[\'isadmin\'])){unset($_SESSION[\'isadmin\']);}
    if(addmessage($_SESSION[\'name\']." has left the chat", "Server", "notice") && !isset($_SESSION[\'lastupdate\']) && define("STOP", true) && print("OK||DIE||You have logged out.")){
        return true;
    }
';

$commands['help'] = array();
$commands['help']['usage'] = '/help <span class="optional">[command]</span>';
$commands['help']['description'] = 'displays the message that you are now reading.';
$commands['help']['help'] = 'With <tt>/help</tt> you can display a listing of all available commands or by typing for example <tt>/help name</tt> you will see the help for <tt>/name</tt> if available.';

//standaardfuncties
function connected(){
    global $dbverbinding;
   
    /********hook********/
    if(defined('ADD_connected')){
        eval(ADD_connected);
    }
   
    if(!defined("CONNECTED")){
        if($dbverbinding=mysql_connect(MYSQL_SERVER,MYSQL_USER,MYSQL_PASSWORD)){
            if(mysql_select_db(MYSQL_DATABASE,$dbverbinding)){
                if(define("CONNECTED", true)){return true;}
                else{
                    print("DIE||Kon de constante <i>CONNEDTED</i> niet dsefineren\n");
                    return false;
                }
            }
            else{
                print("DIE||Fout nr ".mysql_errno($dbverbinding)." bij het selecteren van de database: ".mysql_error($dbverbinding)."\n");
                return false;
            }
        }
        else{
            print("DIE||Fout bij het verinding maken met de database op ".MYSQL_SERVER." als ".MYSQL_USER."\n");
            return false;
        }
    }
    else{
        return true;
    }
}

function addmessage($message = "", $name = "Annoniem", $type="message"){
    global $dbverbinding;
   
    /********hook********/
    if(defined('ADD_addmessage')){
        eval(ADD_addmessage);
    }
   
    if($message{0} == "/"){
        if(command($message)){
            return true;
        }
    }
    else{
    if(trim($message) != ""){
        if(connected()){
            if($name == "Annoniem" && isset($_SESSION['name'])){
                $name = $_SESSION['name'];
            }
            if(function_exists("messagepreparser")){
                $message = messagepreparser($message);
            }
            else{
                $message = strip_tags($message,'<b> <u> <i>');
            }
            if(mysql_query("INSERT INTO ".MYSQL_PREFIX."messages (message,author,ip,timestamp,type) VALUES ('".$message."','".htmlentities($name)."','".$_SERVER['REMOTE_ADDR']."',".mktime().",'".$type."')")){
                return true;
            }
            else{
                print("DIE||Error nr ".mysql_errno($dbverbinding)." while executing SQLquery: ".mysql_error($dbverbinding)."\n");
                return false;
            }
        }
        else{
            print("DIE||Function addmessage() doesn't get a connection to the database");
            return false;
        }
    }
    else{
        return false;
    }
    }
}

function echomessages(){
    global $dbverbinding;
    $awnser = array();
        /********hook********/
    if(defined('ADD_echomessages')){
        eval(ADD_echomessages);
    }
        if(connected()){
        if(!isset($_SESSION['lastupdate'])){
            $query = "SELECT * FROM ".MYSQL_PREFIX."messages WHERE timestamp > ".(mktime()-60*60*24)." ORDER BY id DESC LIMIT ".FIRSTTIME_MAX_MESSAGES;
        }
        else{
            $query = "SELECT * FROM ".MYSQL_PREFIX."messages WHERE timestamp > ".$_SESSION['lastupdate']." ORDER BY id DESC LIMIT ".MAX_MESSAGES;
        }
        if($results = mysql_query($query)){
            while($row = mysql_fetch_array($results)){
                if(defined('ADD_echomessages_loop')){
                    eval(ADD_echomessages_loop);
                }
                $message = nl2br($row['message']);
                $awnser[] = $row['type']."||".$row['id']."||".$row['author']."||".date(TIMESTAMP, $row['timestamp'])."||".$message;
                $_SESSION['lastupdate'] = mktime();
                if($row['id'] >= MAX_SIZE_DB){
                    cleandb();
                }
            }
            if(function_exists("outputparser")){
                outputparser($awnser);
            }
            else{
                echo implode("\n", array_reverse($awnser));
            }
            return true;
        }
        else{
            print('DIE||Fout nr '.mysql_errno($dbverbinding).' bij het uitvoeren van de SQLquery: '.mysql_error($dbverbinding)."\n");
            return false;
        }
    }
    else{
        print('DIE||Functie addmessage() krijgt geen verbinding met database.\n');
        return false;
    }
}

function command($in){
    global $commands;
    $parameters = explode(" ", substr($in, 1));
    $parameters[0] = strtolower($parameters[0]);

    /********hook********/
    if(defined('ADD_command')){
        eval(ADD_command);
    }
    if($parameters[0] == "help"){//speciale functie
        if(isset($parameters[1])){//doelgerichte help
            if(!isset($commands[$parameters[1]])){
                if(print("PERSONAL||<tt>/".$parameters[1]."</tt> is not a function.<br/>Type <tt>/help</tt> for all available commands.")){
                    return true;
                }
            }
            elseif(!isset($commands[$parameters[1]]['help'])){
                if(print("PERSONAL||<tt>/".$parameters[1]."</tt> does not has a help.")){
                    return true;
                }
            }
            else{
                if((!isset($commands[$parameters[1]]['secure']) || (isset($commands[$parameters[1]]['secure']) && $commands[$parameters[1]]['secure'] == false) || (isset($commands[$parameters[1]]['secure']) && $commands[$parameters[1]]['secure'] == true && isset($_SESSION['isadmin']))) && print("PERSONAL||".$commands[$parameters[1]]['help'])){
                    return true;
                }
                else{
                    if(print("PERSONAL||<tt>/".$parameters[1]."</tt> is not a function.<br/>Type <tt>/help</tt> for all available commands.")){
                        return true;
                    }
                }
            }
        }
        else{//list alle functies
            $output = "";
            foreach($commands as $key => $value){
                if(isset($commands[$key]['usage']) && isset($commands[$key]['description']) && (!isset($commands[$key]['secure']) || (isset($commands[$key]['secure']) && (!$commands[$key]['secure'] || ($commands[$key]['secure'] && isset($_SESSION['isadmin'])))))){
                    $output .= "<li><tt>".$commands[$key]['usage']."</tt><br/>".$commands[$key]['description']."</li>";
                }
            }
            if(!empty($output)){
                print("PERSONAL||".nl2br("<ul class=\"help\">".$output."</ul>"));
            }
            else{
                print("PERSONAL||No functions available.");
            }
            return true;
        }
    }
   
    elseif(isset($commands[$parameters[0]])){
        if(isset($commands[$parameters[0]]['function'])){
            if(isset($commands[$parameters[0]]['secure']) && $commands[$parameters[0]]['secure'] == true){
                if(!isset($_SESSION['isadmin'])){
                    if(print("PERSONAL||<tt>/".$parameters[0]."</tt> is not a function.<br/>Type <tt>/help</tt> for all available commands.")){
                        return true;
                    }
                    exit();
                }
            }
            $awnser = eval($commands[$parameters[0]]['function']);
            if($awnser != false){
                if(isset($echo)){
                    print($echo);
                }
                return true;
            }
            else{
                return false;
            }
        }
        elseif(print("PERSONAL||<tt>/".$parameters[0]."</tt> does not has a function.<br/>Type <tt>/help ".$parameters[0]."</tt> for more details")){
            return true;
        }
    }
    elseif(print("PERSONAL||<tt>/".$parameters[0]."</tt> is not a function.<br/>Type <tt>/help</tt> for all available commands.")){
        return true;
    }
}

function cleandb(){
    global $dbverbinding;
   
    /********hook********/
    if(defined('ADD_cleandb')){
        eval(ADD_cleandb);
    }
   
    if(connected()){
        if($results = mysql_query("TRUNCATE ".MYSQL_PREFIX."messages")){
            addmessage("Database has been cleaned", "Server", "notice");
            return true;
        }
        else{return false;}
    }else{return false;}
}

//plugins inladen.
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($ext['extension'] == "php"){
                include(PLUGINS_DIR."/".$file);
            }
        }
        closedir($handle);
    }
}
//aanvraagafhandeling
if(!isset($_SESSION['name']) && !isset($_GET['message'])){
    echo "SETNAME";
}
elseif(isset($_GET['message'])){
    if(!addmessage(str_replace("||", "|",$_GET['message']))){
        print("WARNING||Kon bericht niet toevoegen\n");
    }
    elseif(!defined("STOP")){
        if(!echomessages()){die("DIE||Kon berichten niet weergeven\n");}
    }
}
else{
    if(!echomessages()){
        die("DIE||Kon berichten niet weergeven\n");
    }
}
ob_end_flush();
?>

-------------------------------------config.php (client)-----------------------------------
<?php
//het is ook mogelijk de installer te gebruiken. SLa dan dit bestand over en download het volgende, en zet het in dezelfde directorie als server.php en index.php
//http://jellinde.jl.funpic.org/phpchat_v2/plugins/_download_installer.php
define("MAX_MESSAGES", 10);
define("FIRSTTIME_MAX_MESSAGES", 1);

define("MYSQL_SERVER", "localhost");
define("MYSQL_USER", "root");
define("MYSQL_PASSWORD", "");
define("MYSQL_DATABASE", "chat");
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", "wachtwoord");
?>





hier een SIMPELE site:
http://www.chattersweb.nl/eigen-chatbox.php
 
ik zit met het probleem dat die server van mij geen mysql ondersteund (ik wil niet dokke) .
Ik begrijp er ook nix van van mysql...
is er niet een simpel script dat steeds kijkt of er iets bij een bestand is gekomen, en dat dan ophaalt.....
 
ken je google?
hier een paar zoek woorden


chatbox
php-chatbox
php
chatten
een chatbox die ik kan begrijpen
MySQL chatbox
MySQL
 
:$ :$ :$ :$ :$ :$ :$ :$ :$ :$ :$ :$ :$ :$ :$ :$ :$ :$ :$ :$ :$ :$ :$ :$ :$ :$ :$ :$ :$
 
ken je google?
hier een paar zoek woorden


chatbox
php-chatbox
php
chatten
een chatbox die ik kan begrijpen
MySQL chatbox
MySQL

Lees dan zelf ook even goed ;) De topicstarter zegt dat hij geen MySQL ondersteuning heeft.
Zoeken naar "MySQL chatbox" of "MySQL" heeft dan ook totaal geen nut :)


@Topicstarter:
Ik denk dat het lastig wordt om een kant-en-klaar script te vinden, zónder MySQL ondersteuning.
Je zult dan bestaande scripts aan moeten passen, dat ze met bestanden kunnen werken.
Of je neemt tóch een MySQL database bij je hostingpakket :)
 
ik heb een fantastish gastenboek gemaakt, al zeg ik het zelf. Maar hoe laat ik die vernieuwen zodat het een chatbox is...

niet iedere seconde hele pagina vernieuwen..

ik weet niet of t mogelijk is met ajax.. jullie...
 
het zou dus iets moeten zijn dat de lines in het berichtenbestand telt, en de lijnen die er na de vorige keer zijn bijgekomen dat hij die hoeveelheid weer bij het bestand bij de client zet ofzo..
 
Leuk en aardig maar deze thread is al van juli.

Was het nog steeds een probleem dan was er vast later nog wel eens een reactie door de TS geplaatst.

Deze gaat voorlopig op slot
slotje.gif
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan