Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.talvez tenha que checar se o form foi submetido
if(isset($_POST['acao'])){
// faz o que tem que fazer...
}>
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.Caso seja de sua necessidade mais conteúdo, aconselho pesquisar no google.
Segue o link:
http://matheuspiscioneri.com.br/blog/requisicoes-ajax-com-jquery/
Sabe de algum exemplo em funcionamento? Pois não sei exatamente como montar o script.
É possível fazer isso funcionar usando por exemplo uma função javascript como o onclick?
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
>
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?
>
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
}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](https://www.w3schools.com/xml/ajax_xmlhttprequest_send.asp)
Boa sorte !Ok, no caso do form eu deixo o action como? Por que eu preciso que o POST seja enviado para a URL do pagseguro..
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...Hmm, mas onde é que coloco a URL do pagseguro? Pois não vi nada relacionado no código..
// 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_clientCerto, mas se eu colocar a URL do pagseguro ali como é que vou executar a função PHP para inserir os dados no DB?
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()// 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 ?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é?@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.
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.
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.