我正在制作一个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;
}
?>
答案 0 :(得分:0)
如果您已将会话变量存储在可在任何其他页面上轻松访问的会话中,为什么需要将会话变量存储在隐藏字段中?除非您有充分理由这样做,否则只需在付款脚本中使用$_SESSION['succ_itm_id']
。
我会这样做,
<?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'];