[System CHAT]Chat cu mesaj si comenzi ADMIN

PEAR, Smarty, ADOdb, OOP, PHP 5, XML, UML, Şabloane de proiectare, PHP-GTK.

Moderatori: coditza, Emil, Moderatori

Avatar utilizator
Khamoaset
Average Member
Mesaje: 160
Membru din: Joi Iul 21, 2011 4:29 pm
Contact:

[System CHAT]Chat cu mesaj si comenzi ADMIN

Mesajde Khamoaset » Lun Sep 10, 2012 6:07 pm

Salutare!
Vreau sa fac un chat(camera de conversatie) mesaj si coduri, adica daca este un membru ADMIN sa aiba coduri de acces la chat cam asa ceva:
/set <nume jucator> level <un nr. de nivel> de ex: /set Iulian90 level 45..... sau si alte coduri ca genul acesta... cum as putea face atunci cand introduc codul in <input /> numai ptr ADMIN si restul membrilor sa nu aiba acces la coduri.... ma poate ajuta cineva ? :roll: :?



keen
Senior Member
Mesaje: 254
Membru din: Joi Ian 28, 2010 5:05 pm
Localitate: Br?ila
Contact:

Mesajde keen » Mar Sep 11, 2012 10:47 am

Cod: Selectaţi tot

function is_admin() {
//consideram ca in baza de date level-ul peste 100 este admin

$is_admin = false;
$admin = mysql_fetch_row(mysql_query("select level from utilizatori where user='".$_SESSION['user']."'"));

if($admin[0]>="100")
$is_admin = true;

return $is_admin;
}


$msg = $_POST['message'];
$cmd = explode(" ",$msg);

if(strcasecmp($cmd[0])=="/set" && is_admin()) //este admin si este apelata functia /set
{
   $update = mysql_query("update utilizatori set level='".$cmd[3]."' where user='".$cmd[1]."'");

   if($update)
   {
   $message = $cmd[1]." a primit level ".$cmd[3];
   mysql_query("insert into chat set message='".$message."',user='".$_SESSION['user']."'");
    }
}
else //daca nu este admin sau este admin dar nu a introdus comanda /set, se trimit mesajele normal
mysql_query("insert into chat set message='".$msg."',user='".$_SESSION['user']."'");

Avatar utilizator
Khamoaset
Average Member
Mesaje: 160
Membru din: Joi Iul 21, 2011 4:29 pm
Contact:

Mesajde Khamoaset » Mar Sep 11, 2012 11:26 am

dar imi da eroarea asta:

Cod: Selectaţi tot

Warning: Wrong parameter count for strcasecmp() in D:\ale_lui_tester\AppServ\www\test.php on line 29
:cry: :cry:

elrukn
Average Member
Mesaje: 167
Membru din: Sâm Iul 28, 2007 11:16 pm
Localitate: Bucuresti

Mesajde elrukn » Mar Sep 11, 2012 11:43 am

keen, daca imi permiti, de ce sari cu o bucata de cod care poate mai mult incurca ?


@Khamoaset
poti sa folosesti o variabila de sesiune ca sa stii daca userul este sau nu admin atunci can verifici daca ii executi comanda.

pentru parsarea comenzilor, daca vrei sa faci cum a dat keen exemplu,
poti sa faci replace pentru spatii multiple in interiorul comenzii ca sa nu ai surpize.

edit: macar in perioada de dezvoltare, cand faci un query, pune un die(mysql_error()) sau un die(' un mesaj care sa iti spuna unde s-a oprit executia');

eram sigur ca o sa dai copy paste si nu o sa iti mearga, felicitari keen!

keen
Senior Member
Mesaje: 254
Membru din: Joi Ian 28, 2010 5:05 pm
Localitate: Br?ila
Contact:

Mesajde keen » Mar Sep 11, 2012 11:55 am

elrukn scrie:keen, daca imi permiti, de ce sari cu o bucata de cod care poate mai mult incurca ?


@Khamoaset
poti sa folosesti o variabila de sesiune ca sa stii daca userul este sau nu admin atunci can verifici daca ii executi comanda.

pentru parsarea comenzilor, daca vrei sa faci cum a dat keen exemplu,
poti sa faci replace pentru spatii multiple in interiorul comenzii ca sa nu ai surpize.

edit: macar in perioada de dezvoltare, cand faci un query, pune un die(mysql_error()) sau un die(' un mesaj care sa iti spuna unde s-a oprit executia');

eram sigur ca o sa dai copy paste si nu o sa iti mearga, felicitari keen!


Ar trebui sa te abtii de la chestii gen copy/paste. Codul l-am scris direct pe forum. nici macar intr-un editor de text.
Cat despre potentialele erori, trebuie sa se ocupe de ele si sa adapteze codul pentru scriptul lui. Eu i-am dat structura, dar nu am facut baza de date sau chat-ul ca sa si testez.

