Ir para conteúdo

POWERED BY:

Arquivado

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

Alexandro Zaleski

[Resolvido] Função de inserir para vários formulários

Recommended Posts

Boa tarde pessoal..

Eu estou começando com jQuery e estou com uma dúvida.

EU tenho um script que pega os valores de um formulário e envia eles para um arquivo .php que faz a inserção no banco de dados.

Até aí.. beleza. Mas o problema é que eu tenho em torno de 20 formulários no sistema que estou desenvolvendo e dessa forma eu teria que criar um arquivo js para cada form.

Teria alguma maneira de eu fazer uma função que pegue todos os dados de qualquer formulário e envie para um arquivo.php?

Vou postar o código que eu tenho.. ele funciona perfeitamente.. só que eu tenho que especificar todos os campos do formulário.

$(document).ready(function($) {
	// Quando o formulário for enviado, essa função é chamada
	$("#form").submit(function() {
		// Colocamos os valores de cada campo em uma váriavel para facilitar a manipulação
		var nome = $("#nome").val();
		var email = $("#email").val();
		var mensagem = $("#mensagem").val();

		// Fazemos a requisão ajax com o arquivo envia.php e enviamos os valores de cada campo através do método POST
		$.post('../exec/processa.php', {nome: nome, email: email, mensagem: mensagem }, function(resposta) {
				// Quando terminada a requisição
				// Se a resposta é um erro
				if (resposta != false) {
					// Exibe o erro na div
					alert(resposta);
				} 
				// Se resposta for false, ou seja, não ocorreu nenhum erro
				else {
					// Exibe mensagem de sucesso
					alert("Mensagem enviada com sucesso!");
					window.location=('../php/dominios_listar.php');
				}
		});
	});
});

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Alexandro.

 

Isso é possível de ser feito sim, montei um exemplo aqui: http://javascript.singuska.com/exemplos/zaleski

 

Você vai precisar utilizar o jQuery Form Plugin: http://jquery.malsup.com/form/

 

O código jQuery do exemplo é este:

 

$(function(){
    $('form').submit(function(e) {
	                
        e.preventDefault();
        var dadosForm = $(this).formSerialize();
		
        $.post('service.php', dadosForm, function(resposta){
            alert(resposta);	
        });
    });  
});

No exemplo temos dois formulários com campos diferentes:

 

	<form action="service.php" method="post">
		<fieldset>
			<label>Nome:</label>
			<input name="nome" type="text" />
			<label>Email:</label>
			<input name="email" type="text" />
			<input type="submit" />
		</fieldset>
	</form>
	
	<br /><br />
	
	<form action="service.php" method="post">
		<fieldset>
			<label>Apelido:</label>
			<input name="apelido" type="text" />
			<label>Skype:</label>
			<input name="skype" type="text" />
			<input type="submit" />
		</fieldset>
	</form>	

Fiz um PHP que varre a superglobal $_REQUEST e devolve uma resposta com todos os campos recebidos. Esta resposta é exibida no alert. Repare que os 2 formulários tem campos diferentes mas o JavaScript é exatamente o mesmo. A mágica é feita pelo método formSerialize do plugin. Como para o PHP (ou qualquer outra linguagem backend) o que interessa é o atributo name dos campos do formulário, este código fica totalmente flexível.

 

Não entendi direito o tratamento de erro que você havia feito com resposta != false. Acho que isso não funciona direito caso o request Ajax falhe. Isso porque $.post é somente um atalho para a $.ajax. Se você realmente precisar tratar o erro do Ajax, isso não é possível com $.post (ou qualquer outro atalho de $.ajax até onde eu sei).

 

Caso você esteja tratando somente o retorno do seu PHP, isso ficou estranho também. Pode até ser que funcione, mas resposta é sempre uma string e nunca vai ser um booleano.

 

Espero que funcione, um abraço...

Flávio

http://javascript.singuska.com/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Flávio..

Bah.. era bem isso que eu tava procurando mesmo..

Vou fazer uns testes.. obrigado pela ajuda.. qqr dúvida volto a postar ai..

Abraço e muito obrigado

 

Boa tarde Flávio..

Olha funcionou o cadastro.. o único problema é com os acentos.. estão sendo salvos no banco assim: áüãô

E depois são exibidos da mesma forma no site..

Tem alguma solução para isso?

E como eu faço para que depois de cadastrado, volte para uma página que eu determine.. pois depois de cadastrado ele fica parado no mesmo lugar, na página de cadastro e eu queria que ele voltasse para a página que lista os cadastros.. tem alguma forma?

Grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sobre os acentos, dá uma procurada na área Ajax deste fórum. Pode ser um monte de coisas, geralmente problema de enconding do banco de dados ou dos arquivos. Se o arquivo que tem este código JavaScript que a gente está discutindo for externo à página HTML, verifique se o arquivo está gravado como UTF-8 (se o seu editor permitir isto). A página HTML geralmente precisa ter no seu cabeçalho ou ISO-8859-1 ou UTF-8. Qual vai funcionar vai depender se você está mandando algum cabeçalho no header do seu PHP ou não, e também se o servidor HTTP está ou não mandando um cabeçalho.

 

Sobre a mudança de página, se for para voltar para uma lista de cadastros sempre igual, é só fazer:

 

alert(resposta);

ao invés de:

 

window.location = 'pagina.html';

Se for para mandar para uma página de lista de cadastros diferentes dependendo do formulário, uma das soluções seria colocar algo do tipo no form:

 

<input id="retorno" type="hidden" val="nome-pagina.html" />

E no JavaScript:

 

$(function(){
    $('form').submit(function(e) {
                        
        e.preventDefault();
        var dadosForm = $(this).formSerialize();
                
        $.post('service.php', dadosForm, function(resposta){
            var urlRetorno = $('#retorno').val();
            window.location = urlRetorno;
        });
    });  
});

Abs...

 

Flávio

http://javascript.singuska.com/

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.