За последние 24 часа нас посетили 17667 программистов и 1721 робот. Сейчас ищут 922 программиста ...

Выборка по дате.

Тема в разделе "PHP для новичков", создана пользователем kir_f, 23 мар 2016.

  1. kir_f

    kir_f Новичок

    С нами с:
    23 мар 2016
    Сообщения:
    8
    Симпатии:
    0
    Здравствуйте!
    Есть таблица с полем date (datetime). По этому полю необходимо сделать выборку строк соотвествующему дате С - По.

    Пока настроил только вывод строк с таблицы. Как прикрутить календарь?

    Код (PHP):
    1.  $qr_result = mysql_query("select * from " . $db_table_to_show)
    2.     or die(mysql_error());
    3.  
    4.   echo '<table border="1">';
    5.   echo '<thead>';
    6.   echo '<tr>';
    7.   echo '<th>date</th>';
    8.   echo '<th>name</th>';
    9.   echo '<th>lastname</th>';
    10.   echo '</tr>';
    11.   echo '</thead>';
    12.   echo '<tbody>';
    13.   
    14.  
    15.   while($data = mysql_fetch_array($qr_result)){ 
    16.     echo '<tr>';
    17.     echo '<td>' . $data['date'] . '</td>';
    18.     echo '<td>' . $data['name'] . '</td>';
    19.     echo '<td>' . $data['lastname'] . '</td>';
    20.     echo '</tr>';
    21.   } 
    Заранее спасибо

    рекомендую использовать не [code][/code], а [code=php][/code] — так будет подсвечен синтаксис
    —  модераторъ
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    0. нафиг тебе имя таблицы хранить в переменной? ненужную сложность чую я :)

    1. добавить в запрос условие с-по: … WHERE `date` BETWEEN ? AND ?
    вместо вопросов должны быть твои значения даты. литералы даты в MySQL имеют формат 'YYYY-MM-DD', не забывай одинарные кавычки!
    важно: between это включающее условие, т.е. она включает в результат обе даты, как если бы использовались операции >= и <=.
    если в твоём поле хранится дата без времени, то для поиска за вчера+сегодня условие выглядит так:
    Код (PHP):
    1. SELECT * FROM `mytable` WHERE `date` BETWEEN '2016-03-22' AND '2016-03-23'
    если в поле date хранится дата + время, то всё несколько сложнее, сегодняшние события не попадут в такую выборку, потому что '2016-03-23 10:00:00' > '2016-03-23'. в таком случае хотябы последний аргумент (а лучше оба) должен быть тоже со временем:
    Код (PHP):
    1. SELECT * FROM `mytable` WHERE `date` BETWEEN '2016-03-22 00:00:00' AND '2016-03-23 23:59:59'
    2. что за календарь?

    заранее не за что.
     
  3. kir_f

    kir_f Новичок

    С нами с:
    23 мар 2016
    Сообщения:
    8
    Симпатии:
    0
    Календарь. Пользователь кликает на его и выбирает дату.. Показать с - по.
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    Так найди в интернетах подходящий календарь и попытайся что-то сделать. Потом приходи с конкретными вопросами.
     
  5. kir_f

    kir_f Новичок

    С нами с:
    23 мар 2016
    Сообщения:
    8
    Симпатии:
    0
    Код (PHP):
    1. <!doctype html>
    2. <html lang="en">
    3. <head>
    4.   <meta charset="utf-8">
    5.   <title>jQuery UI Datepicker - Default functionality</title>
    6.   <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
    7.   <script src="//code.jquery.com/jquery-1.10.2.js"></script>
    8.   <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
    9.   <link rel="stylesheet" href="/resources/demos/style.css">
    10.   <script>
    11.   $(function() {
    12.     $( "#datepicker_from, #datepicker_to" ).datepicker( { dateFormat: "yy-mm-dd" } );
    13.   });
    14.   </script>
    15. </head>
    16.  <form method="post">
    17.      <p>Дата от : <input type="text" id="datepicker_from" name="data_from"> Дата до : <input type="text" id="datepicker_to" name="data_to"> </p> 
    18.      <input type='submit'>
    19.  </form>
    20.  
    21. <?php 
    22.  
    23. $result = mysql_query("SELECT * FROM $vesy WHERE prefix_client=' " . $user_pref . " ' and `date`>=' " . $datefrom . " ' and `date`<= ' " . $dateto . " ' ORDER by `date` DESC", $db) or die('mysql_query '.mysql_error());
    24.  
    25. if(isset($_POST['data_from']) || isset($_POST['data_to'])){
    26.  
    27.  
    28.     try {  
    29.  
    30.         $host = 'localhost';
    31.         $dbname = 'tanletest';
    32.         $user = 'root';
    33.         $pass = '';
    34.      
    35.           $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user); 
    36.  
    37.           $query = "SELECT * FROM testTable";
    38.  
    39.           if(isset($_POST['data_from']) && $_POST['data_from'] !== '') $query .= " WHERE date >= '".$_POST['data_from']."'";
    40.  
    41.           if(isset($_POST['data_to']) && $_POST['data_to'] !== '') $query .= " AND date <= '".$_POST['date_to']."'";
    42.      
    43.           $STH = $DBH->query($query);  
    44.  
    45.         $STH->setFetchMode(PDO::FETCH_ASSOC);  
    46.           
    47.         while($row = $STH->fetch()) {  
    48.             echo $row['name'] . "\n";  
    49.             echo $row['lastname'] . "\n";  
    50.             echo $row['date'] . "\n";  
    51.         }
    52.      
    53.     }  
    54.     catch(PDOException $e) {  
    55.         echo $e->getMessage();  
    56.     }
    57.  
    58. }
    59.  
    60. ?>
    Попытка не рабочая. Тут где-то косяк...
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    здесь не видно откуда берутся переменные $vesy, $datefrom и другие — первый mysql_query их использует. мусор не оставляй!

    Добавлено спустя 4 минуты 36 секунд:
    далее ты вроде бы что-то проверяешь про POST, не написал срабатывают условия или нет. если в чём-то неуверен, ставь там отладочный вывод переменных типа var_dump($_POST) чтобы точно знать.
    после того, как составишь текст запроса из кусочков, выведи его тоже, чтобы проверить запрос без php в phpmyadmin или что там у тебя есть.
    уровень вывода ошибок должен быть максимальным, чтобы ни одна неинициализированная переменная не проскочила!

    http://phpfaq.ru/debug
     
  7. kir_f

    kir_f Новичок

    С нами с:
    23 мар 2016
    Сообщения:
    8
    Симпатии:
    0
    Сори это я напутал. лишняя строчка была.
    Вот вариант с косяком.

    Код (PHP):
    1. <!doctype html>
    2. <html lang="en">
    3. <head>
    4.   <meta charset="utf-8">
    5.   <title>jQuery UI Datepicker - Default functionality</title>
    6.   <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
    7.   <script src="//code.jquery.com/jquery-1.10.2.js"></script>
    8.   <script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
    9.   <link rel="stylesheet" href="/resources/demos/style.css">
    10.   <script>
    11.   $(function() {
    12.     $( "#datepicker_from, #datepicker_to" ).datepicker( { dateFormat: "yy-mm-dd" } );
    13.   });
    14.   </script>
    15. </head>
    16. <body>
    17.  <form method="post">
    18.      <p>Дата от : <input type="text" id="datepicker_from" name="data_from"> Дата до : <input type="text" id="datepicker_to" name="data_to"> </p> 
    19.      <input type='submit'>
    20.  </form>
    21.  
    22. <?php 
    23.  
    24. if(isset($_POST['data_from']) || isset($_POST['data_to'])){
    25.  
    26.  
    27.     try {  
    28.  
    29.         $host = 'localhost';
    30.         $dbname = 'tanletest';
    31.         $user = 'root';
    32.         $pass = '';
    33.      
    34.           $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user); 
    35.  
    36.           $query = "SELECT * FROM testTable";
    37.  
    38.           if(isset($_POST['data_from']) && $_POST['data_from'] !== '') $query .= " WHERE date >= '".$_POST['data_from']."'";
    39.  
    40.           if(isset($_POST['data_to']) && $_POST['data_to'] !== '') $query .= " AND date <= '".$_POST['date_to']."'";
    41.      
    42.           $STH = $DBH->query($query);  
    43.  
    44.         $STH->setFetchMode(PDO::FETCH_ASSOC);  
    45.           
    46.         while($row = $STH->fetch()) {  
    47.             echo $row['name'] . "\n";  
    48.             echo $row['lastname'] . "\n";  
    49.             echo $row['date'] . "\n";  
    50.         }
    51.      
    52.     }  
    53.     catch(PDOException $e) {  
    54.         echo $e->getMessage();  
    55.     }
    56.  
    57. }
    58.  
    59. ?>
    60.  
    61. </body>
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    и что именно происходит? какой там запрос в итоге? где error_reporting, var_debug ?
     
  9. kir_f

    kir_f Новичок

    С нами с:
    23 мар 2016
    Сообщения:
    8
    Симпатии:
    0
    Fatal error: Call to a member function setFetchMode() on a non-object in Z:\home\b.local\www\modules\php\php.module(80) : eval()'d code on line 44

    Добавлено спустя 48 минут 12 секунд:
    object(PDOStatement)#32 (1) { ["queryString"]=> string(75) "SELECT * FROM testTable WHERE burn_date >= '2014-07-01' AND burn_date <= ''Сюда не приходит дата" }

    из-за ...ошбики в этой строчке... if(isset($_POST['data_to']) && $_POST['data_to'] !== '') $query .= " AND date <= '".$_POST['date_to']."'";
    верная строчка if(isset($_POST['data_to']) && $_POST['data_to'] !== '') $query .= " AND date <= '".$_POST['data_to']."'";

    Спасибо! тема закрыта.