Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá,
Estou tendo um problema.
Tenho um formulário que capta algumas informações e depois envia o email
O meu código envia o email perfeitamente somente o textarea que não consigo enviar.
formulario.php:
>
<form method="POST" action="envio.php" target="central">
<fieldset><legend> Entre com seus dados: </legend>
<p><b>Nome:*</b> <input type="text" name="nome" size="20" maxlength="40" /></p>
<p><b>Email:*</b> <input type="text" name="email" size="40" maxlength="60"/></p>
<p><b>Telefone:*</b> <input type="text" name="tel" size="20" maxlength="13" /></p>
<p><b>Assunto:*</b> <input type="text" name="assunto" size="60" maxlength="70" /></p>
<p><b>Seu Email:*</b><br /><textarea name="corpo" rows="10" cols="55"></textarea></p><br />
</fieldset>
<div align="center"><input type="submit" name="submit" value="Enviar" /></div>
</form>
envio.php:
>
<?php
$emailenviar="negrao@localhost.com";
$nome=$_POST['nome'];
$email=$_POST['email'];
$tel=$_POST['tel'];
if(!empty($_POST['assunto'])){
$assunto=$_POST['assunto'];
}else{$assunto=NULL;}
if(!empty($_POST['corpo'])){
$corpo=$_POST['corpo'];
}else{$corpo=NULL;}
$mensagem =
"Nome: $nome
Email: $email
Telefone: $tel
Texto:
$corpo";
$mensagem = wordwrap($mensagem, 69);
mail($emailenviar,$assunto,$mensagem,'from: contato@site.com');
echo "Mensagem Enviada !!!";
?>
Mas quando chega o email ele aparece somente assim:
>
Nome: (o que foi escrito no campo nome)
Email: (o que foi escrito no campo email)
Telefone: (o que foi escrito no campo Telefone)
Texto: (vem em branco)
O que pode estar acontecendo?? Somente no textarea que ele não consegue pegar o texto e passar para a variável.
Se você der um var_dump, o conteúdo do textarea aparece aí?
var_dump($mensagem);
Eu testei aqui com o seu código e apareceu.
>
Faça primeiro os post, depois as condiçoes:
$nome=$_POST['nome'];
$email=$_POST['email'];
$tel=$_POST['tel'];
$assunto=$_POST['assunto'];
$corpo=$_POST['corpo'];
//depois faz as condicoes...
Continua com o mesmo erro :upset:
>
Se você der um var_dump, o conteúdo do textarea aparece aí?
var_dump($mensagem);
Eu testei aqui com o seu código e apareceu.
Não, ele aparece NULL.
Se eu dou um echo $corpo a mensagem aparece, mas ela é pega nas condições falando que é vazia :wacko:
Comente essas duas linhas para fazer um teste:
//if(!empty($_POST['corpo'])){ // comentar essa
$corpo=$_POST['corpo']; // <- deixar somente essa
//}else{$corpo=NULL;} // e comentar essa
ou valide dessa forma:
if($_POST['corpo']!= ""){
$corpo=$_POST['corpo'];
}else{$corpo=NULL;}
At+
>
Comente essas duas linhas para fazer um teste:
//if(!empty($_POST['corpo'])){ // comentar essa
$corpo=$_POST['corpo']; // <- deixar somente essa
//}else{$corpo=NULL;} // e comentar essa
ou valide dessa forma:
if($_POST['corpo']!= ""){
$corpo=$_POST['corpo'];
}else{$corpo=NULL;}
At+
Eu troquei a forma de validação.
Da esse erro Undefined index: $corpo
Quando eu tiro a forma de validação p/ esse campo ele funciona tranquilo. Manda o email com tudo certo.
O erro está na validação, mas não sei como corrigir.
Tentei fazer a validação assim:
$corpo=$_POST['corpo'];
if(empty ($_POST['$corpo'])){
echo "<br>Escreva uma mensagem no email</br>";
$erro=1;
}
mas continua dando erro, diz que o $corpo esta nulo
Cara,
No seu HTML, troque o nome do textarea para
<textarea name="testecorpo"></textarea>
, apenas para testarmos. Não esqueça de trocar também no script de recebimento dos dados.
"Undefined index", quer dizer que não está encontrando no array essa chave.
Abraços,
Você usou desta forma?
if($_POST['corpo']!= ""){
$corpo=$_POST['corpo'];
}else{
$corpo=NULL;
}Você pode dar um
var_dump($_POST)
também pra ver os dados que está recebendo.>
Continua com o mesmo erro :upset:
Não, ele aparece NULL.
Se eu dou um echo $corpo a mensagem aparece, mas ela é pega nas condições falando que é vazia :wacko:
Realmente muito estranho. Está parecendo que o problema é no ambiente, e talvez não no seu código. Tente em outro servidor e com outro navegador.
Aproveite e deixe todas as variáveis assim:
$var = @$_POST['campo'];
O '@' irá evitar erros do tipo 'Undefined index'.
Você pode dar um
var_dump($_POST)
também pra ver os dados que está recebendo.Gente, ai continua com erro
olha como já está meu código
formulario.php
<form method="POST" action="envio.php" target="central">
<fieldset><legend> Entre com seus dados: </legend>
<p><b>Nome:*</b> <input type="text" name="nome" size="20" maxlength="40" value="<?php if(isset($_POST['nome'])) echo $_POST['nome']?>" /></p>
<p><b>Email:*</b> <input type="text" name="email" size="40" maxlength="60" value="<?php if(isset($_POST['email'])) echo $_POST['email']?>"/></p>
<p><b>Telefone:*</b> <input type="text" name="tel" size="20" maxlength="13" value="<?php if(isset($_POST['tel'])) echo $_POST['tel'] ?>"/></p>
<p><b>Assunto:*</b> <input type="text" name="assunto" size="60" maxlength="70" value="<?php if(isset($_POST['assunto'])) echo $_POST['assunto'] ?>" /></p>
<p><b>Seu Email:*</b><br /><textarea name="testecorpo" rows="10" cols="55"><?php if(isset($_POST['testecorpo'])) echo $_POST['testecorpo'] ?></textarea></p><br />
</fieldset>
<div align="center"><input type="submit" name="submit" value="Enviar" /></div>
</form>
envio.php
<?php
var_dump($_POST)
//Recebimento das variaveis
$nome=@$_POST['nome'];
$email=@$_POST['email'];
$tel=@$_POST['tel'];
if (@$_POST['assunto']!=""){
$assunto=@$_POST['assunto'];
}else{$assunto=NULL;}
if (@$_POST['testecorpo']!=""){
$corpo=@$_POST['testecorpo'];
}else {$corpo=NULL;}
$destino="negrao@localhost.com";
//---------------------------------------------------------------------------------------
//Tratamento de erro
$erro=0;
if(!preg_match("/^[a-z A-Z]+$/",$nome)){
echo "<br>Escreva um Nome Válido (SOMENTE LETRAS)</br>";
$erro=1;
}
if(!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)@[a-z0-9-]+(\.[a-z0-9-]+)$/i",$email)){
echo "<br>Escreva um email válido</br>";
$erro=1;
}
if(!is_numeric($tel)){
echo "<br>Escreva um Telefone valido (somente números)</br>";
$erro=1;
}
if($assunto=NULL){
echo "<br>Escreva um assunto para o email</br>";
$erro=1;
}
if($corpo=NULL){
echo "<br>Escreva uma mensagem no email</br>";
$erro=1;
}
// Ação quando há erros
if($erro==1){
?>
<form method="POST" action="formulario.php" target="central">
<input type="hidden" name="nome" value="<?php echo $_POST['nome'] ?>" />
<input type="hidden" name="email" value="<?php echo $_POST['email'] ?>" />
<input type="hidden" name="telefone" value="<?php echo $_POST['tel'] ?>" />
<input type="hidden" name="assunto" value="<?php echo $_POST['assunto'] ?>" />
<input type="hidden" name="corpo" value="<?php echo $_POST['testecorpo'] ?>" />
<div align='center'><center><p>
<input type='submit' value='Voltar' name='voltar' />
</p></center></div>
</form>
<?php
// Ação quando não há erros
}else{
//Envio do EMAIL
$mensagem =
"
Nome: $nome
Email: $email
Telefone: $tel
Texto:
$corpo";
$mensagem = wordwrap($mensagem, 69);
mail($destino,$assunto,$mensagem,'from: contato@site.com');
echo "Mensagem Enviada !!!";
}
?>
Ele não acusa erros, mas também não coloca os textos nas variáveis $corpo e nem $assunto.
Ele ate envia o email mas faltando o conteúdo dessas 2 variáveis.
Cara coloca assim para ver se funciona:
$nome=$_POST['nome'];
$email=$_POST['email'];
$tel=$_POST['tel'];
$assunto=$_POST['assunto'];
$corpo=$_POST['testecorpo'];
if ($_POST['testecorpo']==""){
echo"<script>alert('Porfavor digite o texto');</script>";
}
Cara aqui rodou certinho.
Faça primeiro os post, depois as condiçoes:
//depois faz as condicoes...