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
      Tudo bem pessoal?
       
      No código abaixo, estou fazendo uma consulta nas tabelas, banners e banners_referencia
      Meu objetivo é trazer resultados com valores iguais ao nome da cidade declarada na $cidade ou resultados com a referencia Total.
      O problema é que está trazendo todos os resultados. Tenho 10 linhas, 1 com o nome da cidade e duas com o valor Total, então o resultado teria que ser de apenas 3 linhas, mas mostra tudo.
       
      $banner = "SELECT A.*, B.* FROM banners A, banners_referencia B WHERE B.cod_referencia = A.cod_referencia AND A.cidade = '$cidade' OR B.referencia = 'Total' ORDER BY RAND()";
      $banner = mysqli_query($conexao, $banner) or die ("Banner não encontrado");
      while($busca= mysqli_fetch_array($banner)){
          print $busca['cidade'].'<br>';
      };
       
      Alguém consegue me ajudar?
    • Por Rafael_Ferreira
      Não consigo carregar a imagem do captcha do meu formulário. Foi testado com o xampp e easyphp. Também não carregou a imagem de outros captcha. 
       
       
    • Por luiz monteiro
      Olá.
      Estou atualizando meu conhecimento com Front-End e me deparei com o seguinte problema.
      Criei um sistema para fazer o upload de imagens e alguns campos text.
      Algo bem simples para depois começar a estudar javascript para mostrar a miniatura....
      Mas quando saio do navegador Chrome ou da aba por mais de 3 minutos, ao retornar o navegador as vezes atualiza ou nem chega atualizar mas limpa os campos.
      Estou usando um Smart Motorola com Android, mas um amigo testou no iPhone e acontece a mesma coisa.
      Gostaria de saber se há como usar javascript para evitar isso?
      Agradeço desde já.

      <!DOCTYPE html>
      <html>
      <head>
          <meta charset="utf-8">
          <meta name="viewport" content="width=device-width, initial-scale=1">
          <title>Uploader</title>
      </head>
      <body>
          <form action="?" method="post" enctype="multipart/form-data">
              <br><br>
              <div>selecione a imagem 1</div>
              <input type="file" name="foto1" accept="image/*">
              <br><br>
              <input type="text" name="nome_imagem1">
              
              <br><br>
              <input type="file" name="foto2" accept="image/*">
              <br><br>
              <input type="text" name="nome_imagem2">
              
              <br><br>

              <input type="file" name="foto3" accept="image/*">
              <br><br>
              <input type="text" name="nome_imagem3">
              
              <br><br>
              <input type="submit" value="Enviar">
              <br><br>
          </form>
      <?php
      if ($_SERVER['REQUEST_METHOD'] == 'POST')
      {
          vardump ($_FILES);
      }
      ?>
      </body>
      </html>
       
       
       
    • Por belann
      Olá!
       
      Estou usando o nextjs versão 15.2.3 e criei uma navbar que quando é carregado o programa aparece com a home, mas na hora de clicar na página produtos desaparece a navbar.
      A navbar esta sendo chamada no layout.tsx estou usando typescript
      e fica dessa forma
      <div>           <Navbar/>             <main>{children}</main>             </div>  
    • Por luiz monteiro
      Olá, tudo bem?
       
      Estou melhorando meu conhecimento em php e mysql e, me deparei com o seguinte. A tabela da base de dados tem um campo do tipo varchar(8) o qual armazena números. Eu não posso alterar o tipo desse campo. O que preciso é fazer um select para retornar o números que contenham zeros a direita ou a esquerda.
      O que tentei até agora
       
      Ex1
      $busca = $conexao->prepare("select campo form tabela where (campo = :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form']);
       
      Se a direita da string $_REQUEST['campo_form'] termina ou inicia com zero ou zeros, a busca retorna vazio.
      Inseri dados numéricos, da seguinte maneira para testar: 01234567;  12345670: 12345678: 12340000... entre outros nessa coluna. Todos os valores que não terminam ou não iniciam com zero ou zeros, o select funciona.
       
       
      Ex2
      $busca = $conexao->prepare("select campo form tabela where (campo = 0340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex3
      $busca = $conexao->prepare("select campo form tabela where (campo = '02340001' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex4
      $busca = $conexao->prepare("select campo form tabela where (campo like 2340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex5
      $busca = $conexao->prepare("select campo form tabela where (campo like '12340000') ");
      Esse número está cadastrado, mas não retorna.
       
      Ex6
      $busca = $conexao->prepare("select campo form tabela where (campo like '"12340000"' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex7
      $busca = $conexao->prepare("select campo form tabela where (campo like :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form'])
      Não retorna dados.
       
      O  $_REQUEST['campo_form'] é envio via AJAX de um formulário. 
      Usei o gettype para verificar o post, e ele retorna string.
      Fiz uma busca com número 12345678 para verificar o que o select retorna, e também retrona como string.
       
      Esse tipo de varchar foi usado porque os números que serão gravados nesse campo,  terão zeros a direita ou na esquerda. Os tipos number do mysql não gravam zeros, então estou usando esse. O problema é a busca.
      Agradeço desde já.
       
       
×

Informação importante

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