2017-02-16 68 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,但我认为它寻找值开始前2个数字,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数据类型(你应该总是使用datedatetime或任何在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返回。我确信这是答案,但我需要弄清楚''%d-%m-%Y'' – Bogdan2305

+0

'STR_TO_DATE('17 -02-2016','%d-%m-%Y') '只是将字符串格式化为真正的日期格式。在这种情况下,您似乎将日日月的格式用作WHERE子句的输入。你使用什么数据类型为你的列'data_inregistrare'? –

+0

varchar我正在使用。 – Bogdan2305