Repetare mesaj de intampinare in camera chat

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
royal27
Mesaje:79

Repetare mesaj de intampinare in camera chat

Am functia asta care iti adauga un mesaj in camera de chat bun venit

Cod: Selectaţi tot

function addtochat($uid, $rid)
{
global$xyz;
$timeto = 200;
$timenw = time();
$timeout = $timenw - $timeto;
$uid=getuid_sid($sid);
$exec =$xyz->query("DELETE FROM sh99x_chonline WHERE lton<'".$timeout."'");
$res =$xyz->query("INSERT INTO sh99x_chonline SET lton='".time()."', uid='".$uid."', rid='".$rid."'");
$onlinecount=$xyz->query("SELECT COUNT(*) FROM sh99x_chonline WHERE rid='".$rid."' and uid='".$uid."'")->fetch_array();
if($onlinecount[0]=="0")
{
$camera=$xyz->query("SELECT name FROM sh99x_rooms WHERE id='".$rid."'")->fetch_array();
$chatok =$xyz->query("INSERT INTO sh99x_chat SET chatter='1', who='', timesent='".time()."', msgtext='/pp Salut @".getnick_uid($uid)." bine ai venit in camera ".$camera["name"]."', rid='".$rid."';");
}

if(!$res)
{
$xyz->query("UPDATE sh99x_chonline SET lton='".time()."', rid='".$rid."' WHERE uid='".$uid."'");

}else{
}
}
Acum treaba este ca daca intru cu 2 useri pe aceeasi camera se repeta mesajul fara ca sa mai pot scrie ceva,ce as putea face sa nu se mai repete mesajul ori de cate ori intra cineva nou in camera

MarPlo Mesaje:4343
Salut,
Nu inteleg logica codului, cum de se adauga mesajul de "Bun venit', fiindca in script e setat sa fie adaugat la conditia cand $onlinecount[0] este 0, adica cand nu e nici un user online.
Dar inainte de acea conditie este un Insert care adauga utilizator la "online", cu idul lui si al camerei, deci $onlinecount[0] ar trebui sa fie cel putin 1.

Oricum, ca idee, inainte de a adauga mesajul de 'Bun venit', fa un "SELECT COUNT()" in tabelul sh99x_chat, cu id-ul camerei; si adaugi mesajul doar daca nu mai e alt mesaj adaugat pentru acea camera.

Cod: Selectaţi tot

$msgroom=$xyz->query("SELECT COUNT(*) FROM sh99x_chat WHERE rid='".$rid."'")->fetch_array();
if($msgroom[0]=='0'){
  $camera=$xyz->query("SELECT name FROM sh99x_rooms WHERE id='".$rid."'")->fetch_array();
  $chatok =$xyz->query("INSERT INTO sh99x_chat SET chatter='1', who='', timesent='".time()."', msgtext='/pp Salut @".getnick_uid($uid)." bine ai venit in camera ".$camera["name"]."', rid='".$rid."';");
}

royal27 Mesaje:79
codul care l-am facut este ca sa salute robotul fiecare participant cand intra pe camera,codul care l-ai propus tu saluta doar primul venit,ceilalti utilizatori nu,e ca o notificare..... "test s-a alaturat camerei general,bun venit"asta incerc sa fac

MarPlo Mesaje:4343
Mesajul de intampinare nu trebuie salvat in baza de date, ci ar trebui adaugat in camera cu un cod javascript, sau simplu cu php la crearea si deschiderea camerei; sa apara utilizatorului cand intra in camera.
E mult mai eficient si nu incarca baza de date cu inregistrari repetitive.

royal27 Mesaje:79
Ok,o idee de javascript?
Eu vreau ca atunci cand se alatura cineva camerei sa apara pe camera tuturor utilizatorilor ca x s-a alaturat camerei.

MarPlo Mesaje:4343
Nu am cum, nu e ceva simplu; depinde de structura scriptului, de codul html al camerei, si ce javascript /ajax e definit.
Daca vrei sa apara mesajul la toti cei din acea camera e mai complicat, trebuie sa folosesti si scriptul de pe server, combinat cu cel de afisare a mesajelor in camera.

Presupun ca se foloseste ajax, care este executat de exemplu la fiecare secunda ca sa actualizeze ce e adaugat in camera.
Eu asi face in felul urmator:
1. Cand utilizatorul intra in camera e inregistrat in baza de date (la online) cu acel timestamp.
2. La afisarea camerei in browser se creaza in codul html un obiect javascript care contine utilizatorii online si timpul cand au intrat in camera.

Cod: Selectaţi tot

<scriptt>
var usr_roomname =<?php echo json_encode(['usr_1'=>timestamp1, 'usr_2'=>timestamp2]); ?>
</script>
3. Scriptul ajax primeste de la php un obiect in format json, o parte cu utilizatorii si timpul de intrare in camera; si alta parte cu mesajele.
4. Se verifica utilizatorii din obiectul primit de la server cu cei din obiectul js definit la crearea camerei (usr_roomname).
5. Daca e vreun utilizator nou, adauga cu js in camera mesajul de intrare si se actualizeaza obiectul usr_roomname.

royal27 Mesaje:79
Am rezolvat,am creat cum ai spus si tu un fisier php aparte care atunci cand intru in camera de chat sa trec prima data prin acel fisier cu mesajul de "x s-a alaturat camerei",multumesc