Ir para conteúdo

POWERED BY:

Arquivado

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

marcelo2605

[Resolvido] Gravar e enviar: é possível

Recommended Posts

Pessoal, uso o PHPMailer para enviar mensagens de um site e gostaria de saber se é possível gravar as informações que serão postadas no e-mail em um banco de dados mysql.

 

Não dá para chamar na action do form a função de enviar o formulário por e-mail e gravar as informações na tabela mysql. Como posso fazer então?

Compartilhar este post


Link para o post
Compartilhar em outros sites

basta gravar no banco e depois enviar, ou o contrário.

 

você pode, sim, fazer as duas coisas no mesmo script (o mesmo do action do form)

 

Beraldo, eu tentei mas não consegui. Se peço para que depois de gravar os dados, ele os envie por e-mail, o e-mail chega sem os dados.

 

Como posso fazer isto então?

Compartilhar este post


Link para o post
Compartilhar em outros sites

mostre como tentou

 

<form name="form1" method="POST" action="<?php echo $editFormAction; ?>" "send_boleto.php" class="cmxform" id="commentForm">

 

mostre como tentou

 

<form name="form1" method="POST" action="<?php echo $editFormAction; ?>" "send_boleto.php" class="cmxform" id="commentForm">

 

A página está mais ou menos assim:

 

Se já existe uma action para gravar na db, como vou colocar a action do phpmailer?

 

<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
 if (PHP_VERSION < 6) {
   $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;
}
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
 $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "envia_teste")) {
 $insertSQL = sprintf("INSERT INTO teste (nome, email) VALUES (%s, %s)",
                      GetSQLValueString($_POST['nome'], "text"),
                      GetSQLValueString($_POST['email'], "text"));

 mysql_select_db($database_db_SAR10, $db_SAR10);
 $Result1 = mysql_query($insertSQL, $db_SAR10) or die(mysql_error());
}
?>
<!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=iso-8859-1" />

<title>Envia e-mail</title>
</head>

<body>
<form id="envia_teste" name="envia_teste" method="POST" action="<?php echo $editFormAction; ?>">
 <label>Nome:
   <input type="text" name="nome" id="nome" />
 </label>
 <br />
 <br />
 <label>E-mail:
   <input type="text" name="email" id="email" />
 </label>
 <br />
 <br />
 <label>Mensagem:
   <textarea name="mensagem" id="mensagem" cols="40" rows="3"></textarea>
 </label>
 <br />
 <br />
 <label>
   <input type="submit" name="submit" id="submit" value="Submit" />
 </label>
 <input type="hidden" name="MM_insert" value="envia_teste" />
</form>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se já existe uma action para gravar na db, como vou colocar a action do phpmailer?

não precisa.

 

é só fazer assim:

if( formulario for enviado )
{
//código para inserir no bd
//código pra enviar por email
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Willian, está aparecendo o seguinte erro:

 

Parse error: syntax error, unexpected T_FOR in /home/storage/2/ed/05/sar10/public_html/teste/send_mail.php on line 2

 

Coloquei da seguinte forma

 

<?php

if( envia_teste for enviado )

{

 

inserir no bd

 

enviar por e-mail

 

}

?>

 

'envia_teste' é o nome do formulário

 

'enviado' qual seria esta variável?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O william deu um exemplo da lógica, em lingua portuguesa

deu erro pois o PHP não entende português, só PHP ;)

 

Beraldo, eu até pensei nisto. Mas como formulário estava sem acento e for faz parte da liguagem php, achei que se trava de duas expressões "formulario" e "enviado". Visto assim, que minha habilidade com php é mais leitura do que escrito, gostaria que alguém me desse uma luz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tá.. desculpe por não ter 'explicitado' que aquilo era um 'pseudo código'.

 

o

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "envia_teste")) {

é oque corresponde ao meu:

if( formulario for enviado )

entendeu?

 

 

veja esse trecho do teu código:

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "envia_teste")) {
 $insertSQL = sprintf("INSERT INTO teste (nome, email) VALUES (%s, %s)",
                      GetSQLValueString($_POST['nome'], "text"),
                      GetSQLValueString($_POST['email'], "text"));

 mysql_select_db($database_db_SAR10, $db_SAR10);
 $Result1 = mysql_query($insertSQL, $db_SAR10) or die(mysql_error());
}

é onde você faz o INSERT.

Já que você quer enviar um email, basta adicionar dentro deste bloco

 

 

ficaria assim:

 

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "envia_teste")) {
 $insertSQL = sprintf("INSERT INTO teste (nome, email) VALUES (%s, %s)",
                      GetSQLValueString($_POST['nome'], "text"),
                      GetSQLValueString($_POST['email'], "text"));

 mysql_select_db($database_db_SAR10, $db_SAR10);
 $Result1 = mysql_query($insertSQL, $db_SAR10) or die(mysql_error());

 //aqui você envia o email
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

galera, desculpe reabrir um tópico tão antigo, mas to com a mesma dúvida do marcelo2605.

Tentei fazer o que foi explicado. Tenho os mesmos campos, mas quero cadastrar apenas o e-mail.

 

Seguindo o post, o e-mail foi cadastrado, mas a msg que vai pro e-mail chega em branco.

marcelo2605, será que você poderia poostar seu código, por favor. Também uso o phpmailer.

 

vlw, galera

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.