Edit:
Cat despre admin / sesiune nu ii vad rostul.
Punem situatia:
- el scoate adminul unui utilizator. Tot timpul va trebui o functie care sa verifice in baza de date daca mai are admin sau nu. Si daca nu mai are admin sa ii faca destroy la sesiune.
- ii da unui utilizator admin... aceeasi situatie: trebuie verificat in baza de date si daca apar modificari , seteaza sesiunea de admin.
Functia facuta de mine face acelasi lucru (verifica daca are admin sau nu) doar ca nu mai salveaza in sesiuni.

elrukn
Average Member
Mesaje: 167
Membru din: Sâm Iul 28, 2007 11:16 pm
Localitate: Bucuresti

Mesajde elrukn » Mar Sep 11, 2012 12:24 pm

Incearca sa te abtii de la afirmatii de genul "avem grija sa muscam pe altii de cur", la adresa mea.
Poti sa iti asumi responsabilitatea pentru prostia de cod scrisa.

Puteai sa abordezi altfel situatia, cand ii dai niste cod, scris direct pe forum, intr-un context imaginat de tine, la ce rezultate te astepti ?

De ce sa faci un query la fiecare comanda sa aflii level-ul?


exemplu:
@Khamoaset tu cum te-ai gandit sa abordezi problema ?
- cum trimiti comanda ?
- cum arata tabelul de mesaje/useri?
- admin-ul are legatura cu valoare din level ?

keen
Senior Member
Mesaje: 254
Membru din: Joi Ian 28, 2010 5:05 pm
Localitate: Br?ila
Contact:

Mesajde keen » Mar Sep 11, 2012 12:43 pm

elrukn scrie:Poti sa iti asumi responsabilitatea pentru prostia de cod scrisa.

Puteai sa abordezi altfel situatia, cand ii dai niste cod, scris direct pe forum, intr-un context imaginat de tine, la ce rezultate te astepti ?


Hai sa incerc sa iti explic mai detaliat ca sa intelegi "prostia de cod scrisa"

Khamoaset spune:
Khamoaset scrie:Salutare!
Vreau sa fac un chat(camera de conversatie) mesaj si coduri, adica daca este un membru ADMIN sa aiba coduri de acces la chat cam asa ceva:
/set <nume jucator> level <un nr. de nivel> de ex: /set Iulian90 level 45..... sau si alte coduri ca genul acesta... cum as putea face atunci cand introduc codul in <input /> numai ptr ADMIN si restul membrilor sa nu aiba acces la coduri.... ma poate ajuta cineva ? :roll: :?


Eu, fiind baiat mai bun, ii fac un cod si i-l dau. O structura de cod. Tu daca erai putin cu capul pe umeri si nu aveai caracter de carcotas, iti dadeai seama ca eu nu am cum sa stiu ce tabele are el in db sau cu ce nume se trimite prin post mesajul sau pe ce structura se bazeaza adminul lui.
Aici intervenea el si isi adapteaza codul.
Am si specificat: "//consideram ca in baza de date level-ul peste 100 este admin "
In alta ordine de idei, in loc sa te apuci sa critici , mai bine incerci sa imbunatatesti codul fara prea multe comentarii sau sa faci tu altul care sa functioneze.
Dar nu ai cum sa faci unul care sa functioneze pentru ca tu nu stii ce cod si ce baza de date are omul.... in schimb vii si faci (|) mare pe forum.
Ultima oară modificat Mar Sep 11, 2012 12:55 pm de către keen, modificat 1 dată în total.

elrukn
Average Member
Mesaje: 167
Membru din: Sâm Iul 28, 2007 11:16 pm
Localitate: Bucuresti

Mesajde elrukn » Mar Sep 11, 2012 12:53 pm

Nu asa ajuti. Acest forum nu este pentru solutii copy paste la probleme custom. Poti sa citesti regulamentul, daca ai timp.

Din nou, te rog sa nu imi vorbesti ca si cum as fi unul din prietenii tai de la bloc, din Braila.

keen
Senior Member
Mesaje: 254
Membru din: Joi Ian 28, 2010 5:05 pm
Localitate: Br?ila
Contact:

Mesajde keen » Mar Sep 11, 2012 1:02 pm

keen scrie:Eu, fiind baiat mai bun, ii fac un cod si i-l dau. O structura de cod. Tu daca erai putin cu capul pe umeri si nu aveai caracter de carcotas, iti dadeai seama ca eu nu am cum sa stiu ce tabele are el in db sau cu ce nume se trimite prin post mesajul sau pe ce structura se bazeaza adminul lui.
Aici intervenea el si isi adapteaza codul.
Am si specificat: "//consideram ca in baza de date level-ul peste 100 este admin "


Daca nici din ce am scris eu mai sus nu ai inteles ideea, cred ca acest fapt se numeste "insuficienta mentala".
Daca eu nu postam codul care in final il va ajuta in ceea ce vrea sa faca, tu nu mai postai nimic :). Iar daca postai, postai ca si mine un cod pe care el va trebui sa il adapteze.
La alte topicuri de genul incearca sa apesi pe x-ul ala din dreapta sau stanga ferestrei, bea un pahar de apa si apoi gaseste-ti cu totul alta ocupatie decat sa critici pe forum cand altii doresc sa ajute :)

