Ir para conteúdo
Fórum Script Brasil

Ewerton M.

Membros
  • Total de itens

    15
  • Registro em

  • Última visita

Sobre Ewerton M.

Ewerton M.'s Achievements

0

Reputação

  1. Boa tarde galera. Trabalho com desenvolvimento PHP e em breve Python e estou com um probleminha aki na empresa... É o seguinte... Aki no trampo usamos Eclipse, até o momento era eu e o dono do sistema então, faziamos a conexão pelo SSH mesmo do Eclipse e resolvia os nossos problemas. Porém, agora aumentamos a equipe e além das medidas de segurança básica no servidor e no banco de dados precisamos especificar melhor o trabalho em equipe. Gostaria de saber qual a melhor sugestão para trabalho em equipe??? CVS, SVN, Mercurial, Git??? Se tiverem tutoriais, também ajuda. Com base na experiência de vocês farei a mudança aki. Obrigado desde já...
  2. Fala galera, Tenho um probleminha e gostaria da ajuda de vocês.. Estou desenvolvendo um sistema e na parte de cadastro o usuário digitará o CEP e será feito uma consulta no banco de dados pra trazer todos os dados do endereço. Pois bem, arquivo PHP que possui a consulta e trás os dados já está pronto e funcionando, ele recebe o cep por GET... O AJAX, eu peguei de acordo com o modelo da W3Schools e esse não funciona... Segue o código de ambos. A chamada no arquivo HTML. <tr> <td width="120"><font class="textoForm">CEP:</font></td> <td><input type="text" onblur="getCEP(this);" class="inputText" onkeypress="confereCep(this);" name="cep" maxlength="9" /></td> </tr> <tr> <td colspan="2" align="right"><a href="">Não sei o meu CEP?</a></td> </tr> <tr id="endCliente" style="display:none;"> <td width="120"><font class="textoForm">Logradouro:</font></td> <td><input type="text" id="logCliente" class="inputText" name="logradouro" /></td> </tr> <tr id="endCliente" style="display:none;"> <td width="120"><font class="textoForm">Número:</font></td> <td><input type="text" id="numCliente" class="inputText" name="numero" /></td> </tr> A função JS q está num arquivo chamado ajax.js function getCEP(str) { if(str=="") { document.getElementById("endCliente").style.display=""; return; } if(window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("endCliente").innerHTML=xmlhttp.responseText; } } xmlhttp.open("GET","lib/ajaxCEP.php?cep="+str,true); xmlhttp.send(); } E por fim, o arquivo ajaxCEP.php que é o responsável pela consulta e por trazer os dados... <?php if($_GET['cep']){ $_cep = $_GET['cep']; } if(strstr($_cep,'-',true)) { $i = explode('-',$_cep); $cep = $i[0].$i[1]; } else { $cep = $_cep; } $sqlCEP = 'SELECT endereco.id_endereco,endereco.id_bairro,endereco.cep,endereco.logradouro,endereco.complemento, bairro.id_bairro,bairro.id_cidade,bairro.bairro, cidade.id_cidade,cidade.id_uf,cidade.cidade, uf.id_uf,uf.sigla,uf.uf FROM endereco INNER JOIN bairro ON(endereco.id_bairro = bairro.id_bairro) INNER JOIN cidade ON(bairro.id_cidade = cidade.id_cidade) INNER JOIN uf ON(cidade.id_uf = uf.id_uf) WHERE endereco.cep = ?'; $queryCEP = DB::getConn()->prepare($sqlCEP); $queryCEP->execute(array($cep)); $queryCEP->setFetchMode(PDO::FETCH_BOTH); $result = $queryCEP->fetch(); $countCEP = $queryCEP->rowCount(); if($countCEP == 1) { echo ' &lt;script> alert("Oi"); document.getElementById("endCliente").style.display="block"; document.getElementById("logCliente").value="'.$result['logradouro'].'"; </script> '; } A chamada no navegador ocorre da seguinte forma ajaxCEP.php?cep=11111-111 ou ajaxCEP.php?cep=11111111 Acredito que o problema esteja no AJAX e na chamada dele...
  3. Boa tarde galera... Tenho uma dúvida referente a AJAX, tenho um sistema q já está no ar e que recentemente comecei a colocar recursos de AJAX nele, era só PHP... Pois bem, quando o usuário clica num link quebrado ou que não funcione, gostaria de direcionar ele para uma página de erro. Segue o meu AJAX function carregar(pageContent) { var xmlhttp; if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("conteudo").innerHTML = xmlhttp.responseText; } } xmlhttp.open("GET",pageContent,true); xmlhttp.send(); } O AJAX funciona, se a página existir, caso a página não exista, o usuário fica clicando que nem um João Bobo q não sai do lugar... Uma outra situação q eu gostaria da ajuda de vocês, dentro do mesmo assunto é o seguinte. Eu criei o arquivo erro404.php na raiz do projeto, porém, eu trabalho com até 3 níveis de diretório. Ex.: view -> gerente -> cliente -> homeg_cliente.tpl.php Como eu faço esse direcionamento, tendo em vista q o erro pode vir a ocorrer em qualquer nível de diretório do sistema e ele tem q direcionar pra raiz dinamicamente?! Obrigado a todos e boa tarde.
  4. Boa tarde galera... Estou criando uma função que passará valores de uma página para Clipboard(Ctrl+C), porém, preciso de algo que passe os valores de uma TAG HTML, mais precisamente <SPAN> para o meu ActionScript... Pra função funcionar só preciso disso... Esse processo será realizado quando um botão for pressionado. Obs.: Tentei usar o Zeroclipboard e o ZClip, porém, nenhum dos dois atende a minha necessidade... Por isso optei por criar a minha função de copiar para a área de transferência... Obrigado a todos...
  5. Fala galera... Gostaria da ajuda de vocês mais uma vez... Através do curso de PHP que fiz aprendi um modelo de loja virtual totalmente estruturado, apesar de ser legalzinho quero usar a estrutura MVC e refazer essa loja... Pois bem, quando eu trabalho com ORM como meio de conexão, funciona, porém, aqui na empresa não querem ORM, infelizmente, querem PDO com Prepared Statement. (Eu sei, eu sei... Também não entendi o motivo, mas infelizmente tenho que acatar...). RSRSRS Vamos lá, a estrutura que eu uso de pastas: lojavirtual/ app/ admin/ modules/ Clientes.php AdminController.php AdminView.php config/ xml/ ini/ config.ini lib/ Main.class.php StaffLoja.class.php views/ admin/ clientes/ novoCliente.tpl.php lerCliente.tpl.php alterarCliente.tpl.php deletarCliente.tpl.php plugin/ css/ js/ img/ inde.php admin.php bootstrap.php Vamos aos principais arquivos... Que com o Doctrine funcionava perfeitamente, mas tive que readaptar para o PDO com Prepared Statement... bootstrap.php <?php /* * Com o adminAppLoad, eu chamo os meus arquivos de VIEW e CONTROLLER. * Esses arquivos serao responsaveis por direcionar os meus arquivos. */ function adminAppLoad($classe){ $dir = dirname(__FILE__); $arquivo = "$dir/app/admin/$classe.php"; if(file_exists($arquivo)){ require_once($arquivo); return true; } } /* * Com adminModLoad eu chamo as minhas regras de negocio, especifica para * cada um dos Models. */ function adminModLoad($classe){ $dir = dirname(__FILE__); $arquivo = "$dir/app/admin/modules/$classe.php"; if(file_exists($arquivo)){ require_once($arquivo); return true; } } /* * Nesse metodo eu chamo as minhas classes dentro de /lib/ * A partir do classload é possivel carregar a classe de Banco. * A mesma que carregara toda a minha aplicacao. */ function libLoad($classe){ $dir = dirname(__FILE__); $arquivo = "$dir/lib/$classe.class.php"; if(file_exists($arquivo)){ require_once($arquivo); return true; } } //Carrego o meu metodo adminAppLoad. spl_autoload_register('adminAppLoad'); //Carrego o emu metodo adminModLoad. spl_autoload_register('adminModLoad'); //Carrego o meu metodo libLoad. spl_autoload_register('libLoad'); /* *Aqui eu carrego a minha classe de conexao ao DB, *Aqui eu pego os valores da Array e coloca no DSN. */ $config = parse_ini_file('config/ini/config.ini'); $dsn = "{$config['driver']}:host={$config['host']};dbname={$config['banco']}"; $conn = new PDO($dsn,$config['usuario'],$config['senha']); Main.class.php <?php /** * Desenvolvimento - Loja Virtual * Data: 13/10/2011 * @author Ewerton Melo de Souza * Descrição: Possui os métodos responsáveis pelas * operações padrões de CRUD. * Esse CRUD será requerido por todo o sistema, possuindo uma estrutura padrão. */ class Main{ private $conn; function __construct(){} //Metodo generico para gravar informacoes no DB function novo($tabela,$dados){ //Executo um foreach para separar as colunas de valores... foreach ($dados as $coluna=>$valor){ //Passa as colunas para um Array... $colunas[] = "`$coluna`"; //Passa os valores para um array... $valores[] = $valor; /** *===============================HOLDERS============================= *$holders[] = "?" *Como usamos o Prepared Statement e estamos inserindo os valores *dinamicamente, precisamos colocar dentro do VALUE as `interrogacoes` *correspondetes a cada campo. Desta forma, criamos um Array contendo *o valor de `?` *=================================================================== */ $holders[] = "?"; } /** *Faco a implusao dos meus dados, pegando o meu Array e convertendo em *Strings, separando por virgulas. */ $colunas = implode(', ',$colunas); $holders = implode(', ',$holders); //Aqui eu chamo o $holders[], em VALUES da minha Query $sql = "INSERT INTO $tabela ($colunas) VALUES ($holders)"; //Preparo meu SQL para ser executado atraves da variavel $sql $query = $this->conn->prepare($sql); /** *Aqui em execute(), chamamos a nossa Array que realmente possui algum valor. *Desta forma, toda vez que a minha Array $valores for executada, ele ira *inserir uma valor em cada '?' da $holders[] dentro de VALUES da minha Query. */ $query->execute($valores); } //Metodo generico para ler informacoes no DB function ler($tabela,$colunas,$cond=null){ /** *Aqui crio a Query que sera chamada. Nela usamos valores dinamicos para *serem inseridos em minha variavel $sql. */ $sql = "SELECT $colunas FROM $tabela"; //SE $cond não estiver vazia... if(!empty($cond)){ /** *Concatena em $sql WHERE $cond. Ficaria da seguinte *forma, o campo $sql concatenado * SELECT $colunas FROM $tabela WHERE $cond */ $sql .= " WHERE id = $cond"; } //Preparo meu SQL para ser executado atraves da variavel $sql $query = $this->conn->prepare($sql); //Executo meu objeto que esta com a query SQL preparada... $query->execute(); /** *Com o metodo fetchAll(), eu listo todos os meus valores da Array. */ $result = $query->fetchAll(); //Por se tratar de uma consulta, preciso retornar o meu objeto... return $result; } //Metodo generico para alterar informacoes no DB function alterar($tabela,$dados,$id){ /** *Aqui crio a Query que sera chamada. Nela usamos valores dinamicos para *serem inseridos em minha variavel $sql. */ foreach($dados as $coluna => $valor) { $colunas[] = "`$coluna` = ?"; $valores[] = $valor; } $valores[] = $id; $colunas = implode(', ', $colunas); /** *Com a '?' na minha condicao id eu passarei os valores atraves de um *Prepared Statement */ $sql = "UPDATE $tabela SET $colunas WHERE id = ?"; //Preparo meu SQL para ser executado atraves da variavel $sql $query = $this->conn->prepare($sql); $query->execute($valores); } //Metodo generico para deletar informacoes no DB function deletar($tabela,$id){ //Preparo meu SQL para ser executado atraves da variavel $sql //O '?' sera chamado atraves de um Prepared Statement $sql = "DELETE FROM $tabela WHERE id = ?"; //Preparo meu SQL para ser executado atraves da variavel $sql $query = $this->conn->prepare($sql); //Executo a minha Query passando o meu valor de $id. $query->execute(array($id)); } } Clientes.php ?php class Clientes{ private $db; private $staff; function __cnstruct(){ $this->db = new Main(); $this->staff = new StaffLoja(); } //Método para incluir um novo cliente na base. function novoCliente(){ try{ if($_POST){ $dados['nome'] = $_POST['nome']; $dados['doc'] = $_POST['doc']; $dados['nascimento'] = $_POST['nascimento']; $dados['endereco'] = $_POST['endereco']; $dados['numero'] = $_POST['numero']; $dados['compl'] = $_POST['compl']; $dados['bairro'] = $_POST['bairro']; $dados['cidade'] = $_POST['cidade']; $dados['cep'] = $_POST['cep']; $dados['uf'] = $_POST['uf']; $dados['ddd1'] = $_POST['ddd1']; $dados['fone1'] = $_POST['fone1']; $dados['ddd2'] = $_POST['ddd2']; $dados['fone2'] = $_POST['fone2']; $dados['ddd3'] = $_POST['ddd3']; $dados['fone3'] = $_POST['fone3']; $dados['email'] = $_POST['email']; $dados['username'] = $_POST['username']; $pass = $_POST['password']; $confirmpass = $_POST['confirmpassword']; /* //Retorno do método que faz a verificação e criptografa a senha. $pass = $this->staff->authPassword($pass,$confirmpass); */ $dados['password'] = $_POST['password']; $dados['ativo'] = 1; $dados['cad_user'] = 1; if($dados){ $this->db->novo('cliente', $dados); } } }catch(Exception $e){ echo $e->getMessage() . "<br><br>"; echo $e->getTrace() . "<br><br>"; } } function lerCliente(){ $result = $this->db->ler('cliente','*'); return $result; } function alterarCliente($id){ if($_POST){ $this->db->alterar('cliente', $_POST, $id); echo "<meta http-equiv='refresh' content='0; url=index.php?module=noticias&action=readNoticias'>"; } return $this->db->see('cliente',$id); } function deletarCliente($id){ $this->db->deletar('cliente',$id); } } novoCliente.tpl.php <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <link rel="StyleSheet" href="views/plugin/css/estilos.css" type="text/css" media="all" /> <title>Cardios | Admin - Início</title> </head> <body> <div id="mainMenu"> <div> <ul id="menu"> <li><a href="admin.php">Início</a></li> <li><a href="admin.php?module=usuarios&action=lerUsuario">Adm. de Usuários</a></li> <li><a href="admin.php?module=clientes&action=lerCliente">Adm. de Clientes</a></li> <li><a href="admin.php?module=produtos&action=lerProduto">Adm. de Produtos</a></li> <li><a href="admin.php?module=relatorios&action=lerRelatorios">Adm. de Relatórios</a></li> <li><a href="admin.php?module=logs&action=lerLogs">Adm. de Logs</a></li> <li><a href="admin.php?module=ajuda&action=lerAjuda">Ajuda</a></li> </ul> </div> </div> <div id="menuEsquerda"> <li id="itemMenuEsquerdo"><a href="admin.php?module=contas&action=lerMinhaConta" style="text-decoration:none; color:#000000;">Minha conta</a> <li id="itemMenuEsquerdo"><a href="admin.php?module=logs&action=lerMeusLogs" style="text-decoration:none; color:#000000;">Meus Logs</a> <li id="itemMenuEsquerdo"><a href="admin.php?module=builds&action=moduloConstrucao" style="text-decoration:none; color:#000000;">Adm. de Conteúdo</a> <li id="itemMenuEsquerdo"><a href="admin.php?module=login&action=logoff" style="text-decoration:none; color:#000000;">Sair</a> </div> <div id="divCentral"> <form action="" method="post"> <table border="0"> <tr> <td width="450" colspan="4" bgcolor="#dddcdc" align="center"><font face="verdana" size="2.0em"><b>Cadastro de Cliente</b></font></td> </tr> <tr> <td colspan="2" width="150" bgcolor="#dddcdc"><font face="verdana" size="1.8em"><b>Nome Completo</b></font></td> <td colspan="2"> <input type="text" name="nome" size="50" maxlenght="5" /> </td> </tr> <tr> <td colspan="2" width="150" bgcolor="#dddcdc"><font face="verdana" size="1.8em"><b>CPF/CNPJ</b></font></td> <td colspan="2"> <input type="text" name="doc" size=30" maxlenght="5" /> </td> </tr> <tr> <td colspan="2" width="150" bgcolor="#dddcdc"><font face="verdana" size="1.8em"><b>Data de Nascimento</b></font></td> <td colspan="2"> <input type="text" name="nascimento" size=20" maxlenght="5" /> </td> </tr> <tr> <td colspan="2" width="150" bgcolor="#dddcdc"><font face="verdana" size="1.8em"><b>Endereço</b></font></td> <td colspan="2"> <input type="text" name="endereco" size="50" maxlenght="5" /> </td> </tr> <tr> <td colspan="2" width="150" bgcolor="#dddcdc"><font face="verdana" size="1.8em"><b>Número</b></font></td> <td colspan="2"> <input type="text" name="numero" size="10" maxlenght="5" /> </td> </tr> <tr> <td colspan="2" width="150" bgcolor="#dddcdc"><font face="verdana" size="1.8em"><b>Complemento</b></font></td> <td olspan="2" > <input type="text" name="compl" size="50" maxlenght="5" /> </td> </tr> <tr> <td colspan="2" width="150" bgcolor="#dddcdc"><font face="verdana" size="1.8em"><b>Bairro</b></font></td> <td colspan="2"> <input type="text" name="bairro" size="50" maxlenght="5" /> </td> </tr> <tr> <td colspan="2" width="150" bgcolor="#dddcdc"><font face="verdana" size="1.8em"><b>Cidade</b></font></td> <td colspan="2"> <input type="text" name="cidade" size="50" maxlenght="5" /> </td> </tr> <tr> <td colspan="2" width="150" bgcolor="#dddcdc"><font face="verdana" size="1.8em"><b>CEP</b></font></td> <td colspan="2"> <input type="text" name="cep" size="20" maxlenght="5" /> </td> </tr> <tr> <td colspan="2" width="150" bgcolor="#dddcdc"><font face="verdana" size="1.8em"><b>UF</b></font></td> <td colspan="2"> <select name="uf"> <option value="AC"></option> <option value="AC">AC</option> <option value="AL">AL</option> <option value="AP">AP</option> <option value="AM">AM</option> <option value="BA">BA</option> <option value="CE">CE</option> <option value="DF">DF</option> <option value="ES">ES</option> <option value="GO">GO</option> <option value="MA">MA</option> <option value="MT">MT</option> <option value="MS">MS</option> <option value="MG">MG</option> <option value="PA">PA</option> <option value="PB">PB</option> <option value="PR">PR</option> <option value="PE">PE</option> <option value="PI">PI</option> <option value="RJ">RJ</option> <option value="RN">RN</option> <option value="RS">RS</option> <option value="RO">RO</option> <option value="RR">RR</option> <option value="SC">SC</option> <option value="SP">SP</option> <option value="SE">SE</option> <option value="TO">TO</option> </select> </td> </tr> <tr> <td colspan="1" width="150" bgcolor="#dddcdc"><font face="verdana" size="1.8em"><b>Telefone Residencial</b></font></td> <td> <input type="text" name="ddd1" size="10" maxlenght="5" /> </td> <td> <input type="text" name="fone1" size="20" maxlenght="5" /> </td> </tr> <tr> <td colspan="1" width="150" bgcolor="#dddcdc"><font face="verdana" size="1.8em"><b>Telefone Celular</b></font></td> <td> <input type="text" name="ddd2" size="10" maxlenght="5" /> </td> <td> <input type="text" name="fone2" size="20" maxlenght="5" /> </td> </tr> <tr> <td colspan="1" width="150" bgcolor="#dddcdc"><font face="verdana" size="1.8em"><b>Telefone Comercial</b></font></td> <td> <input type="text" name="ddd3" size="10" maxlenght="5" /> </td> <td> <input type="text" name="fone3" size="20" maxlenght="5" /> </td> </tr> <tr> <td colspan="2" width="150" bgcolor="#dddcdc"><font face="verdana" size="1.8em"><b>E-Mail</b></font></td> <td colspan="2"> <input type="text" name="email" size="50" maxlenght="5" /> </td> </tr> <tr> <td colspan="2" width="150" bgcolor="#dddcdc"><font face="verdana" size="1.8em"><b>Usuário</b></font></td> <td colspan="2"> <input type="text" name="username" size="20" maxlenght="5" /> </td> </tr> <tr> <td colspan="2" width="150" bgcolor="#dddcdc"><font face="verdana" size="1.8em"><b>Senha</b></font></td> <td colspan="2"> <input type="password" name="password" size="20" maxlenght="5" /> </td> </tr> <tr> <td colspan="2" width="150" bgcolor="#dddcdc"><font face="verdana" size="1.8em"><b>Confirmar Senha</b></font></td> <td colspan="2"> <input type="password" name="confirmpassword" size="20" maxlenght="5" /> </td> </tr> <tr> <td colspan="2" width="150" bgcolor="#dddcdc"><font face="verdana" size="1.8em"><b>Conta Ativa</b></font></td> <td colspan="2"> <select name="ativo"> <option value="1">Sim</option> <option value="2">Não</option> </select> </td> </tr> <tr> <td colspan="4" width="150" align="center"> </td> </tr> <tr> <td colspan="4" width="150" align="center"> <input type="submit" value="Cadastrar Cliente" /> <input type="reset" value="Limpar dados" /> </td> </tr> <input type="hidden" value="1" name="cad_user" /> </table> </form> </div> </body> </html> chamo as páginas da seguinte forma: admin.php?module=clientes&action=lerCliente admin.php?module=clientes&action=novoCliente Conclusão, quando vou cadastrar um novo cliente, dá o seguinte erro: Fatal error: Call to a member function novo() on a non-object in C:\xampp\htdocs\site\lojavirtual\app\admin\modules\Clientes.php on line 46 Sabem me dizer porque??? As páginas se encontram, porém, ele está requerendo alguma coisa, em algum lugar que eu não estou entendendo...
  6. Terminei o curso de PHP da 4Linux no final do mês passado... Essa formação é nova e pra variar recebi um e-mail deles ante-ontem, pra mim só interessaria fazer o terceiro módulo... Porém, posso adiantar que o curso é EXCELENTE com todas as letras. Tive aulas com a Carla e com o Klaus, este último que deu palestras no FISL 12 e recomendo. Muito bom mesmo... Só uma coisa, que acredito ser o mínimo, tenha conhecimento sobre Unix, saiba no mínimo o que é chmod 777 -R /var/www ou mkdir, ou rm -rf, enfim... Não chegue lá só sabendo ligar o computador e desligar, (quando falamos de GNU/Linux), pra depois não sair falando mal da escola, pois teve algumas pérolas que fizeram curso comigo e que fizeram isso... Fiz lá também a formação de LPI e vou voltar em breve para fazer de PostgreSQL e Apache... O nível da 4Linux é diferenciado, pois os professores de lá são professores e, quando não estão dando aula eles estão prestando consultoria. Fiz cursos também no SENAI, na IMPACTA e na GREEN, e no meu conceito, a melhor escola é a 4Linux!!!
  7. Boa tarde galera... Posso me estender um pouco na explicação, mas acredito que a solução seja simples. Estou desenvolvendo uma aplicação com PHP, framework MVC e ORM Doctrine. Pois bem, meu sofrimento é o seguinte. Na minha view ('home.tpl.php') eu preciso chamar cada um dos módulos, sendo cada um deles dentro de uma Tab que eu usei JQuery UI, porém, não faço a mínima idéia de como chamar essas views dentro da tab. Segue a home.tpl.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"> <title>Sistema Zero | Admin</title> <link type="text/css" href="plugin/css/custom-theme/jquery-ui-1.8.15.custom.css" rel="stylesheet" /> &lt;script type="text/javascript" src="plugin/js/jquery-1.6.2.min.js"></script> &lt;script type="text/javascript" src="plugin/js/jquery-ui-1.8.15.custom.min.js"></script> &lt;script type="text/javascript"> $(function(){ // Tabs $('#tabs').tabs(); }); </script> <style type="text/css"> /*demo page css*/ body{ font: 62.5% "Trebuchet MS", sans-serif; margin: 50px;} .demoHeaders { margin-top: 2em; } #dialog_link {padding: .4em 1em .4em 20px;text-decoration: none;position: relative;} #dialog_link span.ui-icon {margin: 0 5px 0 0;position: absolute;left: .2em;top: 50%;margin-top: -8px;} ul#icons {margin: 0; padding: 0;} ul#icons li {margin: 2px; position: relative; padding: 4px 0; cursor: pointer; float: left; list-style: none;} ul#icons span.ui-icon {float: left; margin: 0 4px;} </style> </head> <body> <p style="font-weight: bold; margin: 2em 0 1em; font-size: 2.0em;">Sistema Zero</p> <hr> <a style="font-weight: bold; margin: 2em 0 1em; font-size: 1.3em;" href="">Logout</a> <hr> <!-- Tabs --> <h2 class="demoHeaders">Administração do sistema</h2> <div id="tabs"> <ul> <li><a href="#tabs-1">Home</a></li> <li><a href="#tabs-2">Usuários</a></li> <li><a href="#tabs-3">Chat</a></li> <li><a href="#tabs-4">Cobrança</a></li> <li><a href="#tabs-5">CRM</a></li> <li><a href="#tabs-6">Relatórios</a></li> </ul> <div id="tabs-1"> </div> <div id="tabs-2"> </div> <div id="tabs-3"> </div> <div id="tabs-4"> </div> <div id="tabs-5"> </div> <div id="tabs-6"> </div> </div> </body> </html> Segue o AdminView.php <?php class AdminView{ public function load($file, $data = null){ include("views/admin/$file.tpl.php"); } } Segue o AdminController.php <?php class AdminController{ public $view; public $users; public function __construct(){ $this->view = new AdminView; $this->users = new Users; if(isset($_GET['module']) && isset($_GET['action'])){ $module = $_GET['module']; $action = $_GET['action']; if(isset($_GET['id'])){ $data = $this->$module->$action($_GET['id']); }else{ $data = $this->$module->$action(); } $this->view->load("$module/$action", $data); }else{ $this->view->load('home'); } } } Um detalhe importante. Se eu chamar os arquivos pelo seu caminho, eles carregam tranquilamente. Exemplo: http://localhost/app...ion=createUsers Conto com a ajuda de vocês galera. Boa tarde...
  8. Obrigado vini_loock, funcionou... Só tirei as variáveis que estavam fora do laço e criei e inicializei elas direto no FOR, conforme seu exemplo... Dai funcionou, vendo seu exemplo ficou claro. Na verdade ele estava criando os arquivos de 1 a 5, porém, como ele estava fora do laço ele não estava zerando o valor a cada nova pasta criada, ele assunia um valor fixo... É a mesma coisa que um contador... Obrigado pelo esclarecimento!!! <?php for($pasta = 0;$pasta<=5;$pasta++){ $dir= "Xel"; mkdir ("C:/Temp/$dir" . $pasta, 0777 ); echo "Pasta <b>$dir" . $pasta . "</b> criada com sucesso!!<br>"; for($arquivo = 0;$arquivo<=5;$arquivo++){ $abrir = fopen("C:/Temp/$dir" . $pasta. "/" . $arquivo. ".txt", "a+"); fwrite($abrir, "ESTUDANDO PHP..."); fclose($abrir); } } ?>
  9. Fala Vini_loock Então, corrigi esse erro, porém, a falha permanece... Segue o código: <?php $pasta= 1; $arquivo= 1; for($pasta;$pasta<=5;$pasta++){ $dir= "Xel"; mkdir ("C:/Temp/$dir" . $pasta, 0777 ); echo "Pasta <b>$dir" . $pasta . "</b> criada com sucesso!!<br>"; for($arquivo;$arquivo<=5;$arquivo++){ $abrir = fopen("C:/Temp/$dir" . $pasta. "/" . $arquivo. ".txt", "a+"); fwrite($abrir, "ESTUDANDO PHP..."); fclose($abrir); } } ?>
  10. Boa tarde galera... Estou fazendo um trabalho para o meu curso que consiste em criar um laço de repetição que crie pastas e dentro dessa pasta crie determinada quantidade de arquivos... Porém, estou apanhando!!! Consegui criar as pastas e consegui criar os arquivos dentro da 1º Pasta, porém, as demais, eu não consigo!!! O que fazer??? Segue o código: <?php $pasta= 1; $arquivo= 1; for($pasta;$pasta<=5;$pasta++){ $dir= "Xel"; mkdir ("C:/Temp/$dir" . $pasta, 0777 ); echo "Pasta <b>$dir" . $pasta . "</b> criada com sucesso!!<br>"; } for($arquivo;$arquivo<=5;$arquivo++){ $abrir = fopen("C:/Temp/$dir" . $pasta. "/" . $arquivo. ".txt", "a+"); fwrite($abrir, "ESTUDANDO PHP..."); fclose($abrir); } } ?> Obrigado galera!!!
  11. ESerra... Muito obrigado... Funcionou!!!
  12. Boa tarde galera... Estou com uma dificuldade em realizar a consulta no DB... Essa tela é apenas para consulta, da erro na linha do "while"... Se alguém puder ajudar... <?php $conecta = mysql_connect('localhost','root','********'); if(!$conecta) die("Não foi possível se conectar no Banco de Dados.<br>" . mysql_error()); else echo "Conexão realizada com sucesso.<br>"; $db = mysql_select_db('consulta'); if(!$db) die("Houve um erro ao tentar se conectar ao banco de dados."); else echo "Selecionou com sucesso o seu Banco de dados.<br>"; $result = "SELECT * FROM estudando"; while($exec = mysql_fetch_array($result)){ echo "Código: " . $exec['cod'] . " " . "Nome: " . $exec['nome'] . " : " . "E-Mail: " . $exec['email'] . '<br>'; } $fecha = mysql_close($conecta); ?>
  13. Fala galera, segue eu com a minha sina... Não mexi com o chat nesses últimos dias, mas agora, voltei... Ontem fuçando na net encontrei um chat de atendimento no qual vou modificar, com isso peço que desconsiderem o chat acima... Porém, nesse outro script livre que encontrei ainda tenho o mesmo problema... Vou colocar aqui todo o script do Chat Segue a parte do cliente... CHAT.JS <!--php--><div class='highlight_syntax_top'>PHP</div><div class='highlight_syntax_main'><!--php1--><div class="php">//dispara a função que lê o servidor window.onload = function(){ window.setInterval('ChecaMsg()', 2000); } //envia uma nova mensagem function EnviaMsg(msg){ ExibirMsg("<p><b>Você:</b> "+msg+"</p>"); var url="novaMsg.php?msg="+encodeURIComponent(msg); document.getElementById("msg").value=''; requisicaoHTTP("GET",url,true); } //busca novas mensagens function ChecaMsg(){ requisicaoHTTP("GET","checaMsg.php",true); } function ExibirMsg(msg){ var saida = document.getElementById("texto"); var nova = document.createElement('div'); nova.innerHTML = msg; saida.appendChild(nova); saida.scrollTop = 100000; // rolagem da pagina automática. } //exibe as novas mensagens function trataDados(){ var info = ajax.responseText; if(info) ExibirMsg(info); } </div><!--php2--></div><!--php3--> CHECAMSG.PHP <!--php--><div class='highlight_syntax_top'>PHP</div><div class='highlight_syntax_main'><!--php1--><div class="php"><?php $gmtDate = gmdate("D, d M Y H:i:s"); header("Expires: {$gmtDate} GMT"); header("Last-Modified: {$gmtDate} GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); header("Content-Type: text/html; charset=ISO-8859-1"); include "conecta.php"; $mensagens=""; $res = mysqli_query($con,"select nome,msg from atendimento where origem='A' and msg<>''"); for($i=0;$i<mysqli_num_rows($res);$i++){ $dados = mysqli_fetch_row($res); $nome = $dados[0]; $msg = $dados[1]; $mensagens .="<p style="background-color:#E9E9E9"><b>" . ucwords($nome) . ": </b> " . strtoupper($msg) . "</p>"; $res2 = mysqli_query($con,"delete from atendimento where origem='A' and msg='$msg'"); } echo $mensagens; ?> </div><!--php2--></div><!--php3--> NOVAMSG.PHP <!--php--><div class='highlight_syntax_top'>PHP</div><div class='highlight_syntax_main'><!--php1--><div class="php"><?php session_start(); $idConversa = session_id(); include "conecta.php"; import_request_variables("gc"); if(!empty($msg)){ //verifica se a sessão ainda está aberta $res = mysqli_query($con, "select * from atendimento where nome='$idConversa' and msg=''"); if(mysqli_num_rows($res)>0){ $res = mysqli_query($con,"insert into atendimento(nome,origem,msg) values('$nomeCliente','C','$msg')"); } else{ echo "&lt;script>alert('Atendimento já encerrado!'); window.location='indexCliente.php';</script>"; } } ?> </div><!--php2--></div><!--php3--> INDEXCLIENTE.PHP <!--php--><div class='highlight_syntax_top'>PHP</div><div class='highlight_syntax_main'><!--php1--><div class="php"><?php ob_start(); ?> <?php //inicio dos comandos para o chat. include "conecta.php"; // incluo a conexão com o banco de dados. session_start(); //inicio a sessão $idConversa = session_id(); //obtenho a identificação da sessão iniciada //verifico se há algum atendente online. $at = mysqli_query($con,"select nome from atendimento where origem='A' and msg=''"); //usamos as letras A para atendendo e C para mensagens enviadas pelo usuário. if(mysqli_num_rows($at)==0){ echo "<html><body>"; echo "<h2 align=center>No momento não existem usuários onlines.</h2>"; echo "</body></html>"; exit(); } else{ $dados = mysqli_fetch_row($at); $atend = $dados[0]; //verifico se o atendente está ocupado. $oc = mysqli_query($con,"select * from atendimento where origem='C' and nome <> '$idConversa'"); if(mysqli_num_rows($oc)>0){ echo "<html><body>"; echo "<h2 align='center'>O atendente está ocupado no momento.</h2>"; echo "</body></html>"; exit(); } } //exibe o formulário de login if(!isset($_POST["nome"]) || empty($_POST["nome"])){ ?> <!-- inicio aqui o conteudo html --> <html> <head> <title>Chat de atendimento Online</title> </head> <body> <center> <h2 style="color:#CCCCCC">Atendimento Online</h2> <form name="login" method="post" action="indexCliente.php"> <div style="background-color:#999999; color:#FFFFFF"> Seu nome: </div> <div style="background:#CCCCCC"> <input type="text" name="nome" maxlength="65" size="50" /> <input type="Submit" name="Submit" value="Entrar" /> </div> </form> </center> </body> </html> <!-- aqui termino o mode html do formulário de identificação --> <?php }//fecho o if de verificação de se foi ou não preenchido o login. else{ //inicia o chat $nome = ucfirst($_POST["nome"]); setcookie("nomeCliente", $nome); $ins = mysqli_query($con,"insert into atendimento(nome,origem,msg) values('$idConversa','C','')"); $ins = mysqli_query($con,"insert into atendimento(nome,origem,msg) values('$nome','C','[entrou no chat]')"); //fecho as linhas em php ?> <!-- reinicio os codigos html agora do chat --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Chat do atendente</title> &lt;script src="open.js"></script> &lt;script src="chat.js"></script> </head> <body> <h2 align="center">Você está no atendimento online</h2> <table width="100%" border="0" cellpadding="0" cellspacing="3"> <tr> <td bgcolor="#ECFFEC"> <div id="texto" style="width:100%; height:300px; overflow:auto"> <p style="background-color:#E9E9E9"><b><?php echo ucwords($nomeAtendente); ?>:</b> Olá <?php echo $nome; ?>, seja bem vindo ao nosso atendimento on-line, em que posso ser util?</p> </div> </td> </tr> <tr> <td> <form action="java script:void%200" name="formAjax" onSubmit="EnviaMsg(this.msg.value); return false"> Sua Mensagem: <input type="text" name="msg" id="msg" size="50" maxlength="150" /> <input type="submit" name="Submit" value="Enviar" /> </form> </td> </tr> </table> <p align="right"><a href="java script:window.close();">Sair do Chat</a></p> </body> </html> <?php }//fecha o que resta ?> </div><!--php2--></div><!--php3--> Agora segue a parte do Atendente CHAT2.JS <!--php--><div class='highlight_syntax_top'>PHP</div><div class='highlight_syntax_main'><!--php1--><div class="php">// JavaScript Document //dispara a função que lê o servidor window.onload = function(){ window.setInterval('ChecaMsg()', 2000); } //envia uma nova mensagem function EnviaMsg(msg){ ExibirMsg("<p><b>Você:</b> "+msg+"</p>"); var url="novaMsg2.php?msg="+encodeURIComponent(msg); document.getElementById("msg").value=''; requisicaoHTTP("GET",url,true); } //busca novas mensagens function ChecaMsg(){ requisicaoHTTP("GET","checaMsg2.php",true); } function ExibirMsg(msg){ var saida = document.getElementById("texto"); var nova = document.createElement('div'); nova.innerHTML = msg; saida.appendChild(nova); saida.scrollTop = 100000; //rolagem automatica } function NovoAtendimento(){ var saida = document.getElementById("texto"); saida.innerHTML = ''; // limpa o texto do chat requisicaoHTTP("GET","excluiMsg2.php",true); } //atualiza texto do chat function trataDados(){ var info = ajax.responseText; if(info) ExibirMsg(info); } </div><!--php2--></div><!--php3--> CHECAMSG2.PHP <!--php--><div class='highlight_syntax_top'>PHP</div><div class='highlight_syntax_main'><!--php1--><div class="php"><?php ob_start(); $gmtDate = gmdate("D, d M Y H:i:s"); header("Expires:{$gmtDate}GMT"); header("Last-Modified: {$gmtDate}GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); header("Content-Type: text/html; charset=ISO-8859-1"); include "conecta.php"; $mensagens = ""; $res = mysqli_query($con, "select nome,msg from atendimento where origem='C' and msg <> ''"); for($i=0;$i<mysqli_num_rows($res);$i++){ $dados = mysqli_fetch_row($res); $nome = $dados[0]; $msg = $dados[1]; $mensagens .= "<p style="background-color:#E9E9E9"> <b>" . ucwords($nome) . ": </b> " . strtoupper($msg) . " </p>"; $res2 = mysqli_query($con, "delete from atendimento where origem='C' and msg='$msg'"); } if($mensagens!=""){ echo "$mensagens &lt;script>alert('Você recebeu uma mensagem');</script>"; } else{ echo ""; } ?> </div><!--php2--></div><!--php3--> INDEXATENDENTE.PHP <!--php--><div class='highlight_syntax_top'>PHP</div><div class='highlight_syntax_main'><!--php1--><div class="php"><?php ob_start(); ?> <?php include "conecta.php"; $log = mysqli_query($con,"select nome,email,senha from user where email='" . $_POST["email"] . "' and senha='" . $_POST["senha"] . "'"); $ver = mysqli_num_rows($log); $row = mysqli_fetch_row($log); $nomeAtendente = $row[0]; $email = $row[1]; $senhaChat = $row[2]; /* /////////////////////// definido aqui o nome de atendente e a senha essa parte pode ser alterada para buscar os dados em uma tabela.. ///////////////////////////// */ //exibe o formulário de login caso for verdade. if(!isset($_POST["senha"]) && !isset($_POST["email"]) || $_POST["senha"]!=$senhaChat && $_POST["email"]!=$email){ ?> <html> <body> <h2 align="center">Login do atendente</h2> <form action="indexAtendente.php" name="login" method="post"> <div align="center"> <p> E-mail: <input type="text" name="email" id="email" size="15"/><br /><br /> Senha: <input type="password" name="senha" id="senha" size="15" maxlength="15" /> </p> <p> <input name="iniciar" type="submit" id="Iniciar" value="Logar" /> </p> </div> </form> </body> </html> <?php }//fehca o if else{ ob_start(); //inicia o chat include "conecta.php"; $res = mysqli_query($con, "insert into atendimento(nome,origem,msg) values('$nomeAtendente','A','')"); setcookie("nomeAtendente", $nomeAtendente); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Chat do atendente</title> &lt;script src="open.js"></script> &lt;script src="chat2.js"></script> </head> <body> <h2 align="center">Atendimento via Chat</h2> <table width="100%" border="0" cellpadding="0" cellspacing="3"> <tr> <td bgcolor="#FFFF99"> <div id="texto" style="width:100%; height:300px; overflow:auto"></div> <div align=center id=sound></div> </td> </tr> <tr> <td> <form action="java script:void%200" name="formAjax" onSubmit="EnviaMsg(this.msg.value); return false"> Sua Mensagem: <input type="text" name="msg" id="msg" size="50" maxlength="150" /> <input type="submit" name="Submit" value="Enviar" /> </form> </td> </tr> </table> <p align="right"> <a href="java script:NovoAtendimento();">Finalizar Atendimento atual</a> | | <a href="logout.php">Encerrar Chat(Sair)</a> </p> </body> </html> <?php }//fecha else ?> </div><!--php2--></div><!--php3--> EXCLUIRMSG2.PHP <?php ob_start(); /*$gmtDate = gmdate("D, d M Y H:i:s"); header("Expires: {$gmtDate} GMT"); header("Last-Modified: {$gmtDate} GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); header("Content-Type: text/html; charset=ISO-8859-1");*/ include "conecta.php"; import_request_variables("c"); $res = mysqli_query($con,"delete from atendimento"); $res = mysqli_query($con,"insert into atendimento(nome,origem,msg) values('$nomeAtendente','A','')"); print "<center><img src='load.gif' /></center>"; ?> LOGOUT.PHP <?php $gmtDate = gmdate("D, d M Y H:i:s"); header("Expires:{$gmtDate}GMT"); header("Last-Modified: {$gmtDate}GMT"); header("ache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); include "conecta.php"; $res = mysqli_query($con,"delete from atendimento"); header("location:indexAtendente.php"); ?> OPEN.JS //iniciando a requisição http e criando o obj var ajax; var dadosUsuario; function requisicaoHTTP(tipo,url,assinc){ if(window.XMLHttpRequest){ ajax = new XMLHttpRequest(); } else if(window.ActiveXObject){ ajax = new ActiveXObject("Msxml2.XMLHTTP"); if(!ajax){ ajax = new ActiveXObject("Microsoft.XMLHTTP"); } } if(ajax){ iniciaRequisicao(tipo,url,assinc); } else{ alert("Não possui suporte a AJAX"); } } // inicializao objeto criado e envia os dados function iniciaRequisicao(tipo,url,bool){ ajax.onreadystatechange=trataResposta; ajax.open(tipo,url,bool); ajax.setRequestHeader("Content-Type", "application/x-www-form-urlecncoded; chanset=UTF-8"); //ajax.overrideMimeType("text/xml"); /* usado somente com mozila */ ajax.send(dadosUsuario); } function enviaDados(url){ criaQueryString(); requisicaoHTTP("POST",url,true); } function criaQueryString(){ dadosUsuario=""; var frm = document.forms[0]; var numElementos = frm.elements.length; for(var i=0;i<numElementos;i++){ if(i< numElementos-1){ dadosUsuario += frm.elements[i].name+"="+ encodeURIComponent(frm.elements[i].value)+"&"; }else{ dadosUsuario += frm.elements[i].name+"="+ encodeURIComponent(frm.elements[i].value); } } } function trataResposta(){ if(ajax.readyState==4){ if(ajax.status ==200){ trataDados(); }else{ alert("Problema na requisição com o objeto XMLHttpRequest."); } } } CONECTA.PHP <?php $host = "localhost"; //servidor de banco de dados $user = "root"; //usuario do banco de dados $senha = "xxxxx"; //senha do banco de dados $db = "sistema_chat"; //banco de dados $sqlconnect=mysql_connect($host, $user, $senha); if(!$sqlconnect) die("Não conectou com o banco de dados."); $sqldb=mysql_select_db("$db",$sqlconnect); if(!$sqldb) die("Não foi possivel selecionar a base de dados."); ?> Banco de dados... tabela de Atendimento. CREATE TABLE `atendimento` ( `id` int(11) NOT NULL auto_increment, `nome` varchar(80) NOT NULL, `origem` varchar(20) NOT NULL, `msg` text NOT NULL, PRIMARY KEY (`id`) ); tabela de Usuários. CREATE TABLE `user` ( `iduser` int(4) NOT NULL auto_increment, `nome` varchar(50) NOT NULL, `email` varchar(50) NOT NULL, `senha` varchar(32) NOT NULL, PRIMARY KEY (`iduser`) ); insert da tabela user.; INSERT INTO `user` VALUES (1, 'ewerton', '@', 'teste'); descrição dos arquivos do cliente chat.js // arquivo js que verifica as mensagens do cliente; checaMsg.php //responsavel em verificar se o atendente enviou a resposta novaMsg.php //faz a verificação se ainda está apberta a sessão e fechou informa que o atendimento foi encerrado. indexCliente.php // chat por si, e local de login. Descrição dos arquivos atendente chat2.js // arquivo js que verifica as mensagens do Atendente; checaMsg2.php //responsavel em verificar se o atendente enviou a resposta novaMsg2.php //faz a verificação se ainda está apberta a sessão e fechou informa que o atendimento foi encerrado. indexAtendente.php // chat por si, e local de login. Preciso a cada novo cliente que entrar no chat, que seja aberta uma nova janela... Como fazer isso??? No INDEXCLIENTE.PHP eu encontrei a parte que me possibilita aumentar a quantidade de cliente no chat através da seguinte linha... if(mysql_num_rows($oc)>3){ // <--- No padrão ele é 0, aqui eu alterei pra 3... echo "<html><body>"; echo "<h2 align='center'>O atendente está ocupado no momento.</h2>"; echo "</body></html>"; exit(); } Testei com essa modificação, porém, do lado do atendente ele recebe a mensagem do cliente 2, porém, ao responder, a mensagem só vai pro cliente 1... Como alterar isso... Vou remodelar o banco de dados pra que seja gravada as mensagens conforme cada novo cliente que entrar no chat, dando um ID pra cada um, mas preciso de uma ajuda nessa outra parte... Um abraço galera, se puderem me ajudar!!!
  14. Parte 1: http://www.videoaulasbrasil.com.br/php/cri...jquery-parte-1/ Parte 2: http://www.videoaulasbrasil.com.br/php/cri...jquery-parte-2/ Parte 3: http://www.videoaulasbrasil.com.br/php/cri...jquery-parte-3/ Ele já possui o modelo pronto para download, fato que fiz, para poupar tempo, porém, vou fazer algumas modificações... Se alguém puder dar uma força... Ainda não consegui encontrar nenhum material pra desenvolver esse problema, conforme questionei acima...
  15. Boa noite galera. Por favor, gostaria de saber se alguém possui algum script pronto ou saiba como se crie salas de chat para cada novo usuário??? Exemplo: O "técnico A" se logará no sistema e ficará disponível. Cliente A entrou no chat, abrirá uma janela para esse cliente com o "técnico A". Quando cliente B entrar no chat em vez dele entrar numa mesma sala ele entrará numa sala diferente com o "técnica A". Tornando assim a conversa privativa e se possível limitando a quantidade de clientes. Por exemplo, após entrar 5 clientes, não constará mais ninguém disponível e ele terá uma mensagem(quem sabe uma fila de espera)... Estou criando um chat para a empresa onde trabalho, como ponto de partida peguei um chat pronto desenvolvido em 3 partes pelo site Video-Aulas Brasil e modificarei ele para se adequar as minhas necessidades... Um abraço a todos...
×
×
  • Criar Novo...