Php Выполнить запрос возвращает неверный вывод - PullRequest
0 голосов
/ 23 апреля 2020

Мне нужна помощь. Я добавил фильтры в свой код, все они работают нормально, но только фильтр месяца и года создает конфликт, хотя, когда я печатаю SQL в PHPMyAdmin, я получаю желаемые результаты, но не в HTML форма.

Пожалуйста, проверьте мой код ниже

global $wpdb;

                if(isset($_GET['datepickervalue']) && !empty($_GET['datepickervalue'])){
                    $quotecreateddate = $_GET['datepickervalue'];
                }else{
                    $quotecreateddate = '';
                }
                if(isset($_GET['quotes_vehicle']) && !empty($_GET['quotes_vehicle'])){
                    $quotes_vehicle = $_GET['quotes_vehicle'];
                }else{
                    $quotes_vehicle = '';
                }

                if(isset($_GET['quotes_departure']) && !empty($_GET['quotes_departure'])){
                    $quotes_departure = $_GET['quotes_departure'];
                }else{
                    $quotes_departure = '';
                }
                if(isset($_GET['quotes_destination']) && !empty($_GET['quotes_destination'])){
                    $quotes_destination = $_GET['quotes_destination'];
                }else{
                    $quotes_destination = '';
                }

                if(isset($_GET['quote_number']) && !empty($_GET['quote_number'])){
                    $quote_number = $_GET['quote_number'];
                }else{
                    $quote_number = '';
                }

                if(isset($_GET['quotes_length']) && !empty($_GET['quotes_length'])){
                    $quotes_length = $_GET['quotes_length'];
                }else{
                    $quotes_length = 10;
                }
                $sql = "SELECT * FROM ". $wpdb->prefix ."quotes AS q LEFT JOIN ". $wpdb->prefix ."vehicles AS v ON q.vehicle = v.vehicle_id LEFT JOIN ". $wpdb->prefix ."departure AS dep ON q.departure_port = dep.departure_id LEFT JOIN ". $wpdb->prefix ."destination AS des ON q.destination_port = des.destination_id " ;
                $sql .= " WHERE form_id = 1 ";

                $total_query = "SELECT COUNT(id) FROM ". $wpdb->prefix ."quotes AS q LEFT JOIN  ". $wpdb->prefix ."vehicles AS v ON q.vehicle = v.vehicle_id LEFT JOIN ". $wpdb->prefix ."departure AS dep ON q.departure_port = dep.departure_id LEFT JOIN ". $wpdb->prefix ."destination AS des ON q.destination_port = des.destination_id ";

                $total_query .= " WHERE form_id = 1 ";




                if(isset($quotes_vehicle) && !empty($quotes_vehicle)){
                    $sql .= " AND q.vehicle = '".$_GET['quotes_vehicle']."' ";
                    $total_query .= " AND q.vehicle = '".$_GET['quotes_vehicle']."' ";
                }
                if(isset($quotes_departure) && !empty($quotes_departure)){
                    $sql .= " AND q.departure_port = '".$_GET['quotes_departure']."' ";
                    $total_query .= " AND q.departure_port = '".$_GET['quotes_departure']."' ";
                }
                if(isset($quotes_destination) && !empty($quotes_destination)){
                    $sql .= " AND q.destination_port = '".$_GET['quotes_destination']."' ";
                    $total_query .= " AND q.destination_port = '".$_GET['quotes_destination']."' ";
                }
                if(isset($quote_number) && !empty($quote_number)){
                    $sql .= " AND q.id LIKE '%".$_GET['quote_number']."%' ";
                    $total_query .= " AND q.id LIKE '%".$_GET['quote_number']."%' ";
                }
            if(isset($quotecreateddate) && !empty($quotecreateddate)){
                    $sql .= "AND DATE_FORMAT(q.created_at , '%Y-%m-%d' )  = '".$quotecreateddate."' ";
                    $total_query .= "AND DATE_FORMAT(q.created_at , '%Y-%m-%d' )  = '".$quotecreateddate."' ";
                }
                if(isset($quotes_length) && !empty($quotes_length)){
                    $sql .= " ORDER BY `id` DESC ";
                    $total_query .= " ORDER BY `id` DESC ";
                }

                echo $sql;
                if(isset($_GET['paged']) && !empty($_GET['paged'])){
                    $paged = $_GET['paged'];
                }else{
                    $paged = 1;
                }
                $total              = $wpdb->get_var( $total_query );
                $items_per_page     = $quotes_length; 
                $offset             = ( $paged * $items_per_page ) - $items_per_page;
                $sql .= " LIMIT ${offset}, ${items_per_page}";

                $getallquotes       = $wpdb->get_results( $sql);

Результат, который я получаю, одинаков для всех дат в HTML, где я получаю с использованием foreach l oop также счетчик нумерации страниц в total_query отображается правильно, но запрос SQL показывает только последние добавленные записи для каждой даты

Заранее благодарен за помощь

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Если вы получили отличный результат на phpMyAdmin, но не на самом скрипте, то выполните echo($sql); die($sql); и убедитесь, что запросы sql совпадают.