O zi buna!
Orice vei mai scrie la adresa mea, va fi fara raspuns. Desi ti-am explicat ca nu puteam sa ii fac un cod functional ci doar o structura, pentru ca nu stiu ce are el facut pana acum, tu nu ai putut intelege chestia asta si ma vad nevoit a nu iti mai raspunde la nici un mesaj :)

quadmachine
Senior Member
Mesaje: 807
Membru din: Sâm Iul 10, 2010 4:58 pm
Localitate: Ploiesti
Contact:

Mesajde quadmachine » Mar Sep 11, 2012 2:43 pm

Ce rautate pe voi,putina inspiratie de la keen sper sa nu se supere.


Test

Cod: Selectaţi tot

Array ( [0] => /set [1] => level [2] => 100 [3] => user [4] => KungPowChicken )



Cod: Selectaţi tot

<form action="" method="post">
Comanda: <input type="text" name="command" />
<input type="submit" name="submit" value="send command" />
</form>

<?php

if(isset($_POST['submit'])){

     $command = $_POST['command'];

     $pow = explode(" ",$command);

              if(strcasecmp($pow[0],$pow[0]) == "/set"){

                             print_r($pow);


                               if($pow[1] == "level"){
                                 
                                 // /set level 10 user kungpowchicken

                                         $level = $pow[3];
                                         $username = $pow[4];

                                         mysql_query("UPDATE TABLE `table` SET `level` = `level` + $level WHERE `username` = '".$pow[4]."'");

                               }
                               
                               if($pow[1] == "ban"){
                               
                                // /set ban gigi
                                          mysql_query("UPDATE TABLE `table` SET `banned` = '1' WHERE `username` = '".$pow[3]."'");
                               }



              }

}

?>

Cod: Selectaţi tot

Nu confundati femeia de serviciu cu profesoara de Limba si Literatura Romana.

Avatar utilizator
Khamoaset
Average Member
Mesaje: 160
Membru din: Joi Iul 21, 2011 4:29 pm
Contact:

Mesajde Khamoaset » Mar Sep 11, 2012 7:53 pm

@quadmachine... nu-mi se insereaza daca am scris asa in input:

Cod: Selectaţi tot

/set level 19 user niag190


de ce ? :cry: :cry:

quadmachine
Senior Member
Mesaje: 807
Membru din: Sâm Iul 10, 2010 4:58 pm
Localitate: Ploiesti
Contact:

Mesajde quadmachine » Mar Sep 11, 2012 8:44 pm

Vezi si tu daca insereaza ceva,posibil sa fi scris eu gresit.

Cod: Selectaţi tot

$levelup = "UPDATE TABLE `table` SET `level` = `level` + $level WHERE `username` = '".$pow[4]."'";

         $dbinsert = mysql_query($levelup) or die(mysql_error());
         
         
         //Ce insereaza sau daca insereaza ceva.
                   print $levelup;




Cod: Selectaţi tot

<?php

if(isset($_POST['submit'])){

     $command = $_POST['command'];

     $pow = explode(" ",$command);
     
     //Este admin deci poate folosi si comenzi pe chat
     if($admin == TRUE){

              if(strcasecmp($pow[0],$pow[0]) == "/set"){
               
                // /set vip 1 user y
                  if($pow[1] == "vip"){
                                 
                                 // /set level 10 user kungpowchicken

                                 mysql_query("UPDATE TABLE `table` SET `vip` = '".$pow[3]."' WHERE `username` = '".$pow[4]."'");

                  }
               
                // /set level x user y
                  if($pow[1] == "level"){
                                 
                                 // /set level 10 user kungpowchicken

                                 mysql_query("UPDATE TABLE `table` SET `level` = '".$pow[3]."' WHERE `username` = '".$pow[4]."'");

                  }
                 
                  // /set ban gigel
                  if($pow[1] == "ban"){
                                 
                                  // /set ban gigi

                                  mysql_query("UPDATE TABLE `table` SET `banned` = '1' WHERE `username` = '".$pow[3]."'");

                  }
                 
                  // /set xp 1000 user gigel
                  if($pow[1] == "xp"){
                                 
                                  // /set ban gigi

                                  mysql_query("UPDATE TABLE `table` SET `xp` = '".$pow[3]."' WHERE `username` = '".$pow[4]."'");

                  }
                 
                  // /set gold 7000 user gigel
                  if($pow[1] == "gold"){
                                 
                                  // /set ban gigi

                                  mysql_query("UPDATE TABLE `table` SET `gold` = '".$pow[3]."' WHERE `username` = '".$pow[4]."'");

                  }



              }
     } else {
       
       //Nu este admin deci posteaza normal.
       
     }

}

?>

Cod: Selectaţi tot

Nu confundati femeia de serviciu cu profesoara de Limba si Literatura Romana.

Avatar utilizator
Khamoaset
Average Member
Mesaje: 160
Membru din: Joi Iul 21, 2011 4:29 pm
Contact:

Mesajde Khamoaset » Mie Sep 12, 2012 12:49 am

:D :D ms @quadmachine... imi merge acuma.
Puteti inchide topicul!


Înapoi la “PHP Avansat”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 2 vizitatori