MySQL查询不关心用户输入之一

时间:2018-10-10 07:19:42

标签: php mysql wordpress woocommerce

所以大家好!我目前正在处理wordpress / woocommerce php代码,客户可以通过几种形式提出退款请求。我差不多完成了,但是我在过程的第一部分遇到了一些问题。

下面的代码应该输入客户输入的订单号,名字和他们的邮政编码,并检查数据库中是否有包含所有相同信息的订单。但是,现在似乎并不在乎邮政编码,无论您在邮政编码字段中输入什么内容,只要前两个正确,用户就可以进入下一部分。

在这里我想通知一下,在WooCommerce wp_postmeta表(从中获取客户数据的表)中,用户的名字和邮政编码都在同一列中,称为“ meta_value”,因此我尝试将下面的代码,但似乎无法正常工作。

<form action="" method="post" id="orderinfo">
<input type="text" placeholder="Tilausnumero" name="ordernmbr" required>
<input type="text" placeholder="Etunimi" name="firstname" required>
<input class="amountone" type="number" placeholder="Postinumero" name="postnmbr" required>
<input type="hidden" name="page" value="1">
<input type="submit" class="signupbtn" name="submit" value="Seuraava">
</form>

if(isset($_POST['submit'])) {
global $wpdb;
// Taking the user input into variables
$ordernumber = $_POST['ordernmbr'];
$orderfirstname = $_POST['firstname'];
$orderpostnumber = $_POST['postnmbr'];
$page = $_POST['page'];
// Sanitizing
$ordernumber = stripslashes_deep($ordernumber);
$orderfirstname = stripslashes_deep($orderfirstname);
$orderpostnumber = stripslashes_deep($orderpostnumber);

// Query that searches for order data from db
$sql = $wpdb->prepare("SELECT post_id FROM wp_postmeta
WHERE post_id = %d AND meta_key in ('_billing_first_name', '_billing_postcode')
and meta_value in ('%s', '%d')

group by post_id", $ordernumber, $orderfirstname, $orderpostnumber);

$res = $wpdb->get_results($sql, ARRAY_A);
}

任何人都可以向我展示我要去哪里哪里,并向我展示如何正确执行此操作吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

为什么不使用woocommerce内置功能?

$ordernumber = stripslashes_deep($ordernumber);
$orderfirstname = stripslashes_deep($orderfirstname);
$orderpostnumber = stripslashes_deep($orderpostnumber);

$args = array(
    'id' => $ordernumber,
    'billing_first_name' => $orderfirstname,
    'billing_postcode' => $orderpostnumber,
);
$orders = wc_get_orders( $args );
var_dump($orders);

或者甚至只是使用即可获得订单-由于ID是唯一的? https://docs.woocommerce.com/wc-apidocs/function-wc_get_order.html