it-swarm.dev

Non aggiorna automaticamente il valore del database

Sto affrontando un problema. Ho effettuato il pagamento tramite Paypal. Dopo il pagamento quando reindirizza al mio sito Web, ho un codice che aggiorna il valore nel database. Ma quando aggiorno la stessa pagina, aggiorna automaticamente il suo valore. Voglio solo aggiornare il valore solo su un pagamento non su un aggiornamento. Sto usando il codice

$db  = JFactory::getDBO();
$result = null;     
$user    = JFactory::getUser();

if ($user->guest) {
    return false;
}

$query = 'SELECT credit' .
         'FROM #__vodes_credits' .
         'WHERE userid = ' . (int) $user->id;
$db->setQuery($query);
$result = $db->loadResult();

$result_final = $result+20;

$query = 'update #__vodes_credits SET credit='.$result_final.
         'WHERE userid = ' . (int) $user->id;
//echo $query;
$db->setQuery($query);

$result = $db->loadResult();
if ($db->getErrorNum()) {
    JError::raiseWarning( 500, $db->stderr());
}

return $result;

$app = JFactory::getApplication();
$app->redirect("localhost/Joomla/");

Per favore, aiutami a cercarlo.

1
Rupzz

Il tuo codice va bene fino alle ultime tre righe. Suppongo che questo codice sia nel metodo del controller il cui nome corrisponde al parametro dell'attività nell'URL che Paypal sta invocando.

return $result;

$app = JFactory::getApplication();
$app->redirect("localhost/Joomla/");

Non dovresti restituire il risultato. Stai saltando la parte di reindirizzamento che sta per raggiungere il tuo obiettivo.

Dopo aver analizzato il risultato di un modulo sensibile, è buona norma reindirizzare in modo che qualsiasi aggiornamento/ricaricamento non attiverà nuovamente le stesse azioni. Ma stai tornando prima che sia impostato il reindirizzamento.

Inoltre, non penso che il reindirizzamento a "localhost/Joomla" abbia davvero senso, in genere reindirizzeresti implicitamente con setRedirect() a una vista del tuo componente in cui mostri i dettagli di pagamento e passando un messaggio a visualizzare all'utente, solo per far loro sapere che il pagamento è stato elaborato correttamente.

Per riassumere, il codice dovrebbe terminare con:

$app->setRedirect(JRoute::_("index.php?option=com_yourcomponent&view=paymentsuccess"),JText::_("HAPPY_PAYMENT_MESSAGE"));

senza resi;

1
Riccardo Zorn