Ir para conteúdo

POWERED BY:

Arquivado

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

Igor José

Executar função PHP ao acionar form com action

Recommended Posts

Galera, estou com um problema aqui e não encontrei nenhuma solução.. Eu tenho um form que possuí um action para uma URL externa (do pagseguro no caso), nessa mesma página onde existe o form tem também uma função PHP que é executada sempre que a página é acessada, ele faz um registro no banco de dados.

 

O que eu preciso fazer é que essa função PHP seja executada somente quando o form for acionado, porém não consigo fazer isso por que ele envia os posts para uma URL externa.. Tem outra forma de fazer isso?

if($erro==''){
    // Cadastrar a abertura da transacao no banco
    $SQL = "insert into pagseguro (DtCad,TipoVenda) values 
            ('$agora','{$_POST['acao']}')";
    $res=mysql_query($SQL);

    if($res){$codVenda = mysql_insert_id();}else{ $erro='Desculpe erro ao tentar registrar a transação!';}
}

<form name="pagseguro" id="pagseguro" method="post" action="https://pagseguro.uol.com.br/checkout/checkout.jhtml">
    <button type="submit" name="submit_pagamento" id="submit_pagamento" value="pagar_ps" title="Realizar pagamento com PagSeguro" class="btn-mega">Pagar com PagSeguro</button>
    </form>

Todos os códigos estão na mesma página PHP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já tentou pegar os valores e enviar para um arquivo php via ajax após o usuário clicar no submit?

Dessa forma você vai ter os dados salvos e vai seguir o mesmo rumo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

talvez tenha que checar se o form foi submetido

