Ir para conteúdo

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.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
×

Informação importante

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