Ir para conteúdo

Arquivado

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

gsq_queiroz

Problema com rotina de envio de emails

Recommended Posts

Tenho um pequeno sistema para enviar emails, mais não estou conseguindo alterar algumas funcionalidades dele.

 

O sistema você cria listas para envio, para fazer o cadastro de emails, primeiro tem que selecionar a lista no qual deseja fazer o envio, os emails cadastrados são vinculados a lista escolhida.

 

Problemas:

 

1- Quando é feito um envio, existe um contador dos emails que são enviados, mas cada e-mail que é enviado e automaticamente é excluído do BD;

2- Existe um bloqueio para que não haja duplicidade de emails no BD, mas não é possível cadastrar o mesmo e-mail em listas diferentes;

3- Não faz a exclusão dos emails manualmente.

 

Caso:

 

1- O e-mail tem que ser enviado, a contagem tem que ser realizada, mais o emails tem que continuar no BD;

2- Tem que haver o bloquei de duplicidade de emails, mas só na própria lista que eles foram cadastrados e tem que haver a possibilidade de se poder cadastrar um mesmo e-mail no BD só que em listas diferentes.

3- E Tem que haver a possibilidade de se fazer a exclusão desses emails manualmente.

 

Alguém poderia me ajudar? Estou aprendendo programação em PHP agora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Posta o que esta fazendo e como esta fazendo, qual erros aparecem e reporte os erros aqui.

 

Se necessário poste os scripts e de preferencia dentro das tags code <>, ai sim vamos de fato lhe ajudar,

 

postar seus requisitos na esperança de que alguém faça para você, mascarando com o título do post Problema com rotina de envio de emails e no final como "forma de ajudar". Ae sugiro que leia este tópico, antes de postar http://forum.imasters.com.br/topic/375800-orientaes-para-uma-boa-participao/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não quero que ninguém faça para mim, apenas coloquei o problema para ver se alguém poderia me ajudar é apenas o incio de uma conversa, para quem veja, possa saber e conhecer direito o problema. como esta o sistema e como ele deve ficar, não estou mascarando nada. Como alguém pode me ajudar ou me passar um dica sobre mais ou menos o que devo fazer sem conhecer a situação? Peço desculpas se passei essa impressão, de querer que alguém faça isso para mim.

 

Então, consegui resolver o problema excluir os emails do BD, os emails continuam chegando, porem o contador não esta funcionando, ele fica parado no número total de emails. Vou colocar aqui o código das telas que fazem esse envio.

 

Essa é da primeira tela, tela de envio:

<?php require_once('Connections/projeto1.php'); ?>
<?php
@ini_set("memory_limit",'200M');
ignore_user_abort(true); 
ini_set("max_execution_time", 0); 

if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

$colname_rs_smtp = "-1";
if (isset($_GET['id_lista'])) {
  $colname_rs_smtp = $_GET['id_lista'];
}
mysql_select_db($database_projeto1, $projeto1);
$query_rs_smtp = sprintf("SELECT * FROM smtp WHERE id_lista = %s", GetSQLValueString($colname_rs_smtp, "int"));
$rs_smtp = mysql_query($query_rs_smtp, $projeto1) or die(mysql_error());
$row_rs_smtp = mysql_fetch_assoc($rs_smtp);
$totalRows_rs_smtp = mysql_num_rows($rs_smtp);

$colname_rs_mensagem = "-1";
if (isset($_GET['id_lista'])) {
  $colname_rs_mensagem = $_GET['id_lista'];
}
mysql_select_db($database_projeto1, $projeto1);
$query_rs_mensagem = sprintf("SELECT * FROM mensagem WHERE id_lista = %s", GetSQLValueString($colname_rs_mensagem, "int"));
$rs_mensagem = mysql_query($query_rs_mensagem, $projeto1) or die(mysql_error());
$row_rs_mensagem = mysql_fetch_assoc($rs_mensagem);
$totalRows_rs_mensagem = mysql_num_rows($rs_mensagem);

