what payment gateway is being used?
if it is a remote cehckout method, the order will need to be captured before going to the gateway, with a remote checkout method, the confirm page posts the information to the gateway to start the cehckout process, it is not possible to capture the order when they click the checkout button on the confirm page.
even if it where, the same problem would still apply, once they get to the gateway, they can still decide to abandon the order.
with a remote checkout method, the order is stored when the checkout page posts to the confirm page.
You should have a column in your order table to for OrderStatus, the default value for the order status column should be pending.
the remote checkout method is a tricky beast, because it is not a real time method.
in other words, just because the user is returned from the gateway to the success page, that only means the gateway has placed the order in a queue to process the payment.
the gateway will have a way of sending a notification to your site with the results of the transaction when it is processed, on this page, you would need top update the order status of the order table.