如何在日期选择器php mysql中选择单个日期?

时间:2018-05-10 08:52:49

标签: javascript php sql mysqli

如何从我的日期范围选择器中选择一个日期?

42

这是我的查询来自日期范围选择器:

<script>  
  $(document).ready(function(){  
       $.datepicker.setDefaults({  
            dateFormat: 'yy-mm-dd'   
       });  
       $(function(){  
            $("#from_date").datepicker();  
            $("#to_date").datepicker();  
       });  
       $('#filter').click(function(){  
            var from_date = $('#from_date').val();  
            var to_date = $('#to_date').val();  
            if(from_date != '' && to_date != '')  
            {  
                 $.ajax({  
                      url:"filtertable.php",  
                      method:"POST",  
                      data:{from_date:from_date, to_date:to_date},  
                      success:function(data)  
                      {  
                           $('#order_table').html(data);  
                      }  
                 });  
            }  
            else  
            {  
                 alert("Please Select Date");  
            }  
       });  
  });  
 </script>

如果您尝试选择2个相同的日期,则因此无法使用

  query = "SELECT *
 FROM gsm2 WHERE setTime BETWEEN '".$_POST["from_date"]."' AND 
'".$_POST["to_date"]."' 

我需要添加一个

的语句
 $query = "SELECT *
 FROM gsm2 WHERE setTime BETWEEN '".$_POST["from_date"]."' AND 
'".$_POST["to_date"]."' ";

如何将此条件添加到旧查询?

2 个答案:

答案 0 :(得分:1)

而不是你可以只做手册:

SELECT *
FROM gsm2 WHERE setTime >= :fromTime AND setTime <= :toTime

注意我在那里使用占位符?您也应该使用预备语句。

在实践中,如果您使用的是MySQLi,您可以这样做:

     $db = mysqli_connect(...); //Your connection
    $stmt = $db->prepare("SELECT * FROM gsm2 WHERE setTime >= ? AND setTime <= ?") or die($db->error);

    $from = filter_input(INPUT_POST, "from_date");
    $to = filter_input(INPUT_POST, "to_date");
    $stmt->bind_param("ss", $from, $to);
    $stmt->execute();
    $res = $stmt->get_result();
    // Do things like $res->fetch_assoc or similar here

请注意,如果您的$ _POST数据是日期,但您的SQL字段是DATETIME,那么您可能需要进行某种类型的转换,例如做WHERE DATE(setTime) >= ? AND DATE(setTime) <= ?

答案 1 :(得分:0)

我可能错了(因为我现在没有能力对它进行测试),但这应该有效:

$query = "SELECT *
FROM gsm2 WHERE setTime BETWEEN ".$_POST['from_date']." AND ".$_POST['to_date'].";

假设您的初始查询是正确的,但是当您使用('和“)的加载时,您的PHP代码会抛出一些错误。

主要是发帖指出您正在接受用户输入并将其直接放入SQL查询中。我很遗憾在2018年的StackOverflow上,这个类别中的许多用户将PHP输入变量直接放入SQL查询中,然后执行它而不检查输入以确保它首先有效。

1; DROP TABLE gsm2;等输入可能会删除整个表格。我不确定是什么类型的服务器端防火墙来处理这种类型的攻击,但这种做法都很糟糕。