$colname_rs_listas = "-1";
if (isset($_GET['id'])) {
  $colname_rs_listas = $_GET['id'];
}
mysql_select_db($database_projeto1, $projeto1);
$query_rs_listas = sprintf("SELECT * FROM listas WHERE id = %s", GetSQLValueString($colname_rs_listas, "int"));
$rs_listas = mysql_query($query_rs_listas, $projeto1) or die(mysql_error());
$row_rs_listas = mysql_fetch_assoc($rs_listas);
$totalRows_rs_listas = mysql_num_rows($rs_listas);

$colname_rs_email = "-1";
if (isset($_GET['id_lista'])) {
  $colname_rs_email = $_GET['id_lista'];
}
mysql_select_db($database_projeto1, $projeto1);
$query_rs_email = sprintf("SELECT * FROM email WHERE id_lista = %s", GetSQLValueString($colname_rs_email, "int"));
$rs_email = mysql_query($query_rs_email, $projeto1) or die(mysql_error());
$row_rs_email = mysql_fetch_assoc($rs_email);
$totalRows_rs_email = mysql_num_rows($rs_email);
?>
<?php 

$quant_email=$totalRows_rs_empresa;


$tempo=$row_rs_contr['sleep'];

$email_tempo=$quant_email*$tempo;
$email_tempo_seg=$email_tempo/60;

$email_tempo_minu=$email_tempo_seg/60;

$email_temp_tot=$email_tempo_minu;


$email_tempo_seg=$email_tempo/60;
	   $hx=explode(".", $email_tempo_seg);
      echo  $cd=$hx[0];
    
$data_hoje = (date("Y-m-d"));
$hora_hoje = (date("H:i:s"));
$id=$row_rs_contr['id']	;

$sql = "UPDATE controle SET tempo='$cd', data='$data_hoje', hora='$hora_hoje' WHERE id='$id'";
$resultado = @mysql_query($sql)
?>


<?php
 require("libs/class.phpmailer.php"); 
 ?>
<?php do { ?>       
<?php		
        $rx = new PHPMailer();
        $rx->SetLanguage("br", "libs/"); 
        $rx->SMTP_PORT  = $row_rs_smtp['porta'];
		$rx->CharSet = "utf-8"; 
        $rx->SMTPSecure = "tls"; 
        $rx->IsSMTP();
        $rx->Host     = $row_rs_smtp['smtp'];  
        $rx->SMTPAuth = true; 
        $rx->Username = $row_rs_smtp['usuario']; 
        $rx->Password = $row_rs_smtp['senha']; 
        $rx->From     = $row_rs_smtp['email_remetente']; 
        $rx->FromName = $row_rs_smtp['nome_remetente'];
		$a=$reg_lista['email'] ;
		
        $rx->AddBCC($row_rs_email['email']);
        $editor1 = $row_rs_mensagem['mensagem'];
		$assunto = $row_rs_mensagem['assunto'];
	    $a=$row_rs_empresa['email'];
		
        $url  = $_SERVER['SERVER_NAME'] . $_SERVER ['REQUEST_URI'];
        $pieces = explode("/", $url);
        $server01=$pieces[0] . "/"; 
        $server02=$pieces[1];

	    $server = $_SERVER['SERVER_NAME']; 
        $rx->IsHTML(true);
        $rx->Subject=$row_rs_mensagem['assunto']. "/" . $data = (date("d-m-Y H:i:s"));
        $rx->Body=$row_rs_mensagem['mensagem'] . "<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>___________________________________________________________________________________________<br><br><br><br><table border='0' cellpadding='0' cellspacing='0' style='border-collapse: collapse' bordercolor='#111111' width='100%' id='AutoNumber1' bgcolor='#C0C0C0'>
  <tr>
    <td width='100%'>" . "<font size='4' color='#CCCCCC'> </font>". "/" . $data = (date("d-m-Y H:i:s")) . "'</td>
  </tr>
</table>'";
        !$rx->Send(); 
		$lista="excluido";
		$email=$row_rs_email['email'];   
		$id=$row_rs_email['id']; 
		    
    sleep(10);	  		  		

// AQUI FAZ A CONEXÃO PARA SER EXCLUIDO DO BD
$conect=mysql_connect("localhost","root","root");
echo $conect;
$banco=mysql_select_db("projeto1",$conect);

$consulta="DELETE FROM email WHERE id=$id";

$con=mysql_query($consulta,$conect) or die(mysql_error())
// QUANDO EU EXCLUO TODAS ESSAS LINHAS ENTRE ESSES COMENTÁRIOS O SISTEMA 
//FUNCIONA, MAIS O CONTADOR NÃO.
echo $con;

?>
<?php } while ($row_rs_email = mysql_fetch_assoc($rs_email)); ?>
<?php

