2017-03-12 72 views
-1

我正在製作一個自動系統。我有一個顯示默認付款處理的發票頁面。我已經這樣做了,當他們通過coinpayments.net實際購買時,它將數據庫更新爲狀態1.我希望這樣做的目的是當數據庫中的狀態更改爲1時,它會更新發票頁面而不刷新,並說「付款狀態:已完成「。我有一些Ajax和PHP代碼,但它似乎並沒有工作。我將數據庫狀態更新爲1,並且在我的頁面上沒有更改文本。我有一個計時器間隔,應該每2秒更新一次,但有些錯誤。請幫忙。Ajax - 檢查數據庫更新

我的HTML狀態代碼

<input type="hidden" id="order_numb" value="<?php echo $_SESSION['succ_itm_id']; ?>"> 

<div id="payment" style="text-align: center;"> 
    Status<br><img src="../img/processing/payment_proc.gif"><br>Payment Pending 
</div> 

我的AJAX代碼

<script> 
function send_data() { 
    var order_id = $('#order_numb').val(); 
    $.ajax ({ 
     type: "POST", 
     url: '../rld_payment.php', 
     data: { order_num: order_id }, 
     success:function(data) 
     { 
      $('#payment').innerHTML = 'Status<br><b>Payment Completed!</b><br><b>Redirecting</b> ...'; 
     } 
    }); 
} 

send_data(); 
setInterval(send_data, (2 * 1000)); 
</script> 

我的PHP代碼來檢查狀態

<?php 
include('conf/db_.php'); 

$order_id  = mysqli_real_escape_string($con, $_POST['order_num']); 
$order_status = mysqli_query($con, "SELECT `status` FROM `orderinfo` WHERE `order_id` = '$order_id'") or die(mysqli_error($con)); 
if($order_status == 1) 
{ 
    echo 'Status<br><b>Payment Completed!</b><br><b>Redirecting</b> ...'; 
    return true; 
} 

?> 
+0

請不要叫。 – Chris

+0

@Chris我不知道你在說什麼關於先生。 –

+0

本,在所有的首都打字被認爲是在互聯網上大喊大叫。你的頭銜是在所有的首都。 – Chris

回答

0

謝謝大家的一切幫助!我將@Mikey的jQuery代碼和@ Kark92的PHP代碼放在一起,都非常出色。

我的最後,工作代碼如下:

HTML

<div id="payment" style="text-align: center;"></div> 

的jQuery/AJAX

<script> 
function send_data() { 
    console.log('sending data'); 
    $.post('../inc/rld_payment.php', function (data) { 
     console.log('receiving data', data); 
      $('#payment').html(data); 
    }); 
} 

send_data(); 
setInterval(send_data, 2000); 
</script> 

PHP

<?php 
session_start(); 
include 'conf/db_.php'; 

$order_id = $_SESSION['succ_itm_id']; 

$sql    = "SELECT status FROM orderinfo WHERE order_id = '$order_id'"; 
$results = mysqli_query ($con, $sql); 
if (!$results) return false; 
$row = mysqli_fetch_assoc($results); 
$order_status = $row ['status']; 

if($order_status == 1) 
{ 
    echo 'Payment Status: Completed'; 
} 
else 
{ 
    echo 'Status<br><img src="../img/processing/payment_proc.gif"><br>Payment Pending'; 
} 

?>

0

爲什麼您需要將會話變量存儲在隱藏字段中?如果您已經將會話變量存儲在可輕鬆訪問任何其他頁面的會話中?除非您有足夠的理由這樣做,否則只需在付款腳本中使用$_SESSION['succ_itm_id']即可。

二,您的查詢只有selects的記錄不是updates的記錄。

我會簡單地做,

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

include 'conf/db_.php'; 

$order_id = $_SESSION['succ_itm_id']; 
$result = mysqli_query($con, "UPDATE orderinfo SET status = 1 WHERE order_id = $order_id"); 
if ($result) { 
    echo 'Payment Status: Completed'; 
} 
?> 

在你的JavaScript代碼,你就再不需要通過任何東西。

請注意,響應(您在付款腳本中回顯的內容)存儲在data變量中,因此您可以使用它來添加HTML。

還要注意,$(selector)始終是jQuery object,而不是原生JavaScript元素。 jQuery對象沒有屬性innerHTML,但有一個方便的.html()方法。

<script> 
function send_data() { 
    /*$.ajax({ 
     type: 'POST', 
     url: '../rld_payment.php', 
     success: function (data) { 
      $('#payment').html(data); 
     } 
    });*/ 

    console.log('sending data'); 
    // shorthand method to $.ajax() 
    $.post('../rld_payment.php', function (data) { 
     console.log('receiving data', data); 
     $('#payment').html(data); 
    }); 
} 

send_data(); 
setInterval(send_data, 2 * 1000); 
</script> 
+0

我在我的ipn.php頁面付款後更新付款狀態。我想在這個php頁面中做的是檢查付款的狀態。如果它是1,這是真的,如果是0,那不是。另外,我在發票頁面上取消了我所有的會話,以便在不重新檢查的情況下無法訪問它(如果這樣做有意義)。所以要能夠通過一個php變量來解析它會更好,如果你可以幫忙的話。儘管我現在會嘗試你的代碼。除非我可以讓它在JQUERY上取得成功的會話 –

-1

您對這種說法的錯誤:)

if($order_status == 1) 

的mysql_query(成功返回的資源,或FALSE的錯誤。所以它永遠不會返回1,那麼聲明一直都是FALSE。 你必須這樣做:

$results = mysql_query ($conn, $sql); 
if (!$results) return false; 
$row = mysql_fetch_assoc($results); 
$order_status = $row ['status'];