【问题标题】:Save WooCommerce Order details in custom table在自定义表中保存 WooCommerce 订单详细信息
【发布时间】:2019-03-17 07:03:33
【问题描述】:

我在表order-master 中创建了一个自定义数据库,我将在其中保存WooCommerce 订单total amountshipping chargestoken。 为此,我编辑了paypemts.php 文件,代码如下:

<?php
include_once($_SERVER['DOCUMENT_ROOT'].'/canadiapharma.com/wp-config.php' );
global $woocommerce;
global $wpdb;
echo '<h3>Custom Calculation :</h3>';
$amount_2 = $woocommerce->cart->get_cart_total();
$ship_raw = floatval( preg_replace( '#[^\d.]#', '', $woocommerce->cart->get_cart_shipping_total() ) );
$ship = $ship_raw - 3600;
echo '<strong>Shipping :</strong>';
echo $ship; 
$nano=WC()->cart->cart_contents_total;
echo '<br>';
$total_amt = $nano+$ship;
echo '<strong>Total :</strong>';
echo $total_amt;
echo '<br>';
$salt = 'dAta_EnC!=';
$token_raw = base64_encode($total_amt. $salt);
$token = preg_replace(sprintf('/=/', $salt), '', $token_raw);
echo '<strong>Token :</strong>';
echo $token;
$wpdb->query("INSERT INTO order_master (payment_amt, ship, token) VALUES ('$total_amt', '$ship', '$token')"  );
?>

此代码工作正常并将数据存储到数据库中。但它会在 checkout.php 页面加载后立即存储数据。所以,我做了一些更改,并在checkout.php 页面的Place Order 按钮上创建了一个onclick 事件。

OnCLick 事件:

<?php echo apply_filters( 'woocommerce_order_button_html', '<button type="submit" class="button alt" name="woocommerce_checkout_place_order" id="place_order" value="' . esc_attr( $order_button_text ) . '" data-value="' . esc_attr( $order_button_text ) . '" onclick="dbinsert()">' . esc_html( $order_button_text ) . '</button>' ); 
        ?>

dbinsert():

<script>
        function dbinsert() {
            var myKeyVals = { amount : <?php echo $total_amt; ?>., ship : <?php echo $ship; ?>., token : <?php echo $token; ?> }

            var saveData = $.ajax({
                        type: 'POST',
                        url: "savedata.php",
                        data: myKeyVals,
                        dataType: "text",
                        success: function(dbinsert) { alert("Save Complete") }
            });
            saveData.error(function() { alert("Something went wrong"); });
                    }
        </script>

onclick 事件完美执行,但不知道为什么数据没有进入数据库。以下是我的savedata.php 文件。

<?php
global $wpdb;
$total_amt = $_POST['amount'];
$ship = $_POST['ship'];
$token = $_POST['token'];
$stmt = $wpdb->query("INSERT INTO order_master (payment_amt, ship, token) VALUES ('$total_amt', '$ship', '$token')"  );
$stmt->bindparam('payment_amt', $total_amt);
$stmt->bindparam('ship', $ship);
$stmt->bindparam('token', $token);
if($stmt->execute())
{
  $res="Data Inserted Successfully:";
  echo json_encode($res);
}
else {
  $error="Not Inserted,Some Probelm occur.";
  echo json_encode($error);
}
?>

请帮我解决这个问题。

【问题讨论】:

    标签: php sql ajax wordpress woocommerce


    【解决方案1】:

    尝试将您的 ajax url url: "savedata.php", 更改为 url: "&lt;?php echo admin_url('admin-ajax.php?action=save_order_data');?&gt;" 并在主题的 function.php 中添加以下代码

    add_action('wp_ajax_nopriv_save_order_data', 'save_order_data');
    add_action('wp_ajax_save_order_data', 'save_order_data');
    function save_order_data() {
         global $wpdb;
         $total_amt = $_POST['amount'];
         $ship = $_POST['ship'];
         $token = $_POST['token'];
         $stmt = $wpdb->query("INSERT INTO order_master (payment_amt, ship, token) VALUES ('$total_amt', '$ship', '$token')"  );
         $result = $wpdb->query($wpdb->prepare($stmt));
    
         if($result)
         {
             $res="Data Inserted Successfully:";
             echo json_encode($res);
         }
         else {
             $error="Not Inserted,Some Probelm occur.";
             echo json_encode($error);
         }
    }
    

    更新: var myKeyVals = { amount : &lt;?php echo $total_amt; ?&gt;., ship : &lt;?php echo $ship; ?&gt;., token : &lt;?php echo $token; ?&gt; } 中有错误。更改您的var myKeyVals 如下:

    var myKeyVals = { amount : "<?php echo $total_amt; ?>", 
                      ship : "<?php echo $ship; ?>", 
                      token : "<?php echo $token; ?>" }
    

    你需要用javascript在""写php代码。

    希望这会有所帮助。

    【讨论】:

    • 什么也没发生。可能是什么问题呢?我的savedata.php 代码可以吗?
    • 首先检查function save_order_data() 是否被调用?
    • 运气不好。顺便说一句,请告诉我如何检查函数 save_order_data() 是否被调用?因为我使用alert() 进行了检查,但现在它没有显示任何警报。
    • 通过将die("function called"); 放入save_order_data() 函数进行检查
    • 我将 myKeyVals 更改为 var myKeyVals = { amount : 100, ship : 50, token : 123456 } 并将数据插入到表中。所以我认为myKeyVals 在尝试echo PHP 变量时存在问题。顺便说一句,我还收到了Something Went Wrong 警报弹出窗口。
    猜你喜欢
    • 2015-12-10
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 2023-01-22
    • 1970-01-01
    • 2017-01-17
    相关资源
    最近更新 更多