Ir para conteúdo

POWERED BY:

Arquivado

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

Joob

Problema com Refresh da database

Recommended Posts

Boas,

 

Tenho um problema em que, eu ao utilizar este código:

$clid = $_SESSION['clientid'];
if(isset($_GET['id'])) {
if($_GET['id'] == "paypal") {
function urlz()
{
    $currentPath = $_SERVER['PHP_SELF'];
    $pathInfo = pathinfo($currentPath);
    $hostName = $_SERVER['HTTP_HOST'];
    $protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https://'?'https://':'http://';
    return $protocol.$hostName.$pathInfo['dirname']."";
}

Preciso de fazer com que quando se efectua o pagamento, os créditos do user aumentem/sejam actualizados ou seja.. já fiz das seguintes formas, mas ocorrem 2 problemas..

 

Quando utilizo esta forma:

$clid = $_SESSION['clientid'];
if(isset($_GET['id'])) {
mysql_query("UPDATE `client` WHERE clientid='$clid'");
if($_GET['id'] == "paypal") {
function urlz()
{
    $currentPath = $_SERVER['PHP_SELF'];
    $pathInfo = pathinfo($currentPath);
    $hostName = $_SERVER['HTTP_HOST'];
    $protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https://'?'https://':'http://';
    return $protocol.$hostName.$pathInfo['dirname']."";
}

É efectuado à mesma o pagamento, mas não é actualizado os créditos, é como se não fizesse nada.

 

Mas quando utilizo esta forma:

$clid = $_SESSION['clientid'];
if(isset($_GET['id'])) {
mysql_query("UPDATE `client` SET credits=credits+'$paypal_credits' WHERE clientid='$clid'");
if($_GET['id'] == "paypal") {
function urlz()
{
    $currentPath = $_SERVER['PHP_SELF'];
    $pathInfo = pathinfo($currentPath);
    $hostName = $_SERVER['HTTP_HOST'];
    $protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https://'?'https://':'http://';
    return $protocol.$hostName.$pathInfo['dirname']."";
}

O pagamento é efectuado, e a actualização dos créditos também é feita, mas o problema está..

Quando se faz refresh na páginas, fazendo ou não o pagamento, os créditos aumentam automaticamente com qualquer refresh.

 

Conseguem-me dar uma dica ?

 

 

Abraço,

Joob

Compartilhar este post


Link para o post
Compartilhar em outros sites

Após o processamento, redirecione o usuário para outra página. Assim, o refresh vai carregar apenas a tela de sucesso, sem executar o UPDATE.

 

 

PS: funções mysql_* estão obsoletas a desde o PHP 5.5. Prefira usar MySQLi ou PDO. Veja mais aqui: http://www.ultimatephp.com.br/php-por-que-nao-utilizar-funcoes-mysql

Compartilhar este post


Link para o post
Compartilhar em outros sites

O redirecionamento não está a funcionar como deve de ser ..

Eu agora estou a usar uma outra página, para quando se clica no botão do paypal (Confirmar Pagamento), para ele depois ir para outra página, para fazer o tal update..

 

Mas tenho o mesmo da seguinte forma, em que não está a ser bem sucedida:

require("configuration.php");
require("include.php");

@$item_number = $_POST["item_number"];
@$amount = $_POST["amt"];
@$id = $_GET['id'];

if ((!$item_number)) {
    echo "The item_number parameter is empty!";
    exit;
}

if(@$_SESSION['paid'] == "unpaid") {
die();
}

mysql_query("UPDATE client SET credits=credits+'$paypal_credits' WHERE clientid='$id'");


header('Location: index.php');
@$_SESSION['paid'] = 'unpaid';
exit();

Ele à mesma assim não faz o update, não actualiza a zona dos créditos, e o principal é que não faz o redireccionamento da página, com o header, o que deveria de ir directamente para a página inicial digamos assim..

 

 

Abraço,

Joob

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você usar o "@" em todo lugar, nunca verá as mensagens de erro. O "@" deve ser usado com cuidado, apenas quando estritamente necessário. Veja: http://rberaldo.com.br/boas-praticas-ao-programar-2/#arroba

 

Você tem que retirar esses "@" e também fazer um debug pra ver se está entrando em algum desses if's que encerram a execução

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Beraldo,

 

Ficou resolvido com a sua grande ajuda de sempre ! ;)

 

 

Abraço,

Joob

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boas novamente..

 

Descobri que tenho o mesmo problema, quando clico só no "Paypal" e não nos outros menus.. só mesmo no "Paypal"..

 

ou seja.. tenho este código

$clid = $_SESSION['clientid'];
if(isset($_GET['id'])) {
mysql_query("UPDATE `client` SET credits=credits+'$paypal_credits' WHERE clientid='$clid'");
if($_GET['id'] == "paypal") {
function urlz()
{
    $currentPath = $_SERVER['PHP_SELF'];
    $pathInfo = pathinfo($currentPath);
    $hostName = $_SERVER['HTTP_HOST'];
    $protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https://'?'https://':'http://';
    return $protocol.$hostName.$pathInfo['dirname']."";
}

E quando faço refresh à página (onde tenho este código), os créditos aumentam .. vai sempre aumentando assim que faço refresh..

 

Como posso fazer um block, pra que seja válido só para quando se paga.. ?

 

 

Abraço,

Joob

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloco - header('Location: index.php'); - e continua à mesma..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acabei de testar desta forma

$clid = $_SESSION['clientid'];
$resultupdate=mysql_query("UPDATE `client` SET credits=credits+'$paypal_credits' WHERE clientid='$clid'");
$num_rows = mysql_num_rows($resultupdate);
if ( $num_rows > 0 ){
    // do something with your SQL result here
} else {
    // redirect to result.php if no rows were found.
    header('location: test.php');
}
if(isset($_GET['id'])) {
if($_GET['id'] == "paypal") {
function urlz()
{
    $currentPath = $_SERVER['PHP_SELF'];
    $pathInfo = pathinfo($currentPath);
    $hostName = $_SERVER['HTTP_HOST'];
    $protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https://'?'https://':'http://';
    return $protocol.$hostName.$pathInfo['dirname']."";
}

E não resultou..

 

Testei destas formas

$clid = $_SESSION['clientid'];
mysql_query("UPDATE `client` SET credits=credits+'$paypal_credits' WHERE clientid='$clid'");
header('location: test.php');
if(isset($_GET['id'])) {
if($_GET['id'] == "paypal") {

-----------------------------------

$clid = $_SESSION['clientid'];
if(isset($_GET['id'])) {
mysql_query("UPDATE `client` SET credits=credits+'$paypal_credits' WHERE clientid='$clid'");
header('location: test.php');
if($_GET['id'] == "paypal") {

-----------------------------------

$clid = $_SESSION['clientid'];
if(isset($_GET['id'])) {
if($_GET['id'] == "paypal") {
mysql_query("UPDATE `client` SET credits=credits+'$paypal_credits' WHERE clientid='$clid'");
header('location: test.php');

Ainda não resultou..

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

$clid = $_SESSION['clientid'];
mysql_query("UPDATE `client` SET credits=credits+'$paypal_credits' WHERE clientid='$clid'");
header( 'Location: test.php?id=' . $clid );
exit;

 

Na test.php você faz a verificação do $_GET['id'] e tudo mais

O script acima deve apenas fazer o UPDATE, nada mais

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não resultou.. basta eu clicar no botão e actualiza logo os créditos..


Posso tentar pelo sucesso do paypal.. em vez desse metodo..

So que tenho o código desta forma

$item_number = $_POST["item_number"];
$amount = $_POST["amt"];
$id = $_GET['id'];

if ((!$item_number)) {
    echo "The item_number parameter is empty!";
    exit;
}

if($_SESSION['paid'] == "unpaid") {
die();
}

mysql_query("UPDATE client SET credits=credits+'$paypal_credits' WHERE clientid='$id'");


header('Location: index.php');
$_SESSION['paid'] = 'unpaid';
exit();

E após o pagamento (página que será redireccionada), dá-me este erro:

The item_number parameter is empty!

Mas eu tenho o ...... no form do botão do paypal:

<input type="hidden" name="item_number" value="'. $paypal_credits.'">

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo, já consegui resolver o problema ;) !

Utilizei uma outra forma para o sucesso, em de usar essa que indiquei a cima.. Ficou resolvido ;)

 

Obrigado também pelas dicas ;)

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.