I have the following snippet that builds a SQL query.
Essentially there are 4 checkboxes that allow a user to filter results returned from a MySQL query.
$switch = false;
if(!isset($payment_status['paid']) || !isset($payment_status['pending']) || !isset($payment_status['failed']) || !isset($payment_status['refunded'])) { //One of them is unset so we can act
if(isset($payment_status['paid']) && $switch == false) {
$switch = true;
$sql .= " AND (orders.payment_status = 'paid'";
if(isset($payment_status['pending'])) {
$sql .= " OR orders.payment_status = 'pending'";
}
if(isset($payment_status['failed'])) {
$sql .= " OR orders.payment_status = 'failed'";
}
if(isset($payment_status['refunded'])) {
$sql .= " OR orders.payment_status = 'refunded'";
}
$sql .= ")";
}
if(isset($payment_status['pending']) && $switch == false) {
$sql .= " AND (orders.payment_status = 'pending'";
if(isset($payment_status['failed'])) {
$sql .= " OR orders.payment_status = 'failed'";
}
if(isset($payment_status['refunded'])) {
$sql .= " OR orders.payment_status = 'refunded'";
}
$sql .= ")";
}
if(isset($payment_status['failed']) && $switch == false) {
$sql .= " AND (orders.payment_status = 'failed'";
if(isset($payment_status['refunded'])) {
$sql .= " OR orders.payment_status = 'refunded'";
}
$sql .= ")";
}
if(isset($payment_status['refunded']) && $switch == false) {
$sql .= " AND orders.payment_status = 'refunded'";
}
}
Essentially I’ve had to outline every combination of clicked checkboxes because if there’s more then one checkbox clicked the statement syntax changes.
Cheers!