if(isset($_POST['acao'])){
    // faz o que tem que fazer...
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 minuto atrás, jamesbond disse:

Já tentou pegar os valores e enviar para um arquivo php via ajax após o usuário clicar no submit?

Dessa forma você vai ter os dados salvos e vai seguir o mesmo rumo.

 

Então, um outro colega meu aqui me falou exatamente isso, mas não sei como fazer rsrs

 

Ele falou que é muito simples, mas como não tenho muito conhecimento se torna difícil.

 

2 minutos atrás, marsolim disse:

talvez tenha que checar se o form foi submetido


if(isset($_POST['acao'])){
    // faz o que tem que fazer...
}

 

 

Isso não funciona quando o POST é enviado para uma URL externa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá igor ! tudo bem ?

 

Já respondi a uma questão idêntica num outro post !

 

Da um vista de olhos no código é bem fácil de utilizar !

 

Qualquer duvida só dizeres

 

Abraço

Vítor Mendes

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 minutos atrás, Vitor Mendes disse:

Olá igor ! tudo bem ?

 

Já respondi a uma questão idêntica num outro post !

 

Da um vista de olhos no código é bem fácil de utilizar !

 

Qualquer duvida só dizeres

 

Abraço

Vítor Mendes

 

 

 

 

Olá Vitor, legal sua dica! No caso como ficaria via POST?

Compartilhar este post


Link para o post
Compartilhar em outros sites
16 minutos atrás, Igor José disse:

Olá Vitor, legal sua dica! No caso como ficaria via POST?

 

Fica quase da mesma maneira vou deixar o código transformado para post para veres

Se bem que no caso tanto faz ser post ou get porque o user nem vai ver o link a alterar nem a pagina a ser actualizada..

mas cá vai com post 

function envia_formulario()
{
		NO CASO EU VOU USAR O GET SE QUISERES USAR O POST É SÓ ALTERAR A ESTRURA CASO NÃO CONSIGAS DIZ-ME QUE EU DOU-TE UMA AJUDA	


	// Criar um objeto XMLHttpRequest
    if (window.XMLHttpRequest) {
        // código para IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }
	else
	{
        // código para IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
	// Criar a função a ser executada quando a resposta do servidor estiver pronta
    xmlhttp.onreadystatechange = function()
	{
		// verificar se a operação de request foi completada, quer tenha tido sucesso ou não ( readyState==4 )
		// e se teve sucesso ( status==200 )
        if (this.readyState == 4 && this.status == 200)
		{
            //
			// Se quisermos alterar a página corrente, com base na resposta do servidor
			// (ou seja, o conteúdo gerado pelo ficheiro chamado no servidor), usamos
			// código similar ao seguinte ( responseText é uma string com a resposta do servidor;
			// fica com valor null se o request não teve sucesso ou se ainda não foi enviado ao servidor.
			//
					
			//NO FICHEIRO PHP ->ficheirophp ONDE TENS AS INTRUÇÕES SQL PODES FAZER UM ECHO POR EXEMPLO SE O NAO HOUVE ERROS ECHO OK
			//SE HOUVE ERROS ECHO ERRADO

					//DEPOIS AQUI PODES VERIFICAR ISSO	
				
					if(this.responseText.trim() == "ok")
					{
						alert ("Registo Bem submetido!!")
					}
 					else
					{
						alert ("Ocurreu um erro por favor tente mais tarde!");
					}
				


		}
    };
	// Enviar o request para um ficheiro no servidor
	//ficheirophp é ficheiro onde vais ter o código com as intruções sql
    xmlhttp.open( "POST", "ficheirophp.php" , true);
	xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xhttp.send("nome=" + document.getElementById("nome_cliente").value);
}

<input type="text" id="nome" name="nome" required="" /> 

<input type="button" value="Limpar" style="float:right";  onClick="envia_formulario()"/>

 

 

 

E no ficheiro php também se terá de alterar e fica da seguinte maneira :

 

<?php

/* ligar à base de dados  */
$ligacao = mysqli_connect("localhost","root","","name_bd");
mysqli_set_charset($ligacao,"utf8");

// guardamos a variavel que vem do get numa variavel temporaria $nome_user
// mysqli_real_escape_string é para proteção contra o mysql injection deves usar!

 $nome_user = mysqli_real_escape_string($ligacao,$_POST["nome"]);

//instrução sql
$sql = "INSERT INTO nomes (nome)
VALUES ('".$nome_user."')";

/* executar a instrução SQL e guardar o seu
   resultado em $resultado */
$resultado = mysqli_query( $ligacao, $sql );


if($resultado)
{
echo "ok"; //registo concluido com sucesso , este echo  têm de estar aqui para que depois seja mostrado um alert la na outra página com a mensagem que quiseres ele va funcionar como uma variavel... havia outra maneira porêm esta é a mais simples e eu ja tenho usado sem problemas
}
else
{
echo "errado";
}






?>

 

Pronto acho que não me esqueci de nada experimenta ai...

 

Podes encontrar mais informações sobre o request  neste site pode ser util ate para perceber como funciona !

https://www.w3schools.com/xml/ajax_xmlhttprequest_send.asp

 

 

Boa sorte !

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Igor já viste o exemplo que te dei ? 

 

Não precisa de nenhuma form ...

 

 

É fácil apenas vai ter de ter duas funções uma que te vai submeter o formulário no pagseguro 

E outra que vai fazer o segundo post para um ficheiro php onde vais inserir os dados na bd apenas isto!

 

Quando a 1º função tiver enviado o formulário para o url externo pagseguro ai chamas a outra função que te vai inserir os dados na bd apenas isto.

E de que função estou falar  ?

 

function envia_formulario()
{
		NO CASO EU VOU USAR O GET SE QUISERES USAR O POST É SÓ ALTERAR A ESTRURA CASO NÃO CONSIGAS DIZ-ME QUE EU DOU-TE UMA AJUDA	


	// Criar um objeto XMLHttpRequest
    if (window.XMLHttpRequest) {
        // código para IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }
	else
	{
        // código para IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
	// Criar a função a ser executada quando a resposta do servidor estiver pronta
    xmlhttp.onreadystatechange = function()
	{
		// verificar se a operação de request foi completada, quer tenha tido sucesso ou não ( readyState==4 )
		// e se teve sucesso ( status==200 )
        if (this.readyState == 4 && this.status == 200)
		{
            //
			// Se quisermos alterar a página corrente, com base na resposta do servidor
			// (ou seja, o conteúdo gerado pelo ficheiro chamado no servidor), usamos
			// código similar ao seguinte ( responseText é uma string com a resposta do servidor;
			// fica com valor null se o request não teve sucesso ou se ainda não foi enviado ao servidor.
			//
					
			//NO FICHEIRO PHP ->ficheirophp ONDE TENS AS INTRUÇÕES SQL PODES FAZER UM ECHO POR EXEMPLO SE O NAO HOUVE ERROS ECHO OK
			//SE HOUVE ERROS ECHO ERRADO

					//DEPOIS AQUI PODES VERIFICAR ISSO	
				
					if(this.responseText.trim() == "ok")
					{
						alert ("Registo Bem submetido!!")
					}
 					else
					{
						alert ("Ocurreu um erro por favor tente mais tarde!");
					}
				


		}
    };
	// Enviar o request para um ficheiro no servidor
	//ficheirophp é ficheiro onde vais ter o código com as intruções sql
    xmlhttp.open( "POST", "ficheirophp.php" , true);
	xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xhttp.send("nome=" + document.getElementById("nome_cliente").value);
}

Como te tinha mostrado já lá em cima...

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
// Enviar o request para um ficheiro no servidor
	//ficheirophp é ficheiro onde vais ter o código com as intruções sql
    xmlhttp.open( "POST", "ficheirophp.php" , true);
	xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xhttp.send("nome=" + document.getElementById("nome_client

Está bem comentado ....

 

ficheirophp.php é uma url no caso se quer que envie para pagseguro mete a url do pagseguro se quer que envie para um ficheiro php mete a url do ficheiro php ...

 

 

// Enviar o request para um ficheiro no servidor
	//ficheirophp é ficheiro onde vais ter o código com as intruções sql
    xmlhttp.open( "POST", "https://pagseguro.uol.com.br/#rmcl" , true);
	xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xhttp.send("nome=" + document.getElementById("nome_client

 

 

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo, mas se eu colocar a URL do pagseguro ali como é que vou executar a função PHP para inserir os dados no DB?

Compartilhar este post


Link para o post
Compartilhar em outros sites

kkkkk

Vou te dar um exemplo então ja que tu não estás a entender

 

function envia_pag_seguro()
{
		NO CASO EU VOU USAR O GET SE QUISERES USAR O POST É SÓ ALTERAR A ESTRURA CASO NÃO CONSIGAS DIZ-ME QUE EU DOU-TE UMA AJUDA	


	// Criar um objeto XMLHttpRequest
    if (window.XMLHttpRequest) {
        // código para IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }
	else
	{
        // código para IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
	// Criar a função a ser executada quando a resposta do servidor estiver pronta
    xmlhttp.onreadystatechange = function()
	{
		// verificar se a operação de request foi completada, quer tenha tido sucesso ou não ( readyState==4 )
		// e se teve sucesso ( status==200 )
        if (this.readyState == 4 && this.status == 200)
		{
			// aqui chamamos a 2º função que irá introduzir os dados na bd
           insere_dados();

		}
    };
	// Enviar o request para um ficheiro no servidor
	//ficheirophp é ficheiro onde vais ter o código com as intruções sql
    xmlhttp.open( "POST", "https://pagseguro.uol.com.br/#rmcl" , true);
	xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	// aqui vai meter os dados do formulario que quer que sejam enviado no post!
	xhttp.send("nome=" + document.getElementById("nome_cliente").value);
}

function insere_dados()
{
		NO CASO EU VOU USAR O GET SE QUISERES USAR O POST É SÓ ALTERAR A ESTRURA CASO NÃO CONSIGAS DIZ-ME QUE EU DOU-TE UMA AJUDA	


	// Criar um objeto XMLHttpRequest
    if (window.XMLHttpRequest) {
        // código para IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }
	else
	{
        // código para IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
	// Criar a função a ser executada quando a resposta do servidor estiver pronta
    xmlhttp.onreadystatechange = function()
	{
		// verificar se a operação de request foi completada, quer tenha tido sucesso ou não ( readyState==4 )
		// e se teve sucesso ( status==200 )
        if (this.readyState == 4 && this.status == 200)
		{
			// aqui chamamos a 2º função que irá introduzir os dados na bd
           insere_dados();

		}
    };
	// Enviar o request para um ficheiro no servidor
	//ficheirophp é ficheiro onde vais ter o código com as intruções sql
    xmlhttp.open( "POST", "FICHEIRO.PHP" , true);
	xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	// aqui vai meter os dados do formulario que quer que sejam enviado no post!
	xhttp.send("nome=" + document.getElementById("nome_cliente").value);
}

<input type="text" id="nome" name="nome" required="" /> 

<input type="button" value="envia" style="float:right";  onClick="envia_pag_seguro()"/>

Pronto assim como está ja funciona ...

 

Depois tens de criar um ficheiro php que terá as instruções sql e metes a URL desse ficheiro php na segundo função substituis onde está "FICHEIRO.PHP" se fizeres isto já vai funcionar.

Eu nunca usei isso no pagseguro quando fazes um post , retorna algo ou não ?

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ahh sim, no caso da função insere_dados precisa chamar a mesma função de volta?

 

Essa parte aqui ta repetindo na segunda função:

// aqui chamamos a 2º função que irá introduzir os dados na bd
           insere_dados();

		}

Precisa ser removido né?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Vitor Mendes Testei aqui e estou com o seguinte problema:


 

XMLHttpRequest cannot load https://pagseguro.uol.com.br/checkout/checkout.jhtml. Redirect from 'https://pagseguro.uol.com.br/checkout/checkout.jhtml' to 'https://pagseguro.uol.com.br/checkout/error.jhtml' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://www.meudominio.com' is therefore not allowed access.

 

E ele não esta abrindo a página do pagseguro quando clica no botão, ele deve enviar o post para a URL do pagseguro e abrir essa URL para levar o cliente ao checkout.

Compartilhar este post


Link para o post
Compartilhar em outros sites

humm pois nesse caso é diferente se quer exibir a página ai terá de optar por outro esquema....

 

Vai ter de guardar os seu campos do formulário em variáveis de sessão por exemplo ai utiliza uma dessas funções que vai abrir um ficheiro php onde irá guardar os campos em variáveis de sessão.

 

Depois disso vai submeter uma form que no action terá o link do pagseguro

 

E só depois poderá mandar os dados que estão nas variáveis de sessão para a base de dados no fim fazes o unset as variáveis que utilizaste.

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera, tudo certo?
       
      Seguinte: No servidor A estou tentando fazer uma consulta com o servidor B, mas está dando erro.
      Estou usando o mesmo código de conexão do servidor B que funciona perfeitamente, mas no servidor A, dá erro.
      Segue código:
       
      $host = 'servidor B';
      $user = 'user';
      $pass = '********';
      $db   = 'banco';
       
      // conexão e seleção do banco de dados
      $conexao = mysqlI_connect($host, $user, $pass, $db);
      mysqlI_set_charset($conexao,"utf8");
      //print "Conexão rodando e OK!"; 
      //mysqlI_close($conexao);
       
      Alguém pode me ajudar?
    • Por violin101
      Caros amigos, saudações.

      Estou com uma dúvida, referente cálculo de valores em tempo real.

      Tenho uma rotina, que faz o cálculo, o problema é mostrar o resultado.

      Quero mostrar o RESULTADO assim: 0,00  ou  0.00

      Abaixo posto o código.
      jQuery('input').on('keyup',function(){ //Remover ponto e trocar a virgula por ponto var m = document.getElementById("pgRest").value; while (m.indexOf(".") >= 0) { m = m.replace(".", ""); } m = m.replace(",","."); //Remover ponto e trocar a virgula por ponto var j = document.getElementById("pgDsct").value; while (j.indexOf(".") >= 0) { j = j.replace(".", ""); } j = j.replace(",","."); m = parseFloat(jQuery('#pgRest').val() != '' ? jQuery('#pgRest').val() : 0); j = parseFloat(jQuery('#pgDsct').val() != '' ? jQuery('#pgDsct').val() : 0); //Mostra o Resultado em Tempo Real jQuery('#pgTroco').val(m - j); <<=== aqui estou errando })  
       
      Grato,
       
      Cesar
       
       
    • Por violin101
      Caro amigos, saudações.

      Tenho uma tabela escrita em JS que funciona corretamente.
       
      Minha dúvida:
      - como devo fazer para quando a Tabela HTML estiver vazia, exibir o LOGO da Empresa ?

      Abaixo posto o script:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'i' ) return;// Não é Ctrl+A, portanto interrompemos o script evt.preventDefault(); //Chama a Função Calcular Qtde X Valor Venda calcvda(); var idProdutos = document.getElementById("idProdutos").value; var descricao = document.getElementById("descricao").value; var prd_unid = document.getElementById("prd_unid").value; var estoque_atual = document.getElementById("estoque_atual").value; var qtde = document.getElementById("qtde").value; var vlrunit = document.getElementById("vlrunit").value; var vlrtotals = document.getElementById("vlrtotal").value; var vlrtotal = vlrtotals.toLocaleString('pt-br', {minimumFractionDigits: 2}); if(validarConsumo(estoque_atual)){ //Chama a Modal com Alerta. $("#modal_qtdemaior").modal(); } else { if(qtde == "" || vlrunit == "" || vlrtotal == ""){ //Chama a Modal com Alerta. $("#modal_quantidade").modal(); } else { //Monta a Tabela com os Itens html = "<tr style='font-size:13px;'>"; html += "<td width='10%' height='10' style='text-align:center;'>"+ "<input type='hidden' name='id_prds[]' value='"+idProdutos+"'>"+idProdutos+"</td>"; html += "<td width='47%' height='10'>"+ "<input type='hidden' name='descricao[]' value='"+descricao+"'>"+descricao+ "<input type='hidden' name='esp[]' value='"+prd_unid+"'> - ESP:"+prd_unid+ "<input type='hidden' name='estoq[]' value='"+estoque_atual+"'></td>"; html += "<td width='10%' height='10' style='text-align:center;'>"+ "<input type='hidden' name='qtde[]' value='"+qtde+"'>"+qtde+"</td>"; html += "<td width='12%' height='10' style='text-align:right;'>"+ "<input type='hidden' name='vlrunit[]' value='"+vlrunit+"'>"+vlrunit+"</td>"; html += "<td width='14%' height='10' style='text-align:right;'>"+ "<input type='hidden' name='vlrtotal[]' value='"+vlrtotal+"'>"+vlrtotal+"</td>"; html += "<td width='12%' height='10' style='text-align:center;'>"+ "<button type='button' class='btn btn-uvas btn-remove-produto' style='margin-right:1%; padding:1px 3px; font-size:12px;' title='Remover Item da Lista'>"+ "<span class='fa fa-minus' style='font-size:12px;'></span></button></td>"; html += "</tr>"; $("#tbventas tbody").append(html); //Função para Somar os Itens do Lançamento somar(); $("#idProdutos").val(null); $("#descricao").val(null); $("#prd_unid").val(null); $("#qtde").val(null); $("#vlrunit").val(null); $("#vlrtotal").val(null); $("#idProdutos").focus(); //Se INCLUIR NOVO produto - Limpa a Forma de Pagamento $("#pgSoma").val(null); $("#pgRest").val(null); $("#pgDsct").val(null); $("#pgTroco").val(null); $("#tbpagar tbody").empty(); }//Fim do IF-qtde }//Fim do Validar Consumo });//Fim da Função btn-agregar  
      Grato,

      Cesar
       
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.