Как выбрать одну дату в пипере php mysql? - PullRequest
0 голосов
/ 10 мая 2018

Как я могу выбрать одну дату из моего выбора диапазона дат?

<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>

вот мой запрос от средства выбора диапазона дат:

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

Если вы попытаетесь выбрать 2 одинаковые даты, это не сработает из-за этого

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

Мне нужно добавить оператор, который будет

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

как я могу добавить это условие к старому запросу?

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

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

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

Исходя из предположения, что ваш первоначальный запрос был правильным, но ваш PHP-код выдавал некоторые ошибки, так как вы используете множество ('и ").

В основном публикация, указывающая на то, что вы принимаете пользовательский ввод и выбрасываете его прямо в запрос SQL. Я искренне удивлен, что в 2018 году в StackOverflow так много пользователей в этой категории помещают входные переменные PHP непосредственно в SQL-запрос, а затем выполняют его, не проверяя ввод, чтобы сначала убедиться, что он действителен.

Ввод, например 1; DROP TABLE gsm2;, может удалить всю вашу таблицу. Я не уверен, какие существуют серверные брандмауэры для борьбы с такого рода атаками, но все равно это ужасная практика.

0 голосов
/ 10 мая 2018

Вместо этого вы можете просто сделать руководство:

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) <= ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...