Cum sa faci un chat fara refresh ( folosind PHP & Ajax) ?
45Observam crestere si o dezvoltare tot mai mare a proiectelor web incercand sa ajunga toate pe noul „web 2.0”.Aceasta dorinta intalneste una noua si anume cea de a updata anumite portiuni din pagina fara ca utilizatorul sa fie nevoit sa faca acest lucru.Un bun exemplu in acest caz este bine-cunoscutul Twitter.Acesta are posibilitatea de a adauga ciripiturile fara a fi nevoie de un refresh al paginii.De asemenea multe din actiuni sunt similare : cautarea,autentificarea etc etc.Toate aceste lucruri creaza o viteza si experienta de navigare placuta utilizatorului.
Astazi noi vom incerca sa reproducem o actiune simpla asemanatoare cu cele de la Twitter,insa nu vom incerca sa reproducem nici una dintre acestea.
Practic vom avea o mica baza de date si cun formular HTML in care vom simula discutiile avute intr-un chat.Acest chat va face cereri regulate la o baza de date incercand sa extraga noile comentarii ce au aparut in chat.El va modifica un div si adauga noile discutii deasupra celor deja existente.
Este unul din cele mai bune exemple de a aprofundare a acestui principiu dinamic al paginilor web.
Ce tehnologii web folosim?
Prima tehologie web de care vom avea nevoie este batranul HTML.Acesta ne va ajuta la crearea unei interfete suficient de intuitiva si de simpla pentru a nu ridica probleme nici unui incepator ce a studiat HTML-ul 2-3 zile.Vom avea nevoie de o baza date ce va contine un tabel pentru a stoca informatiile ce le primim de la cei ce vor purta discutiile in chat.Vom folosi o baza de date ce o gasim pe orice server decent si anume o baza de date MySQL.Interogaririle ce la care vom supune baza de date sunt bazice si vor include selectii,stergeri,adaugari de „linii” in baza de date.Aceste interogari precum si alte prelucrari le vom face in cateva fisiere PHP.Pana aici , practic am prezentat doar tehnologiile ce sunt clasice intr-un website obisnuit.Pentru a prelua si a reincarca o anumita sectiune cu continut nou provenit din baza de date, va trebui sa introducem o tehnologie noua ce are la bazaJavascript : Ajax.Aceasta tehnologie va face cereri regulate la anumite fisiere PHP si va edita continutul anumitor taguri HTML, actualizand continutul acestora.
Rezultat
Am pregatit doua imagini facute paralel,una din Mozilla Firefox iar cealalta din Chrome pentru a vedea care va fi rezultatul la care se va ajunge in urma acestui articol. 😀
Formularul HTML
<html> <head> <title>Chat Box - Tutorial in care invatam cum sa aplicam Ajax si PHP pentru o pagina dinamica</title> </head> <body text="#66FF33" OnLoad="trimiteCMD('arata');"> <table align="center" width="50%" border="1" cellspacing="0" cellpadding="0"> <tr> <td> <div id="msg"></div> </td> </tr> <tr> <td align="center"> <form name="chatbox" method="post" onSubmit="return false"> <textarea id="msgtext" name="mesaj" cols="50" rows="3" onFocus="verif_msg(this.value);" onBlur="clr_msg(this.value);">Mesajul tau aici.</textarea><br><br> <button id="send" onClick="trimiteCMD('trimite', document.getElementById('msgtext').value);">Trimite</button> </form> </td> </tr> </table> </body> </html>
Tabelul MySQL din baza de date MySQL
Acest tabel trebuie pus intr-o baza de date MySQL de care vom avea nevoie la stocarea tuturor mesajelor primite de la cei care chatuiesc. 🙂
CREATE TABLE `mesaje` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `nume` CHAR( 255 ) NOT NULL , `mesaj` TEXT NOT NULL , `timp` INT NOT NULL ) ENGINE = MYISAM ;
Codul PHP pentru actualizare si adaugare a comentariilor?
Fisierul config.php
In acest fisier vor trebui facute singurele modificari pentru a putea lucra pe serverul dumneavoastra.Trebuie sa configurati accesul la baza de date MySQL creata anterior.De asemenea au loc si deschiderea sesiunile precum si crearea unei variabile ce ne asigura ca suntem unde trebuie! 🙂
<?php session_start(); if(!defined('INTERN')) { define('INTERN',TRUE); mysql_connect('server','user','parola') or die('Nu m-am putut conecta la serverul MySQL.'); mysql_select_db('baza de date') or die('Nu m-am putut conecta la baza de date MySQL.'); } ?>
Fiserul adauga.php
Acest fisier va adauga un mesaj nou $_GET[‘mesaj’] provenind de la $_GET[‘user’] si va returna ultimile mesaje din baza de date noi.
<?php include('config.php'); if(!defined('INTERN')) die(); if(isset($_GET['CMD']) && $_GET['CMD'] == 'trimite' && isset($_GET['nume'],$_GET['mesaj'])) { header("Expires: Mon, 26 Jul 2999 05:00:00 GMT" ); header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" ); header("Cache-Control: no-cache, must-revalidate" ); header("Pragma: no-cache" ); header("Content-Type: text/xml; charset=utf-8"); $user = htmlentities($_GET['nume'],ENT_QUOTES); $mesaj = htmlentities($_GET['mesaj'],ENT_QUOTES); $query = mysql_query('INSERT INTO `mesaje` (`nume`,`mesaj`,`timp`) VALUES ("'.$user.'","'.$mesaj.'","'.time().'")'); $result = ($query) ? '1' : '0'; ?> <root> <cmd><?php echo $_GET['CMD'];?></cmd> <status><?php echo $result; ?></status> <?php include('ultimile.php'); ?> </root> <?php } ?>
Fiserul last.php
Acesta returneaza ultimile mesaje ale cititorului curent.
<?php include('config.php'); if(isset($_GET['CMD']) && $_GET['CMD'] == 'arata') { header("Expires: Mon, 26 Jul 2999 05:00:00 GMT" ); header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" ); header("Cache-Control: no-cache, must-revalidate" ); header("Pragma: no-cache" ); header("Content-Type: text/xml; charset=utf-8"); ?> <root> <cmd> <?php echo $_GET['CMD'];?> </cmd> <status>1 </status> <?php include('ultimile.php'); ?> </root> <?php } ?>
Fiserul ultimile.php
Fisierul ultimile.php este defapt cel care stabileste care mesaje sa le afiseze.Daca e prima cerere va returna ultimile 10 mesaje, in caz contrar va afisa doar ce a aparut nou de la ultima cerere.Acest ultim moment la care s-a facut verificarea este stocat intr-o variabila globala de tip SESSION.
<?php if(!defined('INTERN')) die(); $time = time(); $time = isset($_SESSION['lastcheck']) && is_numeric($_SESSION['lastcheck']) ? $_SESSION['lastcheck'] : 0; $_SESSION['lastcheck'] = time(); if($time == 0) { $query = "SELECT * FROM `mesaje` ORDER BY `timp` DESC LIMIT 0,10"; } else { $query = "SELECT * FROM `mesaje` WHERE timp >=".$time." ORDER BY `timp` DESC"; } $int = @mysql_query($query); $result = ($query) ? '1' : '0'; ?> <statusMesaje><?php echo $result; ?></statusMesaje> <mesaje> <?php while($row = @mysql_fetch_array($int)) { ?> <mesaj id="<?php echo $row['id']; ?>"> <nume><?php echo $row['nume']; ?></nume> <msg><?php echo $row['mesaj']; ?></msg> <timp><?php echo gmdate('D, d M Y H:i:s',$row['timp']); ?></timp> </mesaj> <?php } ?> </mesaje>
Codul AJAX pentru a face cererile dinamic?
//verifica daca avem vreun mesaj function verif_msg(data) { if(data=='Mesajul tau aici.') { document.getElementById('msgtext').value=''; } } //curata mesajul function clr_msg(data) { if(data == '') { document.getElementById('msgtext').value='Mesajul tau aici.'; } } //cream un obiect Http(acesta ne va ajuta sa lucram cu cereri Ajax) //el incearca sa creeze obiectul pentru diverse versiuni de Browser function creazaObiectHttp() { if (window.XMLHttpRequest) return new XMLHttpRequest(); else if(window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP"); else { document.getElementById('msg').innerHTML='Status: Nu am putut crea obiectul XML Http.' + 'Va rugam frumos schimbati browserul.'; } } var mTimer; //timerul ce face regulat cereri de noi mesaje var receiveReq = creazaObiectHttp(); //cream obiectul var randomUser = Math.floor((Math.random() * (2000-1000+1))+1000); //numele utilizatorului //functia principala ce trimite mesajele catre diverse fisiere php function trimiteCMD(cmd, data) { if(cmd=='trimite' && data=='Mesajul tau aici.') { alert('Te rog scrie un mesaj!') } else { //daca nu este trimis nici un pachet acum si nu este nici unul in decurs if (receiveReq.readyState == 4 || receiveReq.readyState == 0) { var file,param; if(cmd=='trimite') { file = 'adauga.php'; //fisierul ce trebuie prelucrat + parametri param = 'CMD=trimite&nume=user' + randomUser + '&mesaj=' + data; clearTimeout(mTimer);//inchidem toate cererile existente document.getElementById('msgtext').value='Mesajul tau aici.'; } else if(cmd=='arata') { file = 'last.php'; param = 'CMD=arata'; clearTimeout(mTimer); //deschidem o noua cerere peste 5 secunde sa vedem daca mai exista mesaje noi mTimer = setTimeout("trimiteCMD('arata', '');",5000); } receiveReq.open("POST", file, true); //facem cererea receiveReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');//setam headere receiveReq.onreadystatechange = handleCMD;//functia ce va procesa cererile receiveReq.send(param); //trimitem parametrii } } } //functie ce returneaza true daca pagina curenta a fost descarcata corect si complet function check_state() { if (receiveReq.readyState == 4) if (receiveReq.status == 200) return "True"; } //procesam mesajele primite de la fisierele PHP function handleCMD() { var resultState = check_state(); if (resultState == "True") { var chat_div = document.getElementById('msgtext'); xmldoc = receiveReq.responseXML; var cmd = xmldoc.getElementsByTagName('cmd'); var status = xmldoc.getElementsByTagName('status'); if(cmd[0].firstChild.nodeValue == 'trimite') { //daca s-a adaugat mesajul nou afisam asta utilizatorului if(status[0].firstChild.nodeValue == '1') { document.getElementById('err').innerHTML = 'Mesajul a fost trimis.'; } else { //in caz contrar afisam mesajul corespunzator document.getElementById('err').innerHTML = 'Nu am putut trimite mesajul.'; } //repornim cererile regulate o data la 5 secunde mTimer = setTimeout("trimiteCMD('arata', '');",5000); setTimeout('document.getElementById("err").innerHTML = "";',3000); } else if(cmd[0].firstChild.nodeValue == 'arata') { //nimic } var status = xmldoc.getElementsByTagName('statusMesaje'); //daca avem mesajele trimise ok le procesam si le afisam utilizatorului if(status[0].firstChild.nodeValue == '1') { var msg = xmldoc.getElementsByTagName('mesaje'); var msgs_nodes = msg[0].getElementsByTagName('mesaj'); for(i = 0; i < msgs_nodes.length; i++) { //mesajul i var userNode = msgs_nodes[i].getElementsByTagName('nume'); var bodyNode = msgs_nodes[i].getElementsByTagName('msg'); var timeNode = msgs_nodes[i].getElementsByTagName('timp'); var add = '<small>[ ' + timeNode[0].firstChild.nodeValue + ' ]</small>'; add += ' ' + userNode[0].firstChild.nodeValue + ' '; add += ' ' + bodyNode[0].firstChild.nodeValue + ''; //il adaugam inaintea celor deja existente document.getElementById('msg').innerHTML = add + document.getElementById('msg').innerHTML; add = ''; } } else {//in caz contrar afisam o eroare document.getElementById('err').innerHTML = 'Nu am putut primi noile mesaje.'; setTimeout('document.getElementById("err").innerHTML = "";',3000); } } }
Sa le unim pe toate
Am creat o arhiva in care am unit toate aceste fisiere, pentru a face un sistem complet functionabil.Exista si un fisier sql.sql care are baza de date MySQL in cazul in care nu aveti rabdare sa o luati de aici.Descarcati arhiva,configurati fisierul config.php si adaugati tabelul in baza de date si dupa puteti testa.Fisierele nu sunt comentate,singurele comentarii find puse aici,asa ca veti fi nevoiti sa nu sariti peste pasul de a analiza codul in care doriti sa invatati ce am facut.
Pe scurt am interceptat pachetele sub forma de mesaje XML de la serverul PHP ce le-a generat cu ajutorul fisierelor ultimile.php si adauga.php respectiv last.php. Am tratat obiectul ca unul HTML si am extras din el pe rand noile mesaje,daca acestea erau.Codul pare mare datorita faptului ca am incercat sa tratez si majoritatea erorilor de baza, sperand ca asa nu veti avea probleme.
Concluzii
Desi, acest articol nu se referea neaparat la cum se lucreaza cu Ajax si PHP, acest tutorial este unul din cele mai bune exemple ce pot fi facute de un incepator.Nu trebuie sa te sperii de marele cod, este doar o impresie, in browser acesta pare mai complex decat este.Daca vei dori sa intelegi acest articol , iti sugerez sa-l descarci pe calculator si sa stai cu browserul langa tine pentru a citi explicatiile.
De asemenea, in acest „mic proiect” , am folosit doar cereri bazate pe POST, si le-am omis intentionat din discutie pe celelalte.Daca doriti cateva exemple si folosind cereri Ajax dar bazate pe argumente GET lasati un comentariu si in maxim cateva ore voi veni cu explicatiile si exemplele. 🙂
Intrebari?
😀 … nimic ?
Interesant, mi-am aruncat o privire de vreo 15 secunde si a inceput sa ma doara ochi !
Chiar in seara asta mi-am redeschis domeniul ( i-am luat host) si cred ca o sa am de lucru mult !
Oricum respect pt. efortul depus !
foarte folositor.
Stiu ca acum multa vreme eu si nytr0gen lucram la un chat in php cu datele encryptate, si incat la vremea aia cunostintele mele si ale lui in limbajele dinamice gen ajas, js, erau limitate, nu stiam cum sa dinamizam in asa fel incat sa nu dam refresh ca tampitii. La un moment dat ma gandeam sa afisez mesajele intr-un i-frame ce isi dadea refresh la un anumit interval de timp, ca sa nu fie stresant :))
Evident, am abandonat proiectul, dar tot va fi folositor pentru altii care vor incerca.
foarte bun
Multumesc, sper sa aud si de faptul ca v-a fost folositor.Astea sunt momentele cand ma simt cel mai bine! 🙂
Hmm, nu am citit inca tutorialul, dar probabil voi folosi metoda pentru altceva, revin mai tarziu 😀
Metoda asta de a face un chat este ok pana la o anumita limita. Insa un numar mare de participanti la chat ar face ceva load serverului de mySQL.
Eu as apela la o solutie Flash + socket server, fara sa mai salvez/afisez datele in vreo baza de date, ci comunicare directa intre utilizatori.
Da , ai foarte mare dreptate, un numar de sa spunem 1000+ (poate chiar mai mult) ar crea ceva probleme bazei de date. Insa banuiesc ca daca ai si un astfel de trafic ai si ceva care sa suporte o cantitate mare de trafic venita in fluxuri (spikeuri).
Hmm, eu as face altfel, in aceasta situatie(neavand tangente cu flashul). As crea o aplicatie standalone(spre exemplu in C#) la care m-as conecta direct din PHP. 🙂 Aici ar conta cel mai mult banda ce o ai la dispozitie .
am incercat sa fac acest chat dar nu merge
Problema nu este cu siguranta de la mine.Testul a fost verificat nu doar de mine, rezultatul fiind foarte pozitiv.Spune-ne exact ce pasi ai facut, cum i-ai facut, ce erori intampini etc. Mesajul dat de tine nu e prea util. 🙂
Foarte bine structurat articolul, felicitari! Nu ti se pare ca e mult mai usor sa faci exact aceeasi chestie folosind Jquery si Json?
Ba da, eu chiar asta folosesc. Dar, folosind jQuery si Json nu vei invata niciodata cum lucreaza cu adevarat. 🙂
Aaaa, iarasi maestru’ Avadanei ! 🙂
Eu si uitasem de tine, dar facand scrool down, dau de o poza in care era cineva cunoscut. Frizura aia este inconfundabila !
Vrei sa faci ceva maret ?
Daca raspunsul este ‘DA’, atunci incearca sa explici limbajul MySQL ca limbaj de lucru cu formulare care au linii si coloane. Pentru PHP, incearca sa scrii despre el ca un limbaj de scripting care este gazduit in interiorul paginilor de HTML. Cam asa vad eu lucrurile cu aceste doua chestii. Incerc sa invat limbajee acestea, dar sunt explicate foarte artificial, iar eu nu am studiile necesare ca sa pricep ce vor sa spuna autorii diverselor explicatii ale acestor limbaje.
Interesant articol. Eu mai am un chat scris in PHP dar care nu utilizeaza niciun fisier de myqsl .
Hmm, legat de MySQL trebuie privit ca un arbore mare astfel.
Nodul de sus este baza de date.
Urmeaza nodurile copii ale parintelui principal, care reprezinta tabelele.
Fiecare tabel, are un nou rand de noduri ce reprezinta numele elementelor tabelelor, iar in jos tot adaugi valorile. Oricum, privirea MySQL ca un tabel este gresita, ci doar privirea tabelului MySQL propriu-zis este astfel.
Legat de PHP, ai inteles cam gresit. Articolele studiate de tine arata ca nu sunt facute prea bine. Organizarea este un aspect extrem de important : un cod frumos si corect este un cod PHP pur care nu are nici o treaba cu cel HTML.
Legat de frizura mea, ma bucur ca a ajuns un tipar neconfundabil, probabil nu pentru multa vreme pentru ca e depasita! :))
Nu barosane !
SQL este limbaj de lucru cu matrici de cuvinte.
la linii le zice campuri sau inregistrari
La coloane , le zice … am uitat in acest moment si mie si lene sa caut ce sunt coloanele .
Iar asa zisa baza de date mai complexa, este un masiv de matrici de cuvinte … Adica o matrice de matrici.
‘Åžmenozeala’ este ca trebuie vazut ce se poate face cu cuvintele din aceste matrici, si de aicea reies comenzile … Oricum a nu se confunda cu matricile de numere, aici fiind vorba de siruri de caractere.
Asaaa, si deci despre PHP,
E fals sa crezi ca HTML nu are treaba cu PHP. Åži asta deoarece PHP genereaza dinamic HTML. Practic, putem oarecum zice ca motorul de PHP este un plugin al browserului de HTML.
Sa le spui profesorilor tai de informatica sa lase teoriile pentru ei, iar elevilor sa le predea realitatea. Din pacate miroase a matematica ce ai scris tu , iar abstractizarea aia, nu are sens in practica.
Cat despre poza, las-o ca e simpatica; imi aminteste de http://vrmlserver.xooit.com/t313-http-www-cs-unc-edu.htm . E o asemanare mai din avion, asa …
–––––––––––––––––––––––––––––––––––––––––––––––
Daca iti plac chaturile, te astept la mine sa discutam despre ele.
BlaxxunRomania
Nu e nevoie de o introducere asupra matricilor. Daca organizarea efectiva a limbajului ar fi matricile, eficienta ar scadea dramatic. Privesti intr-un mod simplu bazele de date, deoarece aceasta „observatie” facuta de tine se bazeaza foarte mult pe ansamblul ce se vede la utilizator si nu la programator. Un programator va vedea mai mult decat o matrice ce se afla in spatele tehnologiei. 🙂
Legat de PHP, este cea mai gresita afirmatie sa spui ca motorul PHP este un plugin al browserului. PHP este cod ce ruleaza necompilat, cod ce se afla pe partea de server side. Practic, daca vrei, HTML devine in aceasta situatie copilul mai mic, iar PHP parintele. PHP reprezinta kernelul windowsului, iar HTML/CSS/Javascript etc sunt API-uri ale interfetei, daca esti mai familiar cu Windows. PHP are o treaba foarte mare cu HTML, doar ca nu trebuie considerat un limbaj ce se afla in interior. Pentru ca defapt el e tata, si HTML copilul.
Dezinformarea tutorialelor de baza este mare. Vei vedea cat de putin cod PHP se foloseste intre tagurile HTML daca vei folosi un framework (Zend, CakePHP etc), deoarece acesta este modul corect de lucru. PHP gandeste si trimite gandurile HTML-ului ce il interpreteaza, de unde rezulta ca importanta mai mare o are creierul si nu extensia lui : GUI-ul.
Profesorii mei de informatica sunt …. eu. 🙂 Afirmatiile ce le fac sunt dupa studiile ce le-am facut personal, pentru ca sunt constient de dezinformarea ce o fac respectivii „informaticieni”.
Da asa este, afirmatia precum ca interpretorul de cod PHP este plugin pentru interpretorul de HTML, nu este foarte fericita. Un plugin se gaseste in general in acelas computer cu aplicatia careia ii extinde posibilitatile.
Am si zis „oarecum” .
Deci interpretorul de PHP, proiecteaza cod PHP care este citit de interpretorul de HTML.
Tu pui inainte PHP, cand de fapt interpretoarele de hipertext au aparut inaintea motorului de PHP. Tu zici ca PHP gandeste, iar HTML interpreteaza. Pai nu este asa, ci HTML cere iar PHP ii ofera, iar daca nu are, HTML se duce la alt limbaj de script.
Originea PHP este imitarea limbajului PERL, ca acesta costa bani. PHP este un PERL dezvoltat si gratuit in mare masura. PERL a aparut ca sa genereze cod HTML. PERL, nu are niciun sens fara browsere de web. La fel si PHP, care este succesorul sau, nu are o prea mare utilitate in afara Internetului, deoarece este un limbaj greoi si cu specializare ingusta. Pana si QBASIC este un limbaj mai destept decat PHP. De s-ar apuca lumea sa utilizeze PHP daca nu are treaba cu webul ? Poate doar asa de amorul artei …
Este discutabila comparatia tata – fiu referitoare la PHP si HTML. Tu vrei sa zici ceva de genul, „Nu ganditi in HTML, ci ganditi in PHP”. Este posibil sa te auda vreun programator si sa creeze un nou tip de browser, care sa citeasca direct codul PHP. Dar de ce nu te gandesti ca HTML evolueaza ? Uite de exemplu este posibil ca viitoarele browsere de web sa nu mai necesite pluginuri …
Sa revin la tema acestui topic. Este interesant acest chat fara refresh. O sa il studiez cu de amanuntul.
Ai putea tranlata un cod PERL in cod PHP ? Am un server in PERL dar vreu sa fie in PHP.
.
Din punct de vedere istoric PHP-ul este mai tanar dar nu-l pozitioneaza in fata sau in spatele HTML-ului. Eu zic sa nu gandesti intr-un mix HTML-PHP, pentru ca e foarte greoi codul de analizat. Curand va aparea un articol legat de acest subiect, asa ca acolo vom putea dezbate mai mult aceasta problema. 🙂
Referitor la traducerea codului, se poate. 🙂
Ai scris ca „Referitor la traducerea codului, se poate. :)”.
Serverul dezarhivat este aici: http://www.c3.hu/~szmz/vrml/advancedVRML2/
Iar serverul arhivat este aici: http://sites.google.com/site/arickserver/advancedVRML2.tar
Iti multumesc mult pentru speranta care mi-ai dato. Dupa translatarea acestui server in PHP, il vom pune online pe un sit care contine PHP si ii vom alatura si toate fisierele necesare a fi descarcate si utilizate de oricine doreste.
Serverul a fost creat de catre Clay Graham, si vom mentiona si pe cel care l-a facut sa functioneze in PHP : Avadanei Andrei.
tutancamon,
‘Multi-User Worlds’
http://vrmlserver.xooit.com/index.php
Arhiva aia, nu o sa o tin mult acolo. Deci ar fi bine sa o descarcati cat inca este acolo.
Pe sit se vad niste fisiere cu extensia *.pl, acestea sunt asa numitele fisiere scrise in limbajul Perl.
Ca sa probati acest server, va trebuiesc urmatoarele chestii instalate in computerul vostru care trebuie sa aiba sistemul de operare Windows :
1) motorul de PERL
2) browserul NetScape
3) pluginul Cosmo
4) si nu in ultimul rand va trebuie si un server de web, PWS,IIS sau Apache …
Deci avand indeplinite cele 5 conditii, puteti proba acest server realizat cu CGI.
Adaptarea dentru limbajul PHP, va va aduce oarece glorie printre dezvoltatorii de aplicatii de web. Serverul deja are autor: Clay Graham.
Dupa cum poate deja ati observat este un server de asa zisa Realitate Virtuala.
In forumasul meu am peste 20 de tipuri de servere de Realitate Virtuala; si le-am expus aici: http://vrmlserver.xooit.com/f216-Multi-User-Words.htm
Le multumesc domnului Clay Graham pentru proiectul sau, si domnului Zoltán Szegedy-Maszák pentru ca a lasat online acest frumos si inteligent proiect.
See You later on Digital Space.
BlaxxunRomania aka tutancamon,
😉
Cand scriai ca PHP nu are nicio treaba cu HTML, stiai ceva, dar nu te-ai exprimat corect. Am avut o revelatie: PHP utilizeaza HTML ca interfata de introducere si afisare de date.
Ca interfata 3d, poti utiliza pluginurile de VRML. Probabil ca si flash playerele or fi bune pentru asa ceva, dar lucrul cu ele este destul de complicat si costa si mult.
🙂
Eu m-am exprimat foarte bine, nu ai fost atent la ce am afirmat! 🙂
@tutancamon
„SQL este limbaj de lucru cu matrici de cuvinte.
la linii le zice campuri sau inregistrari
La coloane , le zice … am uitat in acest moment si mie si lene sa caut ce sunt coloanele .
Iar asa zisa baza de date mai complexa, este un masiv de matrici de cuvinte … Adica o matrice de matrici.”
SQL e un limbaj de interogare nici decum un limbaj de lucru cu matrici, defapt nici nu imi dau seama unde intra matricele in toata treaba asta. Serverul de Sql nu stocheaza informatiile sub forma de matrici ci sub forma de arbori sau alte structuri de date.
Imagineaza’ti cat de incet ar lucra serverul daca ar fi sub forma de matrici si cam cata memorie ar fi necesara pentru stocarea datelor.