2017-02-16 11 views
0

HTML формы:значения в базе данных Выбор по определенным интервалом дат, не работает должным образом

<form method="POST" action="configuration/raportare/generate_orhideea.php"> 
<input type="text" name="reportrangeTwo" class="pull-right" style="background: #fff; cursor: pointer; padding: 5px 10px; border: 1px solid #ccc; width: 100%"/><br> 
<input type="submit" value="Generează raport"> 
</form> 

Форма имеет Jquery datarange ввода, который позволяет мне выбрать две даты одновременно.

generate_orhideea.php файл, где я вычитаем каждую дату, с explode() функции:

//SOME CODE HERE 
    // Create database variables 
    require_once "../../configuration/db.php"; 
    $dates = $_POST['reportrangeTwo']; // E.g: 19-01-2017 | 17-02-2017 
    $first_date = explode(" ", $dates); 
    $begin = $first_date[0]; 
    $end = $first_date[2]; 

    $rows = mysqli_query($connection, "SELECT * FROM clienti_orhideea WHERE data_inregistrare between '$begin' and '$end' order by data_inregistrare asc"); 
    // loop over the rows, outputting them 
while ($row = mysqli_fetch_assoc($rows)) fputcsv($output, $row); 
?> 

Если $dates = 17-02-2017 | 17-02-2017 вернет мне все значения с сегодняшнего дня.

Если $dates = 16-02-2017 | 16-02-2017 он вернет мне все значения со вчерашнего дня.

Если $dates = 19-01-2017 | 17-02-2017 он должен вернуться за последние 30 дней, но он возвращает пустой, потому что У меня нет какой-либо даты, начиная с 19

НО, если $dates = 11-02-2017 | 17-02-2017, то он вернет мне все значения за последние 7 дней, ВКЛЮЧАЯ значения от 14-01-2017. Это более 7 дней.

В чем может быть проблема?

+0

Я думаю, что он принимает только первые 2 цифры от даты и останавливается на первом «-». Вся строка 16-02-2017, но я думаю, что она ищет значения, начиная только с первых двух чисел, 16. – Bogdan2305

ответ

0

Попытка преобразовать даты, которые вы хотите сравнить в формат, который подходит MySQL:

$rows = mysqli_query($connection, 
         "SELECT * FROM clienti_orhideea 
          WHERE data_inregistrare between 
          STR_TO_DATE('$begin', '%d-%m-%Y') AND 
          STR_TO_DATE('$end', '%d-%m-%Y') 
          ORDER BY data_inregistrare ASC" 
        ); 

Если вы по какой-то шанс сохранить дату как тип VARCHAR данных (вы должны всегда использовать date, datetime или любой другие даты/времени, совместимых типов данных в MySQL), вы можете попробовать это:

$rows = mysqli_query($connection, 
         "SELECT * FROM clienti_orhideea 
          WHERE STR_TO_DATE(data_inregistrare, '%d-%m-%Y') between 
          STR_TO_DATE('$begin', '%d-%m-%Y') AND 
          STR_TO_DATE('$end', '%d-%m-%Y') 
          ORDER BY STR_TO_DATE(data_inregistrare, '%d-%m-%Y') ASC" 
        ); 
+0

Это не вернет день первым. Если я выполню запрос, возвращается NULL. Я уверен, что это ответ, но мне нужно выяснить fmt ''% d-% m-% Y'' – Bogdan2305

+0

' STR_TO_DATE ('17 -02-2016', '% d-% m-% Y') 'только форматирует строку в настоящий формат даты. В этом случае вы, кажется, используете формат day-month-year в качестве входных данных для вашего предложения WHERE. Какой тип данных вы используете для своего столбца 'data_inregistrare'? –

+0

varchar я использую. – Bogdan2305