SimS™ 0 Denunciar post Postado Fevereiro 13, 2010 Fala ai pessoal, beleza? To com uma dúvida aqui referente a um script que estou fazendo. Já tinha a maioria das páginas prontas pois fiz o script a alguns meses atrás e faz 1 a 2 meses que estou reformulando-o, atualizando com um novo layout e mais algumas funções. É um script que utilizo para controle de meus servidores de jogos (SA-MP) no meu host. Por esse painel posso instalar/deletar/configurar servidores, criar usuários para acessá-los, há um sistema de validação de conta por código que o script gera, sistema de vencimento, etc. Nessa nova versão, estarei implementando outras funções, como execução de outros aplicativos (tais como Teamspeak, outros tipos de jogos, etc), tudo via painel, para evitar de ter de entrar toda vez no root ou se o auto-start não funcionar, poder ter outra alternativa de ligá-los. Começo com uma dúvida básica. Logo quando o administrador acessar a página, terá 2 tabelas mais ou menos desta forma. ________________________________________________________________________________________ Ultimos 5 usuários adicionados Usuario Senha Porta Vencimento User1 1234 7777 31/12/2009 ### ### ### ### ### ### ### ### ________________________________________________________________________________________ Próximos vencimentos Usuario Senha Porta Vencimento User1 1234 7777 31/12/2009 ### ### ### ### ### ### ### ### ________________________________________________________________________________________ No caso, nos ultimos 5 usuários adicionados, gostaria de saber como posso puxar os ultimos 5 que foram adicionados? (Pensei em listá-los, de acordo com o ID, em ordem decrescente, porém, não lembro como posso fazer tal coisa, não sou expert mas posso dizer que sou intermediário) E nos próximos vencimentos, gostaria de saber como posso puxar os vencimentos que estejam próximos da data do dia (tipo, referente a data de hoje [13/02/10], ai um venceria dia 15, outro no dia 19, e assim vai, mas algo tipo, puxar até 5 dias depois da data de hoje) Teria como alguma alma caridosa me ajudar nesse problema? :P Obrigado a todos, Abraços Compartilhar este post Link para o post Compartilhar em outros sites
Good 4 Denunciar post Postado Fevereiro 13, 2010 Leia a minha mensagem que te mandei.. E pra saber os últimos registrados faz assim: mysql_query("SELECT * FROM usuarios ORDER BY id DESC LIMIT 5"); E pra saber os próximos vencimentos faz mais ou menos assim: mysql_query("SELECT * FROM usuarios ORDER BY data_vencimento ASC LIMIT 5"); Eu esqueci como faz pra fazer isso q você tá querendo.. é só dar uma pesquisada.. to mto ocupad.. Compartilhar este post Link para o post Compartilhar em outros sites
SimS™ 0 Denunciar post Postado Fevereiro 13, 2010 Consegui fazer o dos usuários utilizando o mysql_query que o Good passou. Agora só falta o do vencimento. Se alguém souber e puder ajudar... (Obs: Já procurei mas nem achei nada referente ao que eu to precisando...) Valeu Compartilhar este post Link para o post Compartilhar em outros sites
Foo Bar 0 Denunciar post Postado Fevereiro 14, 2010 Acho que algo assim deve funcionar, só não pude testar... então não garanto nada. :P mysql_query("SELECT * FROM usuarios WHERE vencimento BETWEEN NOW() AND DATE_ADD(NOW() , INTERVAL 5 DAY) ORDER BY vencimento ASC"); Abraço. Compartilhar este post Link para o post Compartilhar em outros sites
SimS™ 0 Denunciar post Postado Fevereiro 14, 2010 Funcionou perfeitamente ;) Só dei uns ajustes e combinei com outras funções (usando for para puxar os dados um embaixo do outro e dividindo a data, tirando os traços e ajeitando-a com barras "/") e ficou 100%. Agora uma outra dúvida... Como posso fazer um botão (no caso já tem até a imagem [seta para baixo] e ela alinhada ao texto) que, ao clicar, ele classificasse pela opção escolhida e de acordo com o definido (somente em ordem Decrescente [DESC]) Por exemplo... Há uma tabela da seguinte forma... ______________________________________________ ID Nome Email Senha Porta 1 User1 a@b.c 1234 1111 2 User2 a@b.c 5678 2222 3 User3 a@b.c 9012 3333 ______________________________________________ Caso eu clique em ID, ele classifica por ID. Caso clique em nome, classifica pelo nome ao invés de classificar por ID, e assim vai... Pensei em fazer algo nesse estilo: $tipo = "id"; $class = $tipo; $q = mysql_query("SELECT * FROM `usuarios` WHERE Porta > 1 ORDER BY $class DESC LIMIT 5"); ... e por exemplo, quando a pessoa clicasse no nome, ele mudasse a variável e atualizasse a pagina. Não sei se funciona desta forma, e não recordo como posso fazer para "setar a variável" e atualizar a página... Se alguém tiver um tempo pra explicar uma forma de fazer isso seria de grande ajuda... Valeu pessoal, até agora estão ajudando muito, está ficando perfeito :D Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Fevereiro 14, 2010 Coloque o link para a mesma página e adicione este parâmetro ao link, capturando por GET. O link deve ficar mais ou menos assim: <a href="pagina.php?order=nome">Ordenar por Nome</a> <?php // na pagina.php, você faz algo assim: $order =& $_GET['order']; // aí faz o tratamento para evitar SQL Injection e insere na consulta como você disse $q = mysql_query("SELECT * FROM `usuarios` WHERE Porta > 1 ORDER BY $order DESC LIMIT 5"); ?> A lógica é mais ou menos esta. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
SimS™ 0 Denunciar post Postado Fevereiro 14, 2010 Era isso mesmo que eu precisava... Agora tenho um outro problema Uso a class phpmailer para enviar o e-mail com os dados de acesso para os usuários. Antes funcionava normalmente. Só que as mensagens eram gravadas direto no código PHP. Agora passei-as para o MySQL. Ele está enviando normalmente, sem nenhum problema. Porém o e-mail possui várias variáveis. Como posso fazer para ele enviar o e-mail puxando os dados do próprio PHP que são setados quando se registra a pessoa? (Ex.: Nome de Usuário, Senha, Links, etc) Obs: Antes o texto no código PHP estava entre apóstrofos (''). Segue o e-mail de teste que recebi. Bem-Vindo ao MiBB\'s Gameshost. Todos os dados para acesso de seu painel estão contidos neste e-mail. Não delete-o de jeito nenhum, trate de guardar todas as informações para evitar dúvidas posteriores. IP: '.$ip.' Porta: '.$porta1.' Login: '.$nome.' Senha: '.$fsenha.' Primeiro Vencimento: '.$texto[2].'/'.$texto[1].'/'.$texto[0].' Link do Painel: '.$url.' Para acessar seu painel é necessário que seja feita a ativação do mesmo. Clique no link abaixo para ativá-lo. '.$url.'/valida_conta.php?cod='.$ValCode.'&porta='.$porta1.'&acao=Validar Caso não funcione o link acima, copie o código abaixo, acesse seu painel e cole o código no mesmo. O acesso será liberado somente quando a conta for ativada por motivos de segurança. Código: '.$ValCode.' Qualquer dúvida relacionada ao acesso ou sobre o painel, favor entrar em contato conosco pelo E-mail/MSN: '.$contactmail.' ou pelo Suporte no Site. '.$siteurl.' Atenciosamente, MiBB\'s Gameshost Compartilhar este post Link para o post Compartilhar em outros sites
SimS™ 0 Denunciar post Postado Fevereiro 15, 2010 Vi em um outro forum que o pessoal não entendeu muito bem o que eu quis dizer. Vou tentar explicar novamente, mas é meio dificil explicar isso... É o seguinte. Alguns scripts, como o WHMCS, entre outros, grava o "template" dos e-mails que ele manda (para os clientes) no MySQL, e você edita pelo painel. Queria fazer algo do tipo, porém, não sei como fazer para que as infos (como Login, Senha, etc) apareçam nesses e-mails. Criei as tabelas e tudo normalmente no MySQL. Antigamente utilizava a classe phpmailer com o texto a ser mandado pré-definido direto no PHP, ele puxava as informações e enviava-as normalmente. Agora queria fazer estas mensagens, que antes eram pre-definidas no php e que agora estão no MySQL, sejam enviadas como era antes. O código que o phpmailer usa é esse aqui... $mail = new PHPMailer(); $mail->IsSMTP(); $mail->SMTPAuth = true; $mail->SMTPSecure = "ssl"; $mail->Host = "smtp.gmail.com"; $mail->Port = 465; $mail->Username = "E-MAIL"; $mail->Password = "SENHA"; $mail->From = "E-MAIL"; $mail->FromName = "EM NOME DO HOST"; $mail->Subject = $infoserver[1]; if($ativacc == 0) { $html = $infoserver[9]; $texto = $infoserver[8]; } elseif($ativacc == 1) { $html = $infoserver[3]; $texto = $infoserver[2]; } $mail->Body = $html; $mail->AltBody = $texto; $mail->AddAddress($email1, $nome); if(!$mail->send()) { echo "Não foi possível enviar o e-mail. Erro: $mail->ErrorInfo"; } else { echo "E-mail enviado com sucesso!"; } Obs.: o $infoserver puxa as informações da tabela onde está o texto que o PhpMailer vai mandar. Todo o resto é variável da class do phpmailer. Da forma que utilizei, ele não está mandando o e-mail corretamente, com as variáveis abaixo: $nome = $_POST['nome']; $senha1 = $_POST['senha']; $porta1 = $_POST['porta']; $email1 = $_POST['email']; $dia = $_POST['dias']; $data = date("Y-m-d"); $rsenha = $_POST['randompass']; $sendmail = $_POST['sendmail']; $ativacc = $_POST['ativacc']; //### PUXA INFORMAÇÕES DA TABELA CONFIG ### $query = 'SELECT * FROM configuracoes'; $result = mysql_query ($query); while ($data = mysql_fetch_array ($result)) { $setting = $data['setting']; $value = $data['value']; $config['' . $setting] = '' . $value; } //######################################### $caminho = $config['Caminho']; $url = $config['Url']; $ip = $config['IP']; $siteurl = $config['SiteUrl']; $contactmail = $config['EmailContato']; $today = getdate(); $m = $today['mon']; $d = $today['mday']; $y = $today['year']; $data2 = date("Y-m-d", mktime(0,0,0, date($m), date($d)+$dia,date($y))); $confere = mysql_num_rows(mysql_query("SELECT * FROM usuarios WHERE Nome = '$nome' ")); $checapasta = is_dir("$caminho/$porta1"); $CaracteresAceitos = 'abcdxywzABCDZYWZ0123456789'; $max = strlen($CaracteresAceitos)-1; $senha2 = null; for($i=0; $i < 6; $i++) { $senha2 .= $CaracteresAceitos{mt_rand(0, $max)}; } //CÓDIGO DE VALIDAÇÃO $CaracteresAceitosVal = 'abcdxywzABCDZYWZ0123456789'; $maxVal = strlen($CaracteresAceitosVal)-1; $ValCode = null; for($i=0; $i < 12; $i++) { $ValCode .= $CaracteresAceitosVal{mt_rand(0, $maxVal)}; } //FIM DO CÓDIGO DE VALIDAÇÃO Ai em cima estão algumas das variáveis que eram pra ser enviadas pelo e-mail. Vou tentar simplificar... O texto que o PhpMailer deve mandar está no MySQL. As informações de login, senha, etc, que deviam estar no e-mail, não estão sendo enviadas corretamente. Ele está enviando somente as variáveis (código), e não o valor das variáveis. Queria que esses valores fossem incluidos no e-mail, porém, com o texto estando nas tabelas do MySQL. É meio complicado explicar, mas garanto que alguém deve entender. Valeu Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Fevereiro 15, 2010 Eu compreendi o que você precisa. A solução para o seu caso é a função eval(). Mas tome muito cuidado com as informações que estão gravadas no banco de dados, porque tudo que estiver dentro do banco vai ser executado como um código PHP. Então, se alguém conseguir inserir informações maliciosas no banco, elas serão executadas. Eu acho que a melhor opção pra você é, ao invés de gravar o conteúdo no banco de dados, grave em um arquivo .php. Na hora de enviar o e-mail, utilize o ob_start e ob_get_contents, com um include antes deste último. Não testei, mas seria algo mais ou menos assim: <?php ob_start(); require_once 'template_email.php'; $html = ob_get_contents(); ob_clean(); .... $mail->Body = $html; Como eu disse, eu não testei, mas na teoria deve funcionar. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
SimS™ 0 Denunciar post Postado Fevereiro 15, 2010 Acho que não seria tão perigoso, já que, vamos dizer assim, além de só eu ter o acesso (tudo bem que tem a questão de, de repente por uma falha, alguem criar um usuario, mas ignorando-a), esses códigos são apenas quando o administrador mestre (no caso eu) criar um novo usuário no painel. Esse e-mail é enviado com as informações que eu inseri no formulario anterior, entende? Como eu utilizaria essa função eval()? Li no manual do PHP, mas não entendi ao certo... Poderia explicar? Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Fevereiro 15, 2010 $mail->Body = eval($que_contem_os_valores_que_vem_do_banco); Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
SimS™ 0 Denunciar post Postado Fevereiro 15, 2010 Tentei tanto do jeito que você falou (tentando por direto no Body) como pondo direto no $html = ... Porém os dois dão a mesma coisa (Erro) Parse error: syntax error, unexpected '<' in /home/admin/mibbsserver/testes/painel2010_admin/adduser.php(239) : eval()'d code on line 1 Parse error: syntax error, unexpected T_STRING in /home/admin/mibbsserver/testes/painel2010_admin/adduser.php(240) : eval()'d code on line 1 Message body empty Não foi possível enviar o e-mail. Erro: Message body empty Os jeitos que coloquei: if($ativacc == 0) { $html = $infoserver[9]; $texto = $infoserver[8]; } elseif($ativacc == 1) { $html = $infoserver[3]; $texto = $infoserver[2]; } $mail->Body = eval($html); $mail->AltBody = eval($texto); E deste outro jeito: if($ativacc == 0) { $html = eval($infoserver[9]); $texto = eval($infoserver[8]); } elseif($ativacc == 1) { $html = eval($infoserver[3]; $texto = eval($infoserver[2]; } $mail->Body = $html; $mail->AltBody = $texto; Valeu Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Fevereiro 15, 2010 Olha, eu nunca usei o eval, mas em teoria ele deveria funcionar assim como eu te falei. Pode ser que tenha algum problema com abertura e fechamento de aspas simples/duplas nos dados gravados no banco de dados. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
SimS™ 0 Denunciar post Postado Fevereiro 15, 2010 O que não entendo é este erro: Parse error: syntax error, unexpected '<' in /home/admin/mibbsserver/testes/painel2010_admin/adduser.php(246) : eval()'d code on line 1 Parse error: syntax error, unexpected T_STRING in /home/admin/mibbsserver/testes/painel2010_admin/adduser.php(247) : eval()'d code on line 1 Não tem nenhum <, nem nos textos a serem enviados, nem no script... Compartilhar este post Link para o post Compartilhar em outros sites
SimS™ 0 Denunciar post Postado Fevereiro 15, 2010 Parece que entendi o do Unexpected '<', pois seria em HTML. Precisa dos '<>' Mas o outro dando Unexpected T_STRING eu não entendi muito bem não. Compartilhar este post Link para o post Compartilhar em outros sites
SimS™ 0 Denunciar post Postado Fevereiro 19, 2010 Já se passaram 4 dias e não obtive nenhuma resposta... Alguém pode dar uma luz nesse probleminha?? Me sugeriram em outro forum que utilizasse printf() ou sprintf(), da seguinte forma: /* Salve no banco de dados assim mesmo */ $texto = 'Bem-vindo, %s. Login: %s, Senha: %s';E depois isto: /* O primeiro parâmetro é o texto a ser modificado, os demais são as variáveis que farão as substituições */ printf($texto, $nome, $login, $senha); Porém perguntei se funcionaria do jeito que espero mas já fazem 2 dias e ainda não responderam... Compartilhar este post Link para o post Compartilhar em outros sites
Foo Bar 0 Denunciar post Postado Fevereiro 19, 2010 Não sei se entendi direito, mas acho que você pode fazer algo assim: No template do email, coloca algumas "tags" tipo __USER_LOGIN__, __USER_PASSWORD__, etc e depois substitui os valores usando a função str_replace. Exemplo: // Texto do template (que será salvo no banco de dados, eu acho :P) $text = 'Bem-vindo, __USER_NAME__. Login: __USER_LOGIN__, Senha: __USER_PASS__'; // Tags que serão buscadas e substituidas $search = array('__USER_NAME__', '__USER_LOGIN__', '__USER_PASS__'); // Valores que substituirão as tags $replace = array('Lenon', 'lenon.marcel', '12345'); $new_text = str_replace($search, $replace, $text); echo $new_text; É só adaptar o exemplo ao seu caso, deve dar certo (isso se eu entendi a dúvida direito ;)). Abraço. Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Fevereiro 19, 2010 Olha, não tinha pensado nesta opção, mas achei bem interessante. Pelos meus testes vai funcionar para o que você precisa sim. Carlos Eduardo Compartilhar este post Link para o post Compartilhar em outros sites
SimS™ 0 Denunciar post Postado Fevereiro 19, 2010 Hmm. Vou tentar essa. Agora não tem como pois estou quase de partida para a escola (ultimo ano, primeiro dia de aula...) Assim que chegar devo ficar de madrugada testando algumas alternativas... Valeu ;) Compartilhar este post Link para o post Compartilhar em outros sites
SimS™ 0 Denunciar post Postado Fevereiro 20, 2010 P-E-R-F-E-I-T-O novamente! Pontos e mais pontos positivos :D Funcionou perfeito esse esquema do str_replace() e array(). E se não me engano é o mesmo método utilizado em sistemas como WHMCS, entre outros. (Tanto que no painel, pede para utilizar [uSERNAME] para Nome de usuário, etc. Parece que por enquanto não tenho mais dúvidas. Caso tenha mais alguma retornarei aqui. Vocês são excelentes :D Muuuito obrigado a todos. Obs: E-mail saiu desta forma: Bem-Vindo ao MiBB's Gameshost. Todos os dados para acesso de seu painel estão contidos neste e-mail. Não delete-o de jeito nenhum, trate de guardar todas as informações para evitar dúvidas posteriores. IP: Porta: 1234 Login: testers Senha: 706cAA Primeiro Vencimento: 21/03/2010 Link do Painel: http://mpanel.mibbsserver.info Para acessar seu painel é necessário que seja feita a ativação do mesmo. Clique no link abaixo para ativá-lo. http://mpanel.mibbsserver.info/valida_conta.php..... Caso não funcione o link acima, copie o código abaixo, acesse seu painel e cole o código no mesmo. O acesso será liberado somente quando a conta for ativada por motivos de segurança. Código: Dw695Cddx9dZ Qualquer dúvida relacionada ao acesso ou sobre o painel, favor entrar em contato conosco pelo E-mail/MSN: ou pelo Suporte no Site. Atenciosamente, Faltou o IP e o Atenciosamente, blablabla, mas o IP é porque ainda não havia criado a entrada do IP e deve estar faltando a ultima parte no MySQL. Compartilhar este post Link para o post Compartilhar em outros sites