Ajax - 检查数据库更新

时间:2017-03-12 00:52:07

标签: php ajax

我正在制作一个autobuy系统。我有一个默认显示的发票页面 - 付款处理。我已经做到这一点,当他们实际通过coinpayments.net购买时,它将数据库更新为状态1.我想这样做,以便当数据库中的状态更改为1时,它更新发票页面而不刷新并说& #34;付款状态:已完成"。我有一些ajax和PHP代码,但它似乎没有工作。我将数据库状态更新为1,并且我的页面上没有文本更改。我有一个定时器间隔,应该每2秒更新一次,但有些错误。请帮忙。

我的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;
}

?>

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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';
}

&GT;

答案 2 :(得分:-1)

您对此声明有误:

if($order_status == 1)

mysql_query()在成功时返回资源,如果出错则返回FALSE。所以它永远不会返回1,那么声明一直都是假的。 你必须这样做:

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