我在函数中有一个查询设置,可以使用搜索字符串从wordpress中的表中获取付款状态。通常会“完成”(从paypal IPN返回)。我所要做的就是允许一个本地选项将值字符串更改为另一个值,然后再更改回来。这就是我目前的情况:
<!---TOGGLE PAYMENT STATUS--->
<?php function toggle_payment_status ()
{
global $wpdb;
$ipn_tables = $wpdb->prefix ."ipn_data_tbl";
$searchIP = $_POST["searchIP"];
$StatusCheck = $wpdb->get_var( $wpdb->prepare("SELECT payment_status FROM {$ipn_tables} WHERE serial_no = %s "),$searchIP);
if ($StatusCheck = "Completed") {
$StatusCheck = "Refunded";
}
else if ($StatusCheck = "Refunded") {
$StatusCheck = "Completed";
}
$wpdb->update($ipn_tables, array(
\'payment_status\' => $StatusCheck
) , array(
\'serial_no\' => $searchIP,
));
}
当我运行它时,完成的字符串变为退款。数据库中的检查将显示更改。太棒了所以$statuscheck应该是退款的新“更改”值。。。但我不明白为什么if语句失败了。我也试过了,但也没用。有人能把小飞象引向正确的方向,解释一下我做错了什么吗?咖啡太多;深夜也无济于事。非常感谢。
最合适的回答,由SO网友:Sally CJ 整理而成
我在您的代码中看到两个问题:
在$searchIP
实际上在$wpdb->prepare()
: (我没有使用完整的查询以便您更清楚地看到问题)
$StatusCheck = $wpdb->get_var( $wpdb->prepare("SELECT payment_status ..."),$searchIP);
因此,您应该这样更正:(为清晰起见,重新插入)
$StatusCheck = $wpdb->get_var( $wpdb->prepare( "
SELECT payment_status FROM {$ipn_tables}
WHERE serial_no = %s
", $searchIP ) );
你的
if
应使用相等运算符(
==
或
===
) 而不是基本赋值运算符(
=
).
例如,使用if ($StatusCheck == "Completed")
和if ($StatusCheck == "Refunded")
而不是当前代码中的内容。