На страницах, которые вызывают эту страницу, убедитесь, что переменные URL GET правильно закодированы в URL.

Наконец, переменные должны быть должным образом очищены с помощью чего-то вроде mysql_real_escape_string();, чтобы при вводе в действие не происходило атак SQL.

0 голосов
/ 23 апреля 2020

Это может не решить проблему (и не обязательно является ответом), но вам следует подумать об урезании кода:

<?php
global $wpdb;

// Set all your empty variables here. No reason to use an else statement.
$quote_created_date = '';
$quotes_vehicle     = '';
$quotes_departure   = '';
$quotes_destination = '';
$quote_number       = '';
$quotes_length      = 10;


if ( isset( $_GET[ 'datepickervalue' ] ) && ! empty( $_GET[ 'datepickervalue' ] ) ) {
    $quote_created_date = esc_sql( $_GET[ 'datepickervalue' ] );
}

if ( isset( $_GET[ 'quotes_vehicle' ] ) && ! empty( $_GET[ 'quotes_vehicle' ] ) ) {
    $quotes_vehicle = esc_sql( $_GET[ 'quotes_vehicle' ] );
}

if ( isset( $_GET[ 'quotes_departure' ] ) && ! empty( $_GET[ 'quotes_departure' ] ) ) {
    $quotes_departure = esc_sql( $_GET[ 'quotes_departure' ] );
}

if ( isset( $_GET[ 'quotes_destination' ] ) && ! empty( $_GET[ 'quotes_destination' ] ) ) {
    $quotes_destination = esc_sql( $_GET[ 'quotes_destination' ] );
}

if ( isset( $_GET[ 'quote_number' ] ) && ! empty( $_GET[ 'quote_number' ] ) ) {
    $quote_number = esc_sql( $_GET[ 'quote_number' ] );
}

if ( isset( $_GET[ 'quotes_length' ] ) && ! empty( $_GET[ 'quotes_length' ] ) ) {
    $quotes_length = esc_sql( $_GET[ 'quotes_length' ] );
}

$sql = "SELECT * FROM " . $wpdb->prefix . "quotes AS q LEFT JOIN " . $wpdb->prefix . "vehicles AS v ON q.vehicle = v.vehicle_id LEFT JOIN " . $wpdb->prefix . "departure AS dep ON q.departure_port = dep.departure_id LEFT JOIN " . $wpdb->prefix . "destination AS des ON q.destination_port = des.destination_id ";
$sql .= " WHERE form_id = 1 ";

$total_query = "SELECT COUNT(id) FROM " . $wpdb->prefix . "quotes AS q LEFT JOIN  " . $wpdb->prefix . "vehicles AS v ON q.vehicle = v.vehicle_id LEFT JOIN " . $wpdb->prefix . "departure AS dep ON q.departure_port = dep.departure_id LEFT JOIN " . $wpdb->prefix . "destination AS des ON q.destination_port = des.destination_id ";

$total_query .= " WHERE form_id = 1 ";

// Now just check if your variables are empty or not.
if ( ! empty( $quotes_vehicle ) ) {
    $sql         .= " AND q.vehicle = '" . $quotes_vehicle . "' ";
    $total_query .= " AND q.vehicle = '" . $quotes_vehicle . "' ";
}
if ( ! empty( $quotes_departure ) ) {
    $sql         .= " AND q.departure_port = '" . $quotes_departure . "' ";
    $total_query .= " AND q.departure_port = '" . $quotes_departure . "' ";
}
if ( ! empty( $quotes_destination ) ) {
    $sql         .= " AND q.destination_port = '" . $quotes_destination . "' ";
    $total_query .= " AND q.destination_port = '" . $quotes_destination . "' ";
}
if ( ! empty( $quote_number ) ) {
    $sql         .= " AND q.id LIKE '%" . $quote_number . "%' ";
    $total_query .= " AND q.id LIKE '%" . $quote_number . "%' ";
}
if ( ! empty( $quote_created_date ) ) {
    $sql         .= "AND DATE_FORMAT(q.created_at , '%Y-%m-%d' )  = '" . $quote_created_date . "' ";
    $total_query .= "AND DATE_FORMAT(q.created_at , '%Y-%m-%d' )  = '" . $quote_created_date . "' ";
}

// No need to wrap this in an if statement since you are setting the value as 10 if there isn't a value.
$sql         .= " ORDER BY `id` DESC ";
$total_query .= " ORDER BY `id` DESC ";

echo $sql;
if ( isset( $_GET[ 'paged' ] ) && ! empty( $_GET[ 'paged' ] ) ) {
    $paged = $_GET[ 'paged' ];
} else {
    $paged = 1;
}
$total          = $wpdb->get_var( $total_query );
$items_per_page = $quotes_length;
$offset         = ( $paged * $items_per_page ) - $items_per_page;
$sql            .= " LIMIT ${offset}, ${items_per_page}";

$getallquotes = $wpdb->get_results( $sql );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...