Array
(
)

Tela branca, sem resposta - PHP

PHP
Gabriel
   - 11 mai 2016

Boa tarde pessoal, tudo bem?
Seguinte, fiz um código em PHP para receber uma lista de 4 itens (nome, telefone, dia da consulta e horário da consulta) para uma clínica médica, onde aparentemente tudo era pra estar funcionando. Hospedei tudo num site e fui fazer o teste, no entanto, na hora de clicar em "Enviar", o site redireciona para uma página em branco e o "formulário" não é enviado ao meu e-mail, alguém saberia me dizer o por quê?
Obrigado!

#Código

<?php
 
if(isset($_POST['email'])) {
 
     	// e-mail de destino
	$email_to = "grxgabriel@gmail.com";
 	$email_subject = "Agendamento de consulta";     
 
    
    function died($error) {
        // Código do erro
         echo "Alguns erros foram encontrados: 
 ";
         echo $error."<br/>";
        die();
 }
 

    // validation expected data exists
    if  ( !isset($_POST['name']) || !isset($_POST['phone']) || !isset($_POST['dia']) || !isset($_POST['hora']) ) 
	{		
	      died('Erro inesperado');      
  	} else {
          $name = $_POST['name']; // obrigatório
   	  $phone = $_POST['phone']; // obrigatório
  	  $dia = $_POST['dia']; // obrigatório
 	  $hora = $_POST['hora']; // obrigatório

	}



 
    $string_exp = " /^[A-Za-z .'-]+$/ ";
    $string_exp2 = "012345679 () - /";
 
  if(!preg_match($string_exp,$home)) {
     $error_message .= 'Nome inválido. <br/>'; 
  }
 
  if(!preg_match($string_exp2,$phone)) { 
    $error_message .= 'Telefone inválido.
'; 
  }
 
 
  if(strlen($error_message) > 0) {
     died($error_message); 
  }
 
    $email_message = "Detalhes abaixo.\n\n";

    function clean_string($string) {
 
      $bad = array("content-type","bcc:","to:","cc:","href");
      return str_replace($bad,"",$string); 
    }
     
 
    $email_message .= "Nome: ".clean_string($name)."\n"; 
    $email_message .= "Telefone: ".clean_string($phone)."\n";
    $email_message .= "Dia da consulta: ".clean_string($dia)."\n" 
    $email_message .= "Horário da consulta: ".clean_string($hora)."\n";
 
     
  
// Corpo do e-mail
 
$headers = 'From: '.$nome."\r\n".
 
'Reply-To: '.$name."\r\n" .
 
'X-Mailer: PHP/' . phpversion();
 
@mail($email_to, $email_subject, $nome, $phone, $dia, $hora, $headers);  
 ?>
 
 
 
<!-- include your own success html here -->
  
$echo = "Enviado com sucesso! \n Logo entraremos em contato!"; 
 
<?php
 }
 
?>

Darkseia
   - 11 mai 2016

E ae Gabriel, não manjo muito de php so vi na faculdade mesmo trabalho com java, porém acho que vi um erro, mas testa ae nao tenho certeza.

nessa linha tire o @ e faça um teste, nao tenho certeza se é isso!
#Código

@mail($email_to, $email_subject, $nome, $phone, $dia, $hora, $headers); 



deixe assim

#Código

mail($email_to, $email_subject, $nome, $phone, $dia, $hora, $headers); 



Depois fala se era isso...

Raylan
|
MVP
Pontos: 690
    11 mai 2016

O @, se não me engano, é pra suprimir mensagens de erro.

#Código

?>
  
  
  
<!-- include your own success html here -->
   
$echo = "Enviado com sucesso! \n Logo entraremos em contato!"; 
  
<?php
 }
  
?>


Parece errado. Tem uma varivável PHP recebendo valor, só que fora do bloco PHP. Verifique.

Gabriel
   - 11 mai 2016

Muito obrigado pela ajuda!

Realmente, o @ é pra verificação de mensagens de erro pelo que li, por isso o coloquei ali.

E a sintaxe final estava totalmente errada, corrigi o } e ele "funcionou", tentei e ele deu alguma resposta, disse que o "Nome estava inválido", no entanto, era falha do código, corrigi e novamente ele voltou a ficar na tela branca. Não sei o que possa ser. ):

#Edit
#Código

<?PHP
// Coloque a mensagem que irá ser enviada para seu e-mail abaixo: 
$data = "Mensagem enviada em ".date("d/m/Y").", dados abaixo:\n\n"; 
$name = $_POST['name'];

  
// Agora iremos fazer com que o PHP envie os dados do formulário para seu e-mail: 
mail("grxgabriel@gmail.com", "Agendamento de consulta", $data, "From: $REMOTE_ADDR"); 
 
echo "Seu e-mail foi enviado com sucesso. Obrigado"; 

?>

Gabriel
   - 11 mai 2016

Fiz diversos testes em um código mais simples, consegui fazer enviar, no entanto cheguei a conclusão de que o problema está em settar mais de 4 variáveis no método mail()!

Marlon Gera
   - 12 mai 2016

Bom dia mano... estava olhando seu código e vi que...

#Código

if(!preg_match($string_exp,$home))

A Variavel $home não está pre determinada na pagina que você mandou.

e como ja foi dito o
#Código
$echo = "Enviado com sucesso! \n Logo entraremos em contato!"; 

Estava fora do PHP.

e não entendi para que você está usando esta parte do código se não esta chamando pelo e-mail.

#Código
    $email_message .= "Nome: ".clean_string($name)."\n"; 
    $email_message .= "Telefone: ".clean_string($phone)."\n";
    $email_message .= "Dia da consulta: ".clean_string($dia)."\n" 
    $email_message .= "Horário da consulta: ".clean_string($hora)."\n";


Espero ter ajudado :)

William (devwilliam)
   - 12 mai 2016


Citação:
Fiz diversos testes em um código mais simples, consegui fazer enviar, no entanto cheguei a conclusão de que o problema está em settar mais de 4 variáveis no método mail()!


Olá Gabriel, eu sempre peço para o pessoal do fórum ler a documentação oficial da plataforma que estão desenvolvendo e tendo dúvidas, no seu caso da quantidade de parâmetros fica evidente que a função nativa "mail()" não aceita essa quantidade de parâmetros que você está tentando passar no código inicial.

Documentação função mail()

#Código

mail($email_to, $email_subject, $nome, $phone, $dia, $hora, $headers);