Ir para conteúdo

Arquivado

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

Makone

[Resolvido] Laço FOR

Recommended Posts

Senhores boa noite.

Como não sou nada intimo do nosso PHP, entao vir pedir ajuda de vocês.

MEu problema é o seguinte. Estou fazendo aquele famoso PHP + Flash, e tive que alterar algumas coisas do meu AS, por conta do arquivo PHP, pois bem. Este arquivo ele é provido pelo provedor, onde hospedo o site. Em uma certa parte do código, ele diz assim: # Loop para enviar os campos por e-mail. Ate ai tudo bem... mas eu gostaria de deixar que o formulário buscasse todos os campos dinamicos que o arquivo flash tem e buscasse alguns específicos... que são: NOME, EMAIL, ASSUNTO e MENSAGEM.

Segue o código:

 

<?php
# Verifica o método pelo qual a página foi chamada
if(strtolower($_SERVER['REQUEST_METHOD']) == "post"){
  
	  # Faz o include do PEAR Mail e do Mime.
	include ("Mail.php");
	include ("Mail/mime.php");

	#E-mail de destino. Caso seja mais de um destino, crie um array de e-mails.
	$recipients = 'EmailDeDestino@dominio.x-br.com';

	# Cabeçalho do e-mail.
	$headers = array
	(
	  'From'	=> "MeuEmail@meudominio.x-br.com", # O 'From' é *OBRIGATÓRIO*.
	  'Reply-To' => $_POST['email'], # Responder e-mail para um determinado destinatário
	  'To'	  => $recipients,
	  'Subject' => 'TITULO DO E-MAIL' # Título do e-mail
	);

	# Define o tipo de final de linha.
	$crlf = "\r\n";

	# Inicio do corpo da Mensagem e texto e em HTML.
	$html = "<HTML><BODY><font color=blue>";
  
	# Loop para enviar os campos por e-mail.
	foreach($_POST as $campo => $valor)
	{	
		if (stristr($valor,"Content-Type")) {
		header("HTTP/1.0 403 Forbidden");
		exit;
		}
		
		if($campo != 'redirect')
		{
		$html .= "<br>---------------------------<br>";
		$html .= ucfirst($campo) . " = $valor";
		}
		
	}
	
	# Fim do corpo da Mensagem e do texto em HTML.
	$html .= "<br>---------------------------";
	$html .= "</font></BODY></HTML>";
	
	# Instancia a classe Mail_mime.
	$mime = new Mail_mime($crlf);

	# Coloca o HTML no email
	$mime->setHTMLBody($html);

	# Procesa todas as informações.
	$body = $mime->get();
	$headers = $mime->headers($headers);

	# Parâmetros para o SMTP. *OBRIGATÓRIO*
	$params = array
	(
	  'auth' => true, # Define que o SMTP requer autenticação.
	  'host' => 'smtp.meudominio.x-br.com', # Servidor SMTP
	  'username' => 'email=meudominio.x-br.com', # Usuário do SMTP
	  'password' => 'SENHA DO EMAIL' # Senha do seu MailBox.
	);
	
	# Define o método de envio
	$mail_object =& Mail::factory('smtp', $params);

	# Envia o email. Se não ocorrer erro, retorna TRUE caso contrário, retorna um
	# objeto PEAR_Error. Para ler a mensagem de erro, use o método 'getMessage()'.
	$result = $mail_object->send($recipients, $headers, $body);
	if (PEAR::IsError($result))
	{
	# Caso apresente erro no envio do e-mail exibe a mensagem abaixo
	echo "ERRO ao tentar enviar o email. (" . $result->getMessage(). ")";
	}
	else
	{
	# Caso o envio seja realizado com sucesso, o usuário será redirecionado para o valor da variável $redirect
	  $redirect = $_POST['redirect'];
	header("Location: $redirect");
	exit;
	}

}
else
{
echo "Não foi passado nenhum campo!";
exit;
} ?>

Pois bem, na linha 27, que é esta aqui: foreach($_POST as $campo => $valor), alterei para: $valor = "nome: $nome\n\nEmail: $email\n\nAssunto: $assunto\n\nMensagem: $mensagem;, mas nã0 funcionou... entao eu pergunto para voces! O que posso alterar no código acima para que ele pegue somente 4 campos específicos em vez de pegar todos os campos dinamicamente...

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Explica direitinho como você fez essa mudança no foreach cara!

Não entendi a mudança...

Você retirou o foreach?

 

E você precisa somente dos quatro campos para enviar por email

NOME

EMAIL

ASSUNTO e

MENSAGEM

????

 

Se for isso você pode fazer algo como isso:

 

foreach ( $_POST as $campo => $value )
{
	if ( $campo == 'NOME' || $campo == 'EMAIL' || $campo == 'ASSUNTO' || $campo == 'MENSAGEM' )
	{
		//aqui é o que ja tinha dentro do foreach...
		if (stristr($valor,"Content-Type")) {
		header("HTTP/1.0 403 Forbidden");
		exit;
		}
		
		if($campo != 'redirect')
		{
		$html .= "<br>---------------------------<br>";
		$html .= ucfirst($campo) . " = $valor";
		}
	}
	// Então como podemos ver, caso não seja um dos campos que você quer
	// ele não passará no foreach...
}

Veja se é isso que você precisa!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Maykonn,

 

Obrigado pela resposta.

Bom, eu como não entendo muita coisa de PHP, vi que o foreach é o responsável por dar o loop para carregar os dados que vem do flash (me corrija se eu estiver errado). Dai minha idéia, era retirar o foreach e armazenar em uma variável, só que não funcionou. Então, vir recorrer À vocês pedindo uma solução. Ficou mais claro agora?

 

Abraço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta fazer do jeito que te falei!

Bom, se não funcionar talvez seja porque o nome dos campos no IF que eu fiz estão errados e então bastará que você pegue o nome correto dos campos dando um print_r($_POST) e então substituir o nome no IF!

Veja se funciona ok!

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.