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: 840
    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ódigoif(!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);