?>

<?php
mysql_free_result($rs_smtp);

mysql_free_result($rs_mensagem);

mysql_free_result($rs_listas);

mysql_free_result($rs_email);
?>	  

E essa é a tela do contador

 

<?php require_once('Connections/projeto1.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}

$colname_rs_cont = "-1";
if (isset($_GET['id_lista'])) {
  $colname_rs_cont = $_GET['id_lista'];
}
mysql_select_db($database_projeto1, $projeto1);
$query_rs_cont = sprintf("SELECT * FROM email WHERE id_lista = %s", GetSQLValueString($colname_rs_cont, "int"));
$rs_cont = mysql_query($query_rs_cont, $projeto1) or die(mysql_error());
$row_rs_cont = mysql_fetch_assoc($rs_cont);
$totalRows_rs_cont = mysql_num_rows($rs_cont);
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Refresh" content="10; url=contador.php?id=<?php echo $row_rs_cont['id_lista']; ?>&id_lista=<?php echo $row_rs_cont['id_lista']; ?>"> 
<title>projeto1</title>
</head>

<body>
<p align="center">Total e Emails Restando </p>
<p align="center"> <strong><?php echo $totalRows_rs_cont ?></strong></p>
<p> </p>
</body>
</html>
<?php
mysql_free_result($rs_cont);
?>

Que se comunicam com esse iframe, que é onde aparece a contagem dos emails que estão sendo enviados:

<td><iframe src="contador.php?id=<?php echo $row_rs_listas['id']; ?>&id_lista=<?php echo $row_rs_listas['id']; ?>" name="I1" width="145" height="100" scrolling="No" frameborder="0" class="style10 style10" id="macromedia_index"></iframe>      </td>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hehehe, é só um puxão de orelha =D

 

e como você mesmo disse que é um iniciante, já esta começando bem, bem errado.

 

Gerar códigos isso sim atrapalha na aprendizagem, pois estará fazendo algo onde não terá o total controle sobre a aplicação, vou falar o porque.

 

1º - Esta prática de gerar código nos deixa preguiçosos.

2º - Dreamweaver gera um código sujo e obsoleto.

3º - Dificilmente terá suporte aqui no fórum de PHP com estes códigos Dreamweaviano.

4º - Abandone está prática e estude o PHP, tem muito mais a ganhar.

 

Voltando ao seu código

 

Não vejo motivo em excluir seus endereços de email, basta usar a clausula where do SQL para filtrar os emails não enviados, em sua tabela poderia ter uma campo do tipo int com o nome send valor padrão 0 por exemplo.

 

0 = enviar

1 = enviado

 

e no laço um update setando 1 para enviado.

 

 

para contar basta utilizar mysql_num_rows

 

exemplo

select count(`send`) from `email` where `send` = '1'

o sql acima lhe dará o total.

 

A N´s formas de se trabalhar, e sucesso ae com códigos feito pelo DW, a galera aqui acha um :sick:, tirando o PHPMailer é claro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é, to sabendo que não é a melhor forma de programar, e que esse códigos gerados são muito ruins, são grandes, e pelo que eu percebi e escutei, muita coisa é desnecessária. Quando esse sistema estiver funcionando, vou refaze-lo sem utilizar ferramenta nenhuma. Mais como eu tenho um prazo para fazer ele funcionar, tenho q ir fazendo ele desse jeito.

 

Então, me corija se eu estiver errado:

 

Com base nesse código que eu postei ai acima:

 

1- eu crio um campo na tabela com o nome de send;

 

2- Onde está o código,

$conect=mysql_connect("localhost","root","root");
echo $conect;
$banco=mysql_select_db("projeto1",$conect);

$consulta="DELETE FROM email WHERE id=$id";

$con=mysql_query($consulta,$conect) or die(mysql_error()) 

Eu substituo por um If, que se o email for enviado ele acrescenta o valor 1 ao campo send?

 

Mas me diga, se olhar acima no código, existe isso aqui:

!$rx->Send(); 
$lista="excluido";
$email=$row_rs_email['email'];   
$id=$row_rs_email['id'];  

Esse Send, não vai atrapalhar??

E se eu fizer desse jeito, ele pode me atrapalhar se no caso eu tiver que enviar email, para o mesmo email da mesma lista, porque ele ja vai ter o valor de 1 no campo Send, correto?


Sei que não é melhor solução, mas me diga, o envio esta funcionando com o contador, se for colocado esse código.

$conect=mysql_connect("localhost","root","root");
echo $conect;
$banco=mysql_select_db("projeto1",$conect);

$consulta="DELETE FROM email WHERE id=$id";

$con=mysql_query($consulta,$conect) or die(mysql_error())

E se retirar esse código o contador não funciona. Existe alguma forma de substituir

$consulta="DELETE FROM email WHERE id=$id";

Por algum código, que vai até o banco e invés de deletar o campo, apenas ler esse campo?? Acredito que assim ele funcionaria, ou não?

Compartilhar este post


Link para o post
Compartilhar em outros sites
!$rx->Send(); 
$lista="excluido";
$email=$row_rs_email['email'];   
$id=$row_rs_email['id'];  

Esse Send, não vai atrapalhar??

E se eu fizer desse jeito, ele pode me atrapalhar se no caso eu tiver que enviar email, para o mesmo email da mesma lista, porque ele ja vai ter o valor de 1 no campo Send, correto?

 

Este Send ae em cima é da class PHPMailer, e o da tabela quando montar sua query vai ficar assim

 

$qualquer_coisa = $row_rs_email['send'];

ou nem precisa setar em outra variavel pois $row_rs_email['send'] é uma váriavel

 

ficaria assim

if ( ! $rx->Send() ){

   //não enviado
   //trata os emails que não existe mais,
   //por exemplo excluir do banco
   //o phpmailer tem este recurso, ele retorna um código

} else {
    //enviado
    update ... send='1' where id = "$id"
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Humm entendi, mais a respeito de eu ter que depois fazer um envio para o mesmo email? ele já não vai ter o valor 1 atribuído a ele? isso vai bloquear o envio daquele email ou não?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para eu ter dar uma ideia, preciso saber para que vai servir estes envios de emails,

 

* e-mail marketing

* cobrança

outros => especifique

 

ambos com * teriam suas regras de envios diferente uma da outra.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu faria um controle sobre este envios de forma diferente então, usaria a tabela email só para ler as informações,

e criaria mais duas tabelas, a tabela campanha com todos os seus atributos necessários para gerenciar, e uma outra tabela N:M para conter os id do e-mail e o id da campanha.

img_campanha.png


Toda vez que criar uma nova campanha, rodaria o script em busca das informações na tabela campanha e na Campanha_has_Email, para ver se existe o id do email e da campanha.
Assim até um agendamento dos envios ficaria mais fácil de controlar.

basicamente:

select e insert

cabe a você saber controlar este fluxo!

Obs.: Pode criar outras se necessário, como por exemplo quem abriu o email, quem clicou no link.


Sucesso.

Code para estudo

 

CREATE TABLE IF NOT EXISTS `mydb`.`Email` (

`id` INT(11) NOT NULL,
`Email` VARCHAR(94) NULL DEFAULT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
CREATE TABLE IF NOT EXISTS `mydb`.`Campanha` (
`id` INT(11) NOT NULL,
`nome_campanha` VARCHAR(45) NULL DEFAULT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;
CREATE TABLE IF NOT EXISTS `mydb`.`Email_has_Campanha` (
`Email_id` INT(11) NOT NULL,
`Campanha_id` INT(11) NOT NULL,
PRIMARY KEY (`Email_id`, `Campanha_id`),
INDEX `fk_Email_has_Campanha_Campanha1_idx` (`Campanha_id` ASC),
INDEX `fk_Email_has_Campanha_Email_idx` (`Email_id` ASC),
CONSTRAINT `fk_Email_has_Campanha_Email`
FOREIGN KEY (`Email_id`)
REFERENCES `mydb`.`Email` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_Email_has_Campanha_Campanha1`
FOREIGN KEY (`Campanha_id`)
REFERENCES `mydb`.`Campanha` (`id`)
ON DELETE NO CASCADE
ON UPDATE NO CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi, a ideia é muito boa, mais para o meu azar, estou sem tempo e não tenho nem conhecimento necessário para mudar as estruturas desse sistema ou criar uma nova em pouco tempo. O jeito é eu fazer essas modificações. :upset:

 

Pensei em fazer aqui que você passou antes,

 

Criar um campo send, tipo int

 

e substituir esse código:

$conect=mysql_connect("localhost","root","root");
echo $conect;
$banco=mysql_select_db("projeto1",$conect);

$consulta="DELETE FROM email WHERE id=$id";

$con=mysql_query($consulta,$conect) or die(mysql_error())

Por esse:

$conect=mysql_connect("localhost","root","root");
echo $conect;
$banco=mysql_select_db("projeto1",$conect);

$consulta="UPDATE email SET send="1" WHERE id=$id";

if($sel ="SELECT email SET send="1" WHERE id=$id"){
    $consulta="UPDATE email SET send="1" WHERE id=$id";}

$con=mysql_query($consulta,$conect) or die(mysql_error())

Isso estaria certo ou errado? colocaria o valor de 1 no send e quando tivesse que enviar o email novamente ele verificaria, se send já estiver com valor de 1 ele apena atualizaria para 1 novamente. É uma ideia, ou falei besteira?

Compartilhar este post


Link para o post
Compartilhar em outros sites
$consulta="UPDATE email SET send="1" WHERE id=$id";

if($sel ="SELECT email SET send="1" WHERE id=$id"){
    $consulta="UPDATE email SET send="1" WHERE id=$id";}

$con=mysql_query($consulta,$conect) or die(mysql_error())

Isso estaria certo ou errado? colocaria o valor de 1 no send e quando tivesse que enviar o email novamente ele verificaria, se send já estiver com valor de 1 ele apena atualizaria para 1 novamente. É uma ideia, ou falei besteira?

Não é necessário ter 02 updates, basta um único if e controlar

$consulta = "SELECT * FROM `email` WHERE send ='0' ORDER BY `id` ASC"; 
...


if ( $rx->Send() == true ){
    $update = "UPDATE email SET send='1' WHERE `id` = '". $id ."' LIMIT 1";
    ...
}
$id é da query consulta
uma gambiarra para zerar no final os sends
coloquei order by asc, assim ele vai iniciar do 1
dessa forma faça um select que pega o ultimo id enviado de email e compara com ultimo id do banco utilizando a cláusula Select MAX(ID),
quando bater com o ultimo registro do banco faça um update, assim que enviar o email para ultimo da lista.
UPDATE email SET send='0', sua lista ficara nova novamente.
Gambiarra da p****. :natalw00t:

Compartilhar este post


Link para o post
Compartilhar em outros sites

A minha pagina onde esta os código de contador, na qual postei o código ai acima, ela verifica o total de email que eu tenho BD e como conforme meus emails eram deletados, o meu iframe ia mudando mostrando o total de emails no banco.

 

 

Conforme vc me explicou, devo fazer isto:

 

1- Vou criar um campos send do tipo integer, no meu BD.

2- Na pagina onde faço o cadastro dos emails, devo colocar o campo send, para ser sempre inserido um valor nele, que pode ser "1".

3- Subtitu o código onde era deletado os emails, por um código, que sempre atualize o campo send com +1, por exemplo:

 

send = 1, o email é enviado, send = 1+1, send =2

send = 2, o email é enviado, send = 2+1, send =3

 

4- E na página que tem o contador, em vez de ele mostrar o total de emails no BD, ele mostra o total de emails com maior valor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

é uma boa ideia. =D

 

Eu não sou muito fã de gambiarras, mas no teu caso. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu também não gosto, se eu tivesse mais tempo, começaria do zero, com um melhor planejamento. Mas... :mellow: , o jeito é fazer assim.

 

Bom enquanto faço essas modificações, surgiu um outro problema, tentei fazer a parte de exclusão manual, uma tabela que lista os emails e tem a opção de exclui-lo, o problema é que s emails não estão sendo deletados, e a lista esta aparecendo no top da página, os códigos são esse:

 

tela de cadastro:

$resultado = mysql_query("SELECT * FROM email"); 
while($linha = mysql_fetch_array($resultado)) 
{ 
?>
<a href="del_email.php?id=<?php echo $linha['id']?>">
<?php
echo $linha['email']; 
?>
</a>
<?php
} 

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Projeto1</title>
</head>
<body>

<?php
$id = $_GET['id'];
$conexao = mysql_connect("localhost","root","root"); 
if (!$conexao) 
{
die('Erro ao conectar: ' . mysql_error()); }

mysql_select_db("projeto1", $conexao); 
$resultado = mysql_query("SELECT * FROM email WHERE id_lista = '".$id_lista."'"); 
while($linha = mysql_fetch_array($resultado))
{ 
?>
<form method="post" action="del_email.php">
  <div align="center">
    <p> </p>
    <p> </p>
    <table width="608">
      <tr>
        <td width="251"><input type="hidden" name="id2" value="<?php echo $linha['id']; ?>"/>
Id da Lista:</td>
        <td width="294">E-mail: </td>
        <td width="47"> </td>
      </tr>
      <tr>
        <td><input type="text" value="<?php echo $linha['id_lista']; ?>"/></td>
        <td><input type="text" name="email2" value=”<?php echo $linha['email']; ?>” /></td>
        <td><input type="submit" value="Excluir"/></td>
      </tr>
    </table>
    <p>   </p>
  </div>
</form>
<?php
}
?> 

</body>
</html>

e onde é feito a exclusão é este:

<?php require_once('Connections/projeto1.php'); 

$id = $_GET['id']; 

mysql_query("DELETE FROM email WHERE id='".$id."‘"); 

echo "Registro excluído com sucesso!";
?>
<!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=utf-8" />
<title>Untitled Document</title>
</head>

<body>
</body>
</html>

O que fiz de errado???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu também não gosto, se eu tivesse mais tempo, começaria do zero, com um melhor planejamento. Mas... :mellow: , o jeito é fazer assim.

 

Bom enquanto faço essas modificações, surgiu um outro problema, tentei fazer a parte de exclusão manual, uma tabela que lista os emails e tem a opção de exclui-lo, o problema é que s emails não estão sendo deletados, e a lista esta aparecendo no top da página, os códigos são esse:

 

tela de cadastro:

$resultado = mysql_query("SELECT * FROM email"); 
while($linha = mysql_fetch_array($resultado)) 
{ 
?>
<a href="del_email.php?id=<?php echo $linha['id']?>">
<?php
echo $linha['email']; 
?>
</a>
<?php
} 

<html>
....

 

você esta dando um print antes de começar o <html, por isso a lista esta aparecendo antes,

código Spaghetti tem que ser tudo misturado. =D

 

 

<?php require_once('Connections/projeto1.php'); 

$id = $_GET['id']; 

mysql_query("DELETE FROM email WHERE id='".$id."‘"); 

echo "Registro excluído com sucesso!";
?>
<!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=utf-8" />
<title>Untitled Document</title>
</head>

<body>
</body>
</html>

O que fiz de errado???

 

 

Tem que validar este dados e verificar se realmente excluiu

if( isset( $_GET['id'] ) && is_numeric( $_GET['id']) ){
	
	$id = $_GET['id']; 

	if( mysql_query("DELETE FROM email WHERE id='". $id ."' ") ){
		echo "Registro excluído com sucesso!"; 
	} else {
		//
	}
	
}

Ou com mysql_affected_rows()

 

Abandonou o DW :clap:

Compartilhar este post


Link para o post
Compartilhar em outros sites

kkkkkkkkk Estou criando uma parte nova, não vou usar o DW rsr

 

Vou testar aqui


A pagina de Cadastro esta assim:

$resultado = mysql_query("SELECT * FROM email"); 
while($linha = mysql_fetch_array($resultado))
{?>
   <a href="del_email.php?id=<?php echo $linha['id'];?>">
<?php
}?>
</a>  
//Agora não exibe mais no topo de página.
<?php
$id = $_GET['id'];
$conexao = mysql_connect("localhost","root","root");
if(!$conexao)
{
	die('Erro ao conectar: '.mysql_erro());
}

mysql_select_db("projeto1",$conexao);
$resultado = mysql_query("SELECT * FROM email WHERE id = '".$id."'");
while($linha = mysql_fetch_array($resultado))
{?>

<form method="post" action="del_email.php">
<input type="hidden" name="id" value="<?php echo $linha['id'];?>"/>
Id Lista <input type="text" name="id_lista" value="<?php echo $linha['id_lista']?>"/>
Email <input type="text" name="email" value="<?php echo $linha['email'];?>"/>
<input type="submit" value="Excluir"/>
</form>
<?php
}?>

Mais agora não esta aparecendo nada, Não esta Aparecendo o form , mesmo com registros no banco.

 

A tela de deletar esta assim:

<?php
$conexao = mysql_connect("localhost","root","root");
if(!$conexao)
{
	die('Erro ao conectar:'.mysql_error());
}
mysql_select_db("projeto1",$conexao);
$id = $_GET['id'];

if( isset( $_GET['id'] ) && is_numeric( $_GET['id']) ){
	
	$id = $_GET['id']; 

	if( mysql_query("DELETE FROM email WHERE id='". $id ."' ") ){
		echo "Registro excluído com sucesso!"; 
	} else {
		echo "Erro!";
	}
}
mysql_close($conexao);
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha a melhor forma de apagar os emails, da forma como você esta querendo e percorrer um array

 

e as tags form e fora do loop

<form method="post" action="del_email.php">

<?php
while ($linha = mysql_fetch_array($resultado)):
?>

<input type="checkbox" name="email[]" value="<?php echo $linha['id'];?>"><?php echo $linha['email'];?>br>
	
<?php	
endwhile;
?>

</form>

para deletar

<?php 
if ( isset( $_POST['email'] ) ) {  


	foreach($_POST['email'] as $value){
	
		echo $value . '<br />'; //os ids
		
		//Aqui vai o script que vai deletar
		//DELETE FROM
	}


}

Faça um teste.

 

use o DW para gerar códigos html, mas não de php =D

 

Segue o exemplo

http://stackoverflow.com/questions/14026361/php-multiple-checkbox-array

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou testar agora

 

Fiz o código aqui ficou assim:

<?php
$id = $_GET['id'];
$conexao = mysql_connect("localhost","root","root");
if(!$conexao)
{
	die('Erro ao conectar: '.mysql_erro());
}

mysql_select_db("projeto1",$conexao);
$resultado = mysql_query("SELECT * FROM email WHERE id = '".$id."'");
?>

<form method="post" action="del_email.php">
<?php
while($linha = mysql_fetch_array($resultado))
{?>
    <input type="checkbox" name="email[]" value="<?php echo $linha['id'];?>"><?php echo $linha['id_lista'];?> <?php     echo $linha['email'];?><br>    
    </form>
<?php
}?>

Continua não aparecendo nada, estou lendo esse link que vc me passou , para ver se eu entendo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Trabalhe reportando os erros, senão fica difícil.

 

no inicio do script

ini_set('display_errors', 1);
error_reporting(E_ALL);

na sql mysql_error()

$resultado = mysql_query("SELECT * FROM email WHERE id = '".$id."'") or die ('Error: ' . mysql_error() );

na conexao

mysql_connect($mysql_host, $mysql_user, $mysql_pass) or die("Couldn't Connect");

http://stackoverflow.com/questions/15980597/syntax-error-unexpected-mysql-connect-t-string

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.