Ir para conteúdo

POWERED BY:

Arquivado

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

renan.miranda

Solução de problema em Newsletter

Recommended Posts

Tudo certo por aí meus amigos?

 

Bem... vamos ao problema...

 

Tenho um script de envio de Newsletter que percorre uma base de dados, e que envia uma quantidade de e-mails em um determinado tempo para não "lotar" o servidor, pois bem, ele está funcionando perfeitamente... mas a minha dúvida, é de fazer com que os envios sejam feitos através de um filtro, por exemplo... selecionar apenas um grupo para envio.

 

Certo, eu já sei como criar o filtro no SELECT para eles, pois vendo do formulário através de um RADIO, isso ele está fazendo bacana, o problema está no refresh, que ele perde o "contato" com esse $_POST que vem do formulário.

 

Eu já tentei trabalhar com $_SESSION mas não está dando jeito, com certeza eu não esteja trabalhando direito com ele. Então postarei o código comentado aqui da forma simples, enviando o e-mail para todos, sem o filtro, e comentando as linhas para a possível solução:

 

O Código:

 

<?php
	include "../seguranca/conectar.php";
	include "../seguranca/verificar-acao.php";
	
	session_start();
	
	$qnt = "1";
	$seg = "10";
	$assunto = strip_tags(trim($_POST['assunto']));
	
	//AQUI ELE PEGA O POST QUE VEM DO RADIO NO FORMULÁRIO
	// O PROBLEMA É QUE QUANDO ELE DA O REFRESH NO SISTEMA (VERSÃO LOGO ABAIXO)
	// ELE PERDE O CONTATO
	$destino = strip_tags(trim($_POST['destinatario']));
	
	//CRIANDO SESSION
	$_SESSION['destino'] = $destino;
	
	if(!empty($_FILES['foto']['name'])){
		$foto 		= $_FILES['foto'];
		$diretorio = "../newsletter-images";
		$foto_nome = md5(uniqid(time())) . ".jpg";
		$arquivo_temporario = $_FILES["foto"]["tmp_name"];
		move_uploaded_file($arquivo_temporario, "$diretorio/$foto_nome");
	}
	
	$inicio = $_GET['inicio'];
	
	if($inicio == ""){
		$inicio = 0;
	}else{
		$inicio = $_GET['inicio'];
	}
		//AQUI ELE FAZ O SELECT DE TODOS OS USUÁRIOS DO BANCO
		// O FILTRO SERÁ FEITO COM A INCLUSÃO DA SINTAXE 'AND idCoord <> 0' e 'AND idCoord = 0'
		// ISSO É FEITO TRANQUILAMENTE.
		// JÁ TENTEI TRABALHAR COM SESSIONS E CRIAR UM if PARA AS OUTRAS DUAS LINHAS
		// VEJAM COMO EU COLOQUEI
		
		if($_SESSION['destino'] == 't'){
			$rsEnviar = "SELECT * FROM lideres WHERE codStatus = 0 LIMIT ". $inicio .', '.$qnt;
		}
		if($_SESSION['destino'] == 'c'){
			$rsEnviar = "SELECT * FROM lideres WHERE codStatus = 0 AND idCoord <> 0 LIMIT ". $inicio .', '.$qnt;
		}
		if($_SESSION['destino'] == 'l'){
			$rsEnviar = "SELECT * FROM lideres WHERE codStatus = 0 AND idCoord = 0 LIMIT ". $inicio .', '.$qnt;
		}
		
		try{
		
		$qrEnviar = $conecta->prepare($rsEnviar);
		$qrEnviar->bindValue(':inicio',$inicio,PDO::PARAM_STR);
		$qrEnviar->bindValue(':qnt',$qnt,PDO::PARAM_STR);
		$qrEnviar->execute();
		$contar = $qrEnviar->rowCount($qrEnviar);
		
		}catch(PDOException $e){
			session_destroy($_SESSION['dest']);
		}
	    
		if($contar == "0"){
		$atualizar = 'UPDATE lideres SET codStatus = 0';
		$qatualizar = $conecta->prepare($atualizar);
		$qatualizar->execute();
		
		session_unset($_SESSION['destino']);
		session_destroy($_SESSION['destino']);

	echo '
		<script language= "JavaScript">
		location.href="../email-mkt.php"
		</script>
	';
	}else{
		//ESSA É A PARTE DO REFRESH, QUE ELE PERDE O CONTATO COM A SESSION, OU SEJA
		//QUANDO ELE RECARREGA ELE NÃO PEGA MAIS O VALOR PARA A CONSULTA ACIMA
	    echo "<meta http-equiv=\"refresh\" content=\"" .$seg. ",URL=?inicio=". $fim ."\">";
	}
	
	echo '<div style="width:700px; height:100px; margin:0 auto"><img src="../img/relatorio_email.jpg" /></div>';
	echo '<div style="width:700px; font:13px Tahoma, Geneva, sans-serif; color:#900;margin:0 auto; font-weight:bold; margin-top:10px; ">NÃO FECHE ESSA JANELA ATÉ QUE TODOS OS E-MAILS TENHAM SIDO ENVIADOS</div>';
	
	header('Content-Type: text/html; charset=utf-8');
	
	$mensagem	= $_POST['mensagem'];
	$assunto	= strip_tags(trim($_POST['assunto']));
	$assunto 	= utf8_decode($assunto);
	$remetente  = strip_tags(trim($_POST['remetente']));
	$remetente 	= utf8_decode($remetente);
	
	foreach($qrEnviar as $enviar){
		    
			$fim = $inicio + $qnt;
			$url = $_SERVER[HTTP_HOST];
			$id = $enviar['id'];
			$para = $enviar['email'];
			$emailsender = "contato@" . $_SERVER[HTTP_HOST];
			
			if(PHP_OS == "Linux") $quebra_linha = "\n"; //Se for Linux
			elseif(PHP_OS == "WINNT") $quebra_linha = "\r\n"; // Se for Windows
			else die("Este script nao esta preparado para funcionar com o sistema operacional de seu servidor");
			
			if(!empty($_FILES['foto']['name'])){
				$mensagemHTML = "
				<img src=\"$url/img/email-mkt.jpg\"><br />
				<img src=\"$url/newsletter-images/".$foto_nome."\"><br />
				$mensagem
				<br />
				<br />
				<br />
				<br />
				";
			}else{
				$mensagemHTML = "
				<img src=\"$url/img/email-mkt.jpg\"><br />
				$mensagem
				<br />
				<br />
				<br />
				<br />
				";
			}
			/* Montando o cabeçalho da mensagem */
			$headers = "MIME-Version: 1.1".$quebra_linha;
			$headers .= "Content-type: text/html; charset=iso-8859-1".$quebra_linha;
			$headers .= "From: ".$remetente."<".$emailsender.">".$quebra_linha;
			$headers .= "Return-Path: " . $emailsender . $quebra_linha;
			$headers .= "Reply-To: ".$emailremetente.$quebra_linha;
			$headers .= "X-Priority: 1".$quebra_linha;
			$headers .= 'X-Mailer: PHP/' . phpversion();
			 
			/* Enviando a mensagem */
			$enviar = mail($para, $assunto, $mensagemHTML, $headers, "-r". $emailsender);
			
				if($enviar){
				echo "<div style=\"width:700px; margin-top:10px; font:14px Tahoma, Geneva, sans-serif; color:#666; border-bottom:1px solid #900; margin:0 auto; margin-top:5px;\">Menagem enviada para: <span style=\"color:#F90\"><strong>".$para."</strong></span></div>";
				$mandar = $conecta->prepare("UPDATE lideres SET codStatus = 1 WHERE id = ".$id);
				$mandar->execute();
				}else{
					echo "E-mail não enviado...";
				}
		  }
?>

No aguardo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

E se ao invés de dar refresh você disparar outro form com o destinatário? imprime ele com php e dispara ele com js

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que assim pode funcionar, onde você tem:

 

 

echo "<meta http-equiv=\"refresh\" content=\"" .$seg. ",URL=?inicio=". $fim ."\">";

 

Troque por:

 

 

echo '
   <form method="post" action="?inicio=". $fim">
          <input type="hidden" name="destinatario" value="'.$valor-destinatario.'" />
   </form>
   <script type="text/javascript">
          $(document).ready(function(){
                  setTimeout(function(){$('form').submit()},10000);
          });
   </script>
';

 

Acho que mais ou menos isso, lembre-se de incluir o jquery na página antes de tentar.

 

Espero ter ajudado.

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz um seguinte...

Eu coloquei no inicio para ele gravar a session assim...

 

session_start();
$pra = $_POST['destinatario'];
$_SESSION['para'] = $pra;

E lá eu coloquei dessa forma:

 

<script language="javascript">
   function vai(){location.href='enviar-news.php?destino=<?php echo $_SESSION['para']; ?>'}
   setTimeout("vai()",5000); 
</script>

Ele recarrega a página, mas a session não aparece, pois irei fazer com que ele pegue o $_GET e possa fazer as condições na hora da consulta... mas não deu certo não...

 

Na sua solução eu não entendi muito bem...

 

Mas estou perto =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

de onde está vindo o $_POST['destinatario']? tenta imprimir a ele para ver se ele está sendo enviado corretamente.

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele está vindo de um formulário, ele está vindo corretamente...

Andei lendo aqui, que na verdade o que acontece, é que com o refresh, ele perde a session... estou procurando pelo google da vida também uma solução...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, não é para perder a session no refresh talvez seja porque você está reescrevendo ela toda vez, tenta um if para só criar a session se ela não existir.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu inseri no inicio...

 

session_start();
	$destinatario = $_POST['destinatario'];
	
	if(!isset($_SESSION['destinatario'])){
		$_SESSION['destinatario'] = $destinatario;
	}
	echo $_SESSION['destinatario'];

Mas ele só aparece a primeira vez, quando vem do $_POST, mas quando ele dá o refresh onde ele deveria pegar os dados da $_SESSION que vou salva, ele não aparece

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que ele não salva por que com o refresh não vem um novo $_POST['destinatario']

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois então, por isso que logo na primeira execução da página, eu peço pra ele gravar o que vem do $_POST['destinatario'] em uma $_SESSION, justamente para quando ele der o refresh ele ainda me retornar o valor e eu poder fazer os if's nas consultas, é justamente isso que ele não tá fazendo



Desencargo de consciência...

Isso aqui está certo?

 

session_start();
	$destinatario = $_POST['destinatario'];
	
	$_SESSION['destinatario'] = $destinatario;
	
	if(!isset($_SESSION['destinatario'])){
	$_SESSION['destinatario'] = $destinatario;
	}
	print_r($_SESSION);

Ele pega o $_POST tranquilo vindo do form, estou mandando ele salvar na $_SESSION['destinatario'], mas o print_r só me informa na primeira vez que ele abre, ou seja, no refresh ele não mostra a $_SESSION teoricamente salva

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está sobrescrevendo a session com um valor vazio, no refresh ele não tem mais o post, mais ai na terceira linha você está dando o valor vazio a session destinatario.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nosso problema estava aí...

Obrigado Rafa, você matou a charada, eu estava a 3 dias travado aí...

Abraços...

 

A solução :

 

if($_POST['destinatario'] != ''){
   $destinatario = $_POST['destinatario'];
}

:yes:

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.