Ir para conteúdo

POWERED BY:

Arquivado

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

Elektra

[Resolvido] Adicionar ". restrict ('%','&&#39

Recommended Posts

Não entendo nada de PHP, mas fui orientada (por moderador do AS3 - berseck) a usar o "restrict" nos campos do form de email (no PHP).

Não é preguiça de procurar, estou empenhada em auxiliar outro colega do fórum (Flash) a criar um banner e usar o action, testando outras opções que outro moderador (AS3 - inx) me enviou para o form em PHP, além dos compromissos naturais.

Mesmo sem muita noção, vou furungando no form, de tando editar já compreendo alguma coisa (testo de tudo, à exaustão), é para meu portfolio. Não tenho compromisso com cliente para algo além do meu conhecimento, estou apenas começando os estudos, sou apaixonada por Flash, e a formação web (em centro autorizado pela Adobe) não me ensinou isso, estou encarando por conta.

Aceito sugestões de artigos (ou tópicos) do fórum e sugestões de links para pesquisa com muita satisfação, toda ajuda é bem vinda.

O form só precisa deste detalhe para ficar 100%.

 

O form de email está publicado e funcionado, após muitos testes, recebi orientação para adicionar o restrict para estes caracteres. Não tenho conhecimento em PHP.

O código que uso é semelhante a esse, os campos são idênticos.

 

<?php
$contato_nome = $_POST['name'];
$contato_email = $_POST['email'];
$contato_assunto = $_POST['subject'];
$contato_mensagem = $_POST['message'];

if( $contato_nome == true )
{
	$sender = $contato_email;
	$receiver = "contato@meudominio.com.br";
	
	$email_body = "Name: $contato_nome \nEmail: $sender \n\nSubject: $contato_assunto\n\nMessage: \n\n$contato_mensagem";		
	$extra = "From: $sender\r\n" . "Reply-To: $sender \r\n" . "X-Mailer: PHP/" . phpversion();

	if( mail( $receiver, "Contato - $contato_assunto", $email_body, $extra ) ) 
	{
		echo "success=yes";
	}
	else
	{
		echo "success=no";
	}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Elektra, seus dois tópicos foram unidos em um só.

 

Evite duplicar tópicos com o mesmo conteúdo.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

pelo que entendi você quer que o formulario nao tolere os caracteres % e &, se nao for isso nem leia o resto...

 

str_replace - Substitui todas as ocorrências da string de procura com a string de substituição

 

use este codigo.

<?php


function birosqueta($x){
$remova = array('%', '&', '¨');
$g  = str_replace($remova, "", $x);
return $g;
}


$nome = $_POST['name'];
$email = $_POST['email'];
$assunto = $_POST['subject'];
$mensagem = $_POST['message'];
$contato_nome = birosqueta($nome);
$contato_email = birosqueta($email);
$contato_assunto = birosqueta($assunto);
$contato_mensagem = birosqueta($mensagem);

if( $contato_nome == true )
{
        $sender = $contato_email;
        $receiver = "contato@elzapereira.com.br";
        
        $email_body = "Name: $contato_nome \nEmail: $sender \n\nSubject: $contato_assunto\n\nMessage: \n\n$contato_mensagem";           
        $extra = "From: $sender\r\n" . "Reply-To: $sender \r\n" . "X-Mailer: PHP/" . phpversion();

        if( mail( $receiver, "Flash Contact Form - $contact_subject", $email_body, $extra ) ) 
        {
                echo "success=yes";
        }
        else
        {
                echo "success=no";
        }
}
?>

 

se for isso mesmo, e ainda se funcionar, é 5 conto :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Elektra, seus dois tópicos foram unidos em um só.

 

Evite duplicar tópicos com o mesmo conteúdo.

 

;)

 

Por favor me desculpe.

Desconheço a sintaxe do PHP, me ocorreu que o título do tópico não fosse claro o suficiente, daí a tentativa.

Não queria abusar do colega que me auxiliou (moderador berseck - AS3)e deu um toque sobre o que procurar para corrigir esta falha.

Se possível, peço a gentileza em remover o post onde consta meu endereço. Isso também foi uma falha de minha parte.

Muito obrigada.

Um abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

pelo que entendi você quer que o formulario nao tolere os caracteres % e &, se nao for isso nem leia o resto...

 

str_replace - Substitui todas as ocorrências da string de procura com a string de substituição

 

use este codigo.

<?php

 

 

function birosqueta($x){

$remova = array('%', '&', '¨');

$g = str_replace($remova, "", $x);

return $g;

}

 

 

$nome = $_POST['name'];

$email = $_POST['email'];

$assunto = $_POST['subject'];

$mensagem = $_POST['message'];

$contato_nome = birosqueta($nome);

$contato_email = birosqueta($email);

$contato_assunto = birosqueta($assunto);

$contato_mensagem = birosqueta($mensagem);

 

 

se for isso mesmo, e ainda se funcionar, é 5 conto :P

 

 

 

geektr, obrigada pela atenção.

 

Como mencionei o código que uso é semelhante a este, após muitas tentativas, consegui resolver a codificação para não desconfigurar palavras acentuadas quando recebo a mensagem.

Os campos que uso são com utf8-decode, e foram acrescidas duas linhas $extra.

De tanto testar, descobri que faltava esse detalhe.

 

Se for digitado "&" trava, e a mensagem não é enviada (em qualquer lugar do form).

O símbolo de porcentagem é aceito, mas não é exibido quando recebo.

 

Pelo que compreendi devo acrescentar as linhas onde você cria a function, e depois relacionar o nome com cada campo.

 

Vixe, tô ralando há tanto tempo com esse form, de metida, com a ajuda de muitos amigos falta pouco para ficar perfeito.

 

Vou testar! Aceita VISA, prefere por boleto, em dólares? é só falar.

Abraço, dou retorno em breve.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi geektr.

Testei o seu código, além do "&", agora trava também com "%" (porcentagem) e "ü" (trema).

 

No original, é possível digitar o símbolo "%", mas recebo sem visualizar.

Vi que você adicionou também o "trema" as restrições, mas não é necessário, não causa impedimento para enviar e sempre foi exibido normalmente.

 

Como mencionei, tive dúvidas ao me expressar corretamente sobre o título do tópico.

Não sei exatamente o que significa "restringir" caracteres.

 

O uso do símbolo de porcentagem é o de menos, dá para deduzir o uso.

 

Na minha observação de leiga no PHP, o mais importante, no momento, é não travar para enviar com o "&".

 

Continuo disposta a gastar os 5 contos, sem xororô. Testo à exaustão.

 

Obrigada pela disposição em auxiliar.

Um abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se possível, peço a gentileza em remover o post onde consta meu endereço. Isso também foi uma falha de minha parte.

 

Elektra, como o segundo POST continha uma descrição mais detalhada do problema, editei o primeiro para conter essa descrição e então removi o segundo (que contém seu endereço).

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Se possível, peço a gentileza em remover o post onde consta meu endereço. Isso também foi uma falha de minha parte.

 

Elektra, como o segundo POST continha uma descrição mais detalhada do problema, editei o primeiro para conter essa descrição e então removi o segundo (que contém seu endereço).

 

;)

 

Muito obrigada João.

 

Sempre confiro e edito o conteúdo dos meus posts, mas ainda não descobri se é possível editar o título do tópico.

Estou por aqui não faz muito tempo, sempre disposta a aprender.

Foi cansaço e descuido de minha parte. Vou ficar mais atenta.

 

Um abraço http://forum.imasters.com.br/public/style_emoticons/default/grin.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pela minha falta de conhecimento dos termos corretos, formulei mal minha pergunta.

 

Vou tentar me expressar melhor.

 

Aqui no fórum posso digitar "secos & molhados", isso não impede que o post seja publicado, e a leitura do caracter "&" seja exibido. No meu formulário, posso digitar, mas o uso do "&" impede que a mensagem seja enviada (trava).

Ao inserir os posts no Imasters posso digitar "100% beleza", a leitura ao publicar é idêntica. No meu caso, quando recebo a mensagem no meu servidor leio "100beleza".

 

Sei que as linguagens de programação tem caracteres reservados (ou restritos).

Preciso compreender o que é necessário para meu formulário não tenha problemas quanto ao uso destes sinais gráficos.

 

Não espero uma solução pronta, aceito uma sugestão de quais os "termos adequados"

para pesquisar. Isso fica difícil para quem não domina o assunto.

Obrigada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, vamos por partes.

 

- O formulário em flash apenas vai substituir o formulário em HTML e em nada tem a ver com o PHP.

- O código para enviar o formulário em PHP pode ficar melhor.

 

Então, tente criar um formulário em HTML normal e enviar os dados. Se funcionar, o problema é no Flash. Se não funcionar, aí o problema vai ser no PHP mesmo.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, vamos por partes.

 

- O formulário em flash apenas vai substituir o formulário em HTML e em nada tem a ver com o PHP.

- O código para enviar o formulário em PHP pode ficar melhor.

 

Então, tente criar um formulário em HTML normal e enviar os dados. Se funcionar, o problema é no Flash. Se não funcionar, aí o problema vai ser no PHP mesmo.

 

Carlos Eduardo

 

Oi Matias, tudo bem. Obrigada pela atenção.

 

O código que uso não está igual ao que publiquei, por respeito ao desenvolvedor (berseck) que me auxiliou, mas está publicado e funciona perfeitamente, codificação adequada, acentuação correta ao receber a mensagem no email do meu servidor (DialHost).

 

Após testar exaustivamente descobri que o uso destes dois caracteres ofereciam limitações.

 

Nunca usei um formulário em html + PHP. Minha formação web não ensinou isso.

É o meu primeiro contato com esta linguagem, baixei um template, editei e o colega me ajudou com os ajustes no PHP para aceitar a acentuação.

No action não foi necessário nenhuma alteração, dois colegas desenvolvedores tiveram acesso aos arquivos e testaram. Ambos indicaram a necessidade de ajustes no PHP e isso foi feito.

 

Só falta este detalhe para que fique perfeito.

 

Desculpe a sinceridade, mas não vou testar no html. Já ouvi isso em outro tópico que publiquei sobre acentuação, a pane estava no PHP mesmo.

 

Não espero uma solução pronta, agradeço sugestões de links para pesquisar sobre o assunto.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual codificação está usando? UTF-8 ou ISO-8859-1 nos seus arquivos flash? Adicione a meta tag ao código PHP.

 

header ('Content-type: text/html; charset=utf-8');

Trocando o content-type de acordo com a codificação do seu arquivo flash.

 

Veja se resolve.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual codificação está usando? UTF-8 ou ISO-8859-1 nos seus arquivos flash? Adicione a meta tag ao código PHP.

 

header ('Content-type: text/html; charset=utf-8');

Trocando o content-type de acordo com a codificação do seu arquivo flash.

 

Veja se resolve.

 

Carlos Eduardo

 

Oi Carlos Eduardo.

 

No PHP estou usando charset utf-8, e nos campos utf8_decode. O index em html também usa charset utf-8.

O Action dispensa codificação, nem mesmo a linha "System.useCodePage = true;" sugerida na documentação da Adobe é necessária.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente tirar o utf8_decode e adicionar a linha que eu falei ao seu código PHP (que recebe os dados do flash). Veja que estou na tentativa e erro, já que eu nunca vi problema parecido com este, mas também nunca trabalhei com formulário de contato em Flash.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro amigo, todas estas tentativas referentes a codificação eu já fiz.

Só após adicionar 2 linhas a mais no PHP ,alterar para charset utf-8 e usar o decode nos campos, passei a receber a mensagem com a acentuação correta.

 

Por acaso o PHP não possui caracteres reservados (proibidos)? Todas as linguagens de programação tem, embora eu desconheça quais sejam.

 

Isso não tem relação a codificação.

Preciso saber como lidar com esta "restrição", para que o usuário digite o "&" e isso não impeça que a mensagem seja enviada.

 

Ando pesquisando em livros de PHP, mas ainda não achei nada a respeito. É complicado para quem não conhece a linguagem. O colega que me ajudou com o form informou que nem todos conhecem este tipo de situação. Eu descobri por "acaso", porque testo zilhões de vezes tudo o que faço.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por acaso o PHP não possui caracteres reservados (proibidos)?

 

Eu desconheço. Existem palavras reservadas, mas caracteres, eu não conheço.

 

Acho que descobri o que pode ser. Você não está enviando o e-mail como HTML. Então, vamos testar uma situação:

 

Troque a linha da $extra para esta.

$extra = "Content-Type:text/html; charset=utf-8\r\nFrom: $sender\r\n" . "Reply-To: $sender \r\n" . "X-Mailer: PHP/" . phpversion();

Veja se resolve. De qualquer forma, vai criar outro problema, pois a quebra de linha no conteúdo não vai mais funcionar. Aí, na $email_body, você troca o \r\n por <br/> para quebrar a linha.

 

Veja o que acontece.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Matias, eu avisei que não entendia nada de PHP, tive dificuldade até para formular o tópico.

Quanto a existir caracteres reservados foi orientação que recebi de um developer que trabalha com PHP e me auxiliou a corrigir as falhas para que meu form exibisse a mensagem com acentuação correta.

 

Se você nunca enfrentou algo semelhante com um form PHP + AS3, não faz idéia de tudo que já testei e pesquisei por conta até encontrar auxílio.

Sua sugestão é geral, eu preciso de algo específico.

 

Mesmo assim, agradeço pelo seu interesse em tentar me auxiliar.

Mas penso sinceramente que o caminho seja outro.

 

Um abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Elektra,

 

Vamos tentar resolver isso, coloque aqui no fórum o AS atual, que você está utilizando para enviar o formulário para o PHP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Elektra,

 

Vamos tentar resolver isso, coloque aqui no fórum o AS atual, que você está utilizando para enviar o formulário para o PHP.

 

Oi João, obrigada.

Peço desculpas por não postar também o PHP na íntegra, realmente é por respeito a quem me auxiliou. Vejo o critério do colega em auxiliar, e não me sinto no direito de publicar algo que não foi feito por mim.

 

Vou deixar o link para o form, fique à vontade para testar. Form PHP + AS3 (agradeço, se depois remover o link, é apenas uma página de estudo)

Aqui um print de como estou recebendo a mensagem do meu email do DiaL Host: Clique aqui

 

O AS3 que estou usando, foi de um template que baixei do flashmo.com, não precisou nenhuma alteração, apenas editei de acordo com as instâncias dos componentes que uso e adicionei as mensagens de alerta em português.

 

 

Abraços

 

contato_nome.text = contato_email.text = contato_assunto.text = 
contato_mensagem.text = mensagem_status.text = "";

enviar_btn.addEventListener(MouseEvent.CLICK, envia);
limpar_btn.addEventListener(MouseEvent.CLICK, limpa);

var timer:Timer;
var var_load:URLLoader = new URLLoader;
var URL_request:URLRequest = new URLRequest( "send_email.php" );
URL_request.method = URLRequestMethod.POST;

function envia(e:MouseEvent):void
{
	if( contato_nome.text == "" || contato_email.text == "" ||
		contato_assunto.text == "" || contato_mensagem.text == "" )
	{
		mensagem_status.text = "Por favor preencha todos os campos de texto.";
	}
	else if( !validate_email(contato_email.text) )
	{
		mensagem_status.text = "Por favor informe um endereço de email válido.";
	}
	else
	{
		mensagem_status.text = "enviando...";
		
		var email_data:String = "name=" + contato_nome.text
					   + "&email=" + contato_email.text
					   + "&subject=" + contato_assunto.text
					   + "&message=" + contato_mensagem.text;
					   
		var URL_vars:URLVariables = new URLVariables(email_data);
		URL_vars.dataFormat = URLLoaderDataFormat.TEXT;
		
		URL_request.data = URL_vars;
		var_load.load( URL_request );
		var_load.addEventListener(Event.COMPLETE, receive_response );
	}
}

function limpa(e:MouseEvent):void
{
	contato_nome.text = contato_email.text = contato_assunto.text = 
	contato_mensagem.text = mensagem_status.text = "";
}

function validate_email(s:String):Boolean 
{
	var p:RegExp = /(\w|[_.\-])+@((\w|-)+\.)+\w{2,4}+/;
	var r:Object = p.exec(s);
	if( r == null ) 
	{
		return false;
	}
	return true;
}

function receive_response(e:Event):void
{
	var loader:URLLoader = URLLoader(e.target);
    var email_status = new URLVariables(loader.data).success;
	
	if( email_status == "yes" )
	{
		mensagem_status.text = "Sua mensagem foi enviada com sucesso.";
		timer = new Timer(500);
		timer.addEventListener(TimerEvent.TIMER, on_timer);
		timer.start();
	}
	else
	{
		mensagem_status.text = "Falha. Sua mensagem não foi enviada.";
	}
}

function on_timer(te:TimerEvent):void 
{
	if( timer.currentCount >= 10 )
	{
		contato_nome.text = contato_email.text = contato_assunto.text = 
		contato_mensagem.text = mensagem_status.text = "";
		timer.removeEventListener(TimerEvent.TIMER, on_timer);
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

		var email_data:String = "name=" + contato_nome.text
				 + "&email=" + contato_email.text
				 + "&subject=" + contato_assunto.text
				 + "&message=" + contato_mensagem.text;

Certo, ai está o problema, veja:

 

O & e o % são utilizados para codificar ou delimitar uma URL, por exemplo:

 

variavel1=valor&variavel2=outrovalor

 

Isso significa que se em algum dos seus campos você passar algum desses caracteres você terá uma URL que não reflete a localização que você precisa.

Para você passar o & em uma URL você precisa convertê-lo para %26. Agora veja só, o % é utilizado para os caracteres especiais, para usar um % na URL você precisa convertê-lo para %25.

 

Vamos tentar resolver primeiro o AS:

var request:URLRequest = new URLRequest( 'enviar.php' ); //veja que aqui coloquei só o nome do arquivo, você deve colocar o caminho para alcançar o enviar.php
var variables:URLVariables = new URLVariables(); //Esse kara vai fazer o trabalho de enviar o & e o % para você
var loader:URLLoader = new URLLoader();

variables.name		= contato_nome.text;
variables.email		= contato_email.text;
variables.subject	= contato_assunto.text;
variables.message	= contato_mensagem.text;

request.data		= variables;
request.method		= URLRequestMethod.POST; //Vamos usar POST, se quiser usar GET é só trocar a constante (não recomendo)

loader.load( request );
loader.addEventListener( Event.COMPLETE , receive_response );

Agora no PHP:

enviar.php

if ( isset( $_POST[ 'name' ] ) && isset( $_POST[ 'email' ] ) && isset( $_POST[ 'subject' ] ) && isset( $_POST[ 'message' ] ) ){
$name =& $_POST[ 'name' ];
$email =& $_POST[ 'email' ];
$subject =& $_POST[ 'subject' ];
$message =& $_POST[ 'message' ];

$sender =& $email;
$receiver = "contato@meudominio.com.br";

$body = sprintf( "Name: %s\nEmail: %s\nSubject: %s\n\nMessage: \n\n%s" , $name , $sender , $subject , $message );
$header = sprintf( 'From: %s\r\nReply-To: %s\r\nX-Mailer: PHP/%s\r\n' , $sender , $sender , phpversion() );

echo sprintf( 'success=%s' , mail( $receiver , sprintf( 'Contato - %s' , $subject ) , $body , $header ) ? 'yes' : 'no' );
} else echo 'success=no';

 

Faça o teste e coloque aqui o resultado.

 

Se não funcionar faremos um teste usando um form HTML para identificar a origem do problema.

 

 

;)

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.