Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 6

Envio De Newsletter Com Uso De Select Multiple

16-10-2008 23:35

Olá pessoal.
Estou desenvolvendo uma Newsletter e gostaria de uma ajudinha para resolver um problema numa rotina. :help

A.) As informações:

1. Tenho numa página um form1 com dois select (list ou multiple, como queiram chamar/usar). O select_1 lista a partir de uma SQL todos os emails de meu DB. E o select_2 recebe os emails do select_1 (todos eles ou só os que escolher). Até ai tudo bem, não há problemas com essa parte, vejam abaixo:

<select name="select_1" size="6" onClick="move('form1','select_1','select_2[]');">           <option value="todos">Selecionar Todos »</option>           <?php do { ?>           <option value="<?php echo $row_rs_lista_email['tb_usuario_email']; ?>"><?php echo " ".$row_rs_lista_email['tb_usuario_nome']." (".$row_rs_lista_email['tb_usuario_email']. ") "; ?></option>           <?php }           while ($row_rs_lista_email = mysql_fetch_assoc($rs_lista_email));           $rows = mysql_num_rows($rs_lista_email);           if($rows > 0) {                   mysql_data_seek($rs_lista_email, 0);                   $row_rs_lista_email = mysql_fetch_assoc($rs_lista_email);            } else {                   echo "Não há e-mails a serem listados para o critério informado"; }            ?> </select> <select name="select_2[]" size="6"  onClick="move('form1','select_2[]','select_1');">             <option value="todos">« Remover Todos</option> </select>

2. Após submeter o form1, enviando todos os dados inclusive o do select_2 o qual contem os e-mails que escolhi no select_1, uma página PHP recebe os dados e os trada da seguinte maneira (posto só a parte do código que interessa):

<?php $assunto = $_POST['assunto']; $remetente = $_POST['remetente']; $emails = $_POST['select_2']; $texto = $_POST['mensagem']; //  $total_email = $_POST['total_email'];   // input hidden for ($i = 0; $i < count($emails); $i++) {      $para = $emails[$i];      $headers = "MIME-Version: 1.0\n";      $headers .= "Content-type: text/html; charset=iso-8859-1\n";      $headers .= "From: MEUSITE <{$remetente}>";      mail($para, $assunto, $texto, $headers); } ?>

3. Tentei substituir o "count" pelo total de emails coletados pelo SQL e fiz inúmeros testes, mas não deram certo. :shock

B.) O problema:

Não consigo fazer com que sejam listados um a um os emails que inseri no select_2 e que seja enviado um email com a mensagem para cada um deles. :plus

Pessoal, a onde é que estou errando? Podem me ajudar a matar essa charada? :!

Agradeço desde já. :)
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17422
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Envio De Newsletter Com Uso De Select Multiple

17-10-2008 07:33

Veja se essa solução ajuda

<script> function seleciona() { alvo = document.getElementById("pega"); for(var i=0; i < alvo.options.length; i++) { alvo.options[i].selected=true; } } </script>


<form action="teste.php" method="POST"> <select name="pega[]" id="pega" multiple> <option value="a">a</option> <option value="b">b</option> <option value="c">c</option> </select> <input type="submit" onclick="seleciona()" name="envio"> </form>


<?php if($_POST['envio']) { foreach($_POST['pega'] AS $campo){ echo $campo."<br>"; } } ?>

0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 6

Envio De Newsletter Com Uso De Select Multiple

22-10-2008 22:00

Obrigado pela força WEB.

Olha só! Executei o código e funfou com um probleminha.

Se eu selecionar por ex. uma opção ou duas delas, o script lista para mim todas as opções: a, b e c, e não somente as escolhidas.

Por que será que não é listado só os que forem escolhidos/clicados?

Revisei o código que postou e não vi nada de errado.

E agora, o que será?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17422
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Envio De Newsletter Com Uso De Select Multiple

22-10-2008 22:38

Teu objetivo não era mandar para o select 2 somente os que devem ser enviados, ou seja, todos do select?
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 6

Envio De Newsletter Com Uso De Select Multiple

24-10-2008 02:37

WEB, você tem razão.

Não percebi isso, estava de cabeça cheia quando fui testar, pois estava a 36 horas pregado no PC programando e testando rotinas de agendamento para/no Cron. Vou implantar por aqui!

Até breve, quando publicarei aqui as rotinas de toda a solução da Newsletrer que desenvolvemos. Certo!?

Obrigado mais uma vez. :peaceout
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17422
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Envio De Newsletter Com Uso De Select Multiple

24-10-2008 07:21

flw e boa sorte :cool
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Primeiras postagens
Primeiras postagens
Tópico Autor
Mensagens: 6

Envio De Newsletter Com Uso De Select Multiple

26-11-2008 02:42

Caro WEB,
Embora um pouco tarde, mas como havia prometido, estou disponibilizando os scripts fundamentais da Newsletter que desenvolvi. Os códigos estão comentados e com algumas adaptações/alterações minhas, bem como as referências das contribuições pegas em fóruns e sites de desenvolvedores. Usei PHP4 , JS e MySQL.

O caso é o seguinte. Meu cliente solicitou uma solução para enviar os textos que publica no seu site pessoal para os assinantes/clientes/visitantes, ou seja, eviar uma Newsletter (que chamarei de news). A idéia foi criar uma forma de cadastro dos argumentos de busca no DB (SQL para listar os textos publicados a partir de um intervalo de datas), ou seja, criei uma página para lista os textos a partir de parâmetros pré-configurados num cadastro de Modelos de Newsletter (página cadastro_news.php, não fornecida aqui), a página (listar_news.php) possui um “Form” que recebe os dados já cadastrados. Nela também é listado os textos que foram selecionados no DB (página cadastro_textos.php, não fornecida aqui). Usei também um arquivo JS que transfere as opções de um select multiple (listbox) para um outro (listbox.js), a idéia é escolher o e-mail ou vários ou todos os que receberão a news.

Ps. Parto do princípio que você tenha criado uma página de cadastro de modelos de Newsletter, com isso você pode criar vários modelos como newsletter dos textos postados mais recentemente, por mês, por quinzena, por semana, etc.

Bom, vamos ao que interessa.

Querys usadas:

1. Lista na tabela tb_textos os registros de textos publicados e ativos ou liberados para leitura dentro de um intervalo de datas (variáveis que recebem as datas: $dt_inicio e $dt_final; status ativo do texto = 1): "SELECT * FROM tb_textos WHERE tb_textos_status = 1 AND tb_textos_data BETWEEN '$dt_inicio' AND '$dt_final' ORDER BY tb_textos_titulo ASC"   2. Lista na tabela tb_usuario registros dos e-mails cadastrados, ativos e autorizados a receber a news: "SELECT tb_usuario_news, tb_usuario_id, tb_usuario_status, tb_usuario_nome, tb_usuario_email FROM tb_usuario WHERE tb_usuario_news = 1 AND tb_usuario_status = 1 ORDER BY tb_usuario_nome ASC"   3. Atualiza a data de uso/envio do última vez que se usou uma news (modelo): "UPDATE tb_new SET tb_news_dt_envio=NOW() WHERE tb_news_id='$id_news'";

Página listar_news.php (sem o script PHP de listagem dos dados, só a indicação):

<?php $id_news = $_REQUEST['tb_news_id']; // captura o id(nº de registro ou código) da newslwtter cadastrada, pois vou usa-lo para gravar nesse registro a data de envio da news ?> <HTML> <HEAD> <TITLE>Listar Newsletter</TITLE> // Captura os e-mails do input “lista2” armazenado os selecionados num arrey (já escolhidos para que receber a news) // Contribuição do fórum www.codigosnaweb.com, por WEB <script language="javascript" type="text/javascript">  function seleciona() {         alvo = document.getElementById("lista2");         for(var i=0; i < alvo.options.length; i++) {     alvo.options[i].selected=true;         }     } </script> // Arquivo que transfere via JS as opções de um listbox(“lista1”) para outro listbox(“lista2”) // Contribuição do site www.fazedordesite.com, por Rodrigo Fante <script type="text/javascript" src="listbox.js" ></script> </HEAD> <BODY> // Form da página lista_news.php  <form name="form1" method="post" action="envia_news.php"> Intervalo de busca:<br> <input readonly="true" type="text" name="dt_inicio" value="<?php echo $data_inicio; ?>"> a  <input readonly="true" type="text" name="dt_final" value="<?php echo $data_final; ?>"><br> Assunto: <input readonly="true" type="text" name="assunto" value="<?php echo $assunto_news; ?>"><br> Remetende:<br> <input readonly="true" type="text" name="remetente" value="<?php echo $email_remetente; ?>"><br> Destinatário:<br> <select name="lista1[]"onclick="move('form1','lista1[]','lista2[]');" multiple>     <option value="">» SELECIONAR TODOS »</option>     // Insira aqui o código PHP para listar os e-mails do DB </select> <select name="lista2[]" id="lista2" onClick="move('form1','lista2[]','lista1[]');" multiple>     <option value="”>« REMOVER TODOS «</option>     // Fica vazio até receber os e-mails escolhidos no listbox “lista1” </select><br> // A mensagem é preenchida automaticamente, pois vem direto de um pré-cadastro, usa-se o modelo de news já criado Mensagem:<br> <textarea readonly="true" name="mensagem" cols="140" rows="10">     <?php     echo $cabecalho_mensagem_news;          echo $apresentacao_mensagem_news;         echo $textos_selecionados; // Insira o código PHP para mostrar o texto selecionados a partir do intervalo dado         echo $rodape_mensagem_news;     ?> </textarea><br> <input type="hidden" name="id_news" value="<?php echo $id_news; ?>"> // informa a id de registro da news como um valor do input tipo hidden <input type="submit" name="enviar" value="Enviar" onClick="seleciona()"> // Ao clicar é capturado os e-mails do listbox “lista2” e do Form, e enviados para a página enviar_news.php <input type="button" name="cancelar" value="Cancelar" onClick="javascript:history.back();"> </form> </BODY> </HTML>

Código JS do arquivo listbox.js
Não precisa alterar nada aqui, o código está como original.

/* FS listBox Controller Version 1.0.0 Por Rodrigo Fante http://www.fazedordesite.com Mantenha os créditos pelo menos ;D */   function ordenarLista(select){         // Arrays que vao guardar os valores         arrTextos = new Array(); // text de cada option         arrValues = new Array(); // value de cada option         arrGuardaTextos = new Array(); // text de cada option de novo         // iniciamos o array com valor vazio         // Isso para ele nao ordenar a palavra "Todos" que joga todos os         // elementos para o outro listBox         arrTextos[0]=arrValues[0]=arrGuardaTextos[0]="";                 // total de elementos no listBox         var total = select.length;                 // pego os valores do listBox e jogamos pros arrays         for(i=1; i<total; i++){                 arrTextos[i] = select.options[i].text;                 arrValues[i] = select.options[i].value;                 arrGuardaTextos[i] = select.options[i].text;         }         // orderna o array com os "text"         arrTextos.sort();                 // primeiro loop começa do 1 para ignorar o 0 que é o "todos"         for(i=1; i<total; i++){                 // defino o texto do listBox ja ordenado                 select.options[i].text = arrTextos[i];                 // agora busco pelo array nos textos antigo guardados qual bate com o                 // que estou pegando agora, e pego seu valor e defino no listbox                 for(j=1; j<total; j++){                         if (arrTextos[i] == arrGuardaTextos[j]){                                 select.options[i].value = arrValues[j];                                 j = select.length;                         }                 }         } } function move(form,select1,select2){         form = document[form];         select1 = form[select1];         select2 = form[select2];                         var listText = select1.options[select1.selectedIndex].text //Nome Elemento         var listValue = select1.options[select1.selectedIndex].value //Valor(value) do  Elemento                 if (select1.options.length > 0 && select1.selectedIndex != -1) {                 if (listValue != "todos") {                         // envia 1 elemento do select1 para o 2                         select2.options[select2.options.length] = new Option(listText, listValue); // passa o item do select1 para o 2                         select1.options[select1.selectedIndex] = null; // elimina do select1                         ordenarLista(select2); // ordena o select2                 }else if (select1.options.length > 1 && select1.selectedIndex != -1) {                         // envia todos os elementos do select1 para o 2                         var total = select1.options.length - 1;                         for (i = 0; i < total; i++) {                                 var Nome_Elemento = select1.options[1].text //Nome Elemento                                 var Valor_Elemento = select1.options[1].value //Valor(value) Elemento                                                                 select2.options[select2.options.length] = new Option(Nome_Elemento, Valor_Elemento); // passa o item do select1 para o 2                                 select1.options[1] = null; //elimina do select1                                         }                         ordenarLista(select2);  // depois de varrer todos elementos, ordena a select2                           }         }               }

Página enviar_news.php

<?php // Variáveis que recebem os dados do Form $assunto = $_POST['assunto']; $remetente = $_POST['remetente']; $destinatario = $_POST['lista2']; $mensagem = $_POST['mensagem']; $id_news = $_POST['id_news']; // Variáveis usadas na contagem do envio dos e-mails e mostrados numa página como resumo do envio $total_email = 0; $enviados = 0; $falhados = 0; // Testa a existência do remetente e da mensagem If ((!$remetente) || (!$mensagem)) {     echo "Erro ao enviar a Newsletter. Repita o processo por favor."; } else {     mysql_select_db($database_db_site, $db_site); // Conecção com o DB          // Query de atualização no registro de cadastro do modelo da news a data de envio/uso desse modelo     $sql_1 = "UPDATE tb_news SET tb_newsr_dt_envio=NOW() WHERE tb_news_id='$id_news'";     $inserir = mysql_query($sql_1, $db_site) or die( mysql_error()); // Inseri a data de envio da newsletter          // Testa a gravação da data no registro da news     If (!$inserir) {         echo "Não foi possível gravar a Data de Envio da Newsletter. ENVIO ABORTADO! Repita o processo por favor.";     }     else {         // Testa o envio da newslwtter e contabiliza o envio         if($destinatario) {              echo "Situação do envio da Newsletter:<br>Legenda: Situação A - newsletter enviada e aceita pelo destinatário<br>Situação B - newsletter não foi aceita ou não alcançou o destino<br><br>";                          // Lembra da função JS que armazena os e-mails selecionados num arrey? Aqui eles são listados um a um e a cada um é enviado as informações da news              foreach ($destinatario as $para){ // A variável “$para” recebe cada email através do foreach                 $headers = "MIME-Version: 1.0\n";                 $headers .= "Content-type: text/html; charset=iso-8859-1\n";                 $headers .= "From: Site meu_site.com <{$remetente}>";                 $from = $remetente;                 $subject = "{$assunto}";                                  // Aqui a fumção mail ao tempo que envia a news, retorna um valor verdadeiro ou falso para o envio coreto ou incorreto, mas que não garante se realmente será lida pelo destinatário                  If (mail($para, $subject, $mensagem, $headers)) {                     $enviados = $enviados + 1;                     $alerta = "Situação A";                 }                 else {                     $falhados = $falhados + 1;                     $alerta = "Situação B";                 }                 // Informa a situação de cada e-mail usado, quais foram enviados com sucesso ou quais falharam                  echo "» {$alerta} - e-mail {$para};<br>";             }         }         $total_email = $enviados + $falhados;         // Mostra um resumo da situação do envio da news         echo "Resumo:<br>No total de <b>{$total_email} e-mails</b>, {$enviados} aceitaram a mensagem e {$falhados} não aceitaram ou não alcançaram o destino.";     } } ?>

Pois bem pessoal, é isso ai. Espero ter contribuído.
Se o texto ficou complicado de entender e caso tenham alguma dúvida, infelizmente eu não poderei ajudar, pois estou envolvido aqui em alguns projetos importantes, mas se quiserem postá-las fiquem a vontade, só não garanto a resposta, ok! Abraços. :wink

Webmidia - Allysson Sebastian
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17422
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Envio De Newsletter Com Uso De Select Multiple

26-11-2008 10:56

Bom que conseguiu, valeu pela contribuição :wink
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Mais de 75 postagens
Mais de 75 postagens
Mensagens: 96
Nome: Júnior
Descrição do site: Voltado para o Desenvolvimentos de Sistemas
Localização: Goiania
Contato:

Envio De Newsletter Com Uso De Select Multiple

22-01-2009 09:15

Muito bom este post vai ajudar muitas pessas ainda nao dei uma olhada bem detalhamento nos arquivos
mais assim que eu estiver tempo vou esta dando uma olhada melhor

Bem este codigo me salvo a vida na hora de manda grandes quantidades de news eu tirei ele do
http://wiki.locaweb.com.br/pt-br/Como_e ... script_PHP

ele esta bem explicado mais se algum estiver com duvida eu estou aqui para ajudar

<?php  //configurações do banco  $host = "HOST";  $banco = "BANCO";  $usuario = "USUARIO";  $senha = "SENHA";  $tabela = "news";  $campos = "id,destinatario,status"; //campos da tabela    //configurações do e-mail  $subject = "teste newsletter em pacotes";  $body = "testando um script de envio de newsletter em pacotes usando php e mysql";  $nome_remetente = "Seu Nome";  $email_remetente = "seu@email.com";    $quant = 10; //número de mensagens enviadas de cada vez  $sec = 10; //tempo entre o envio de um pacote e outro (em segundos)  ?>    <?php  $conexao = mysql_connect($host,$usuario,$senha);  mysql_select_db($banco);  ?>    <?php  $ok = 0;  $inicio = 0;  $fim = $inicio + $quant;  ?>    <?php  $sql = "select $campos from $tabela where status = 0 limit $inicio,$fim";  $query = mysql_query($sql,$conexao);  $registros = mysql_num_rows($query);  ?>    <?php  if($registros==0) {     mysql_query("update $tabela set status = 0");     printf("<font face=’tahoma’>todas as mensagens foram enviadas!</font>");     $ok = 1;  }  ?>    <?php  while($result = mysql_fetch_array($query)) {     $id = $result[0];     $to = $result[1];     $status = $result[2];       $headers = "From: $nome_remetente <$email_remetente>";     mail($to,$subject,$body,$headers);     mysql_query("update $tabela set status = 1 where id = $id");     printf("<font face=’tahoma’>$id ) mensagem para <b>$to</b> <font color=’#ff0000’><b>enviada com sucesso!</b></font></font>");  }  ?>    <?php  mysql_free_result($query);  mysql_close($conexao);  ?>    <?php  if(!$ok){     echo("<meta http-equiv=\"refresh\" content=\"" . $sec . "\">");  }  ?>

0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17422
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

Envio De Newsletter Com Uso De Select Multiple

22-01-2009 10:04

Vlw pela contribuição.
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado