Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

SimS™

[Resolvido] Php/MySQL

Recommended Posts

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.