Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
maraterl
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 48
1

Фильтрация записей в промежутке дат.

10.02.2014, 15:37. Просмотров 1724. Ответов 14
Метки нет (Все метки)

Добрый день форумчане, столкнулся с такой проблемой. Имеется БД и вся информация из нее выводится на форму index. Так как в базе несколько тысяч записей сделал поиск по определенному id и теперь далее необходимо сделать фильтрацию по дате из отсортированного поиска. Тип даты в БД datetime.
Вот скрин как выглядит форма:
0
Миниатюры
Фильтрация записей в промежутке дат.  
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2014, 15:37
Ответы с готовыми решениями:

Фильтрация записей, и вывод по категориям
всем привет! есть файл recipes.php <html> <head>...

Вывод уникальных записей с таблицы и суммирование дублированых записей с выводом колличества
Доброго времени суток форумчане! Не получается фильтровать записи при выводе...

Постраничный вывод записей (по 15 записей на страницу)
всем привет перерыл гору всяких скриптов и постов на тему "навигации по...

простая база с одним полем (оно же ключ), но много записей. как максимально быстро организовать проверку и добавление пакета новых записей?
есть простейшая БД (с одним полем), состоящая из уникальных строковых ключей, ...

Запрос в промежутке дат
вообщем делаю такой запрос, ругается на "<=" или "=>". почему такая проблема?...

14
mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
10.02.2014, 15:46 2
Цитата Сообщение от maraterl Посмотреть сообщение
Тип даты в БД datetime.
если тип поля datetime, то ничего не нужно придумывать
MySQL
1
2
ORDER BY `field_name` ASC
ORDER BY `field_name` DESC
0
maraterl
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 48
10.02.2014, 15:59  [ТС] 3
Спасибо за ответ, но вы не могли бы показать на примере?
0
mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
10.02.2014, 16:04 4
Цитата Сообщение от maraterl Посмотреть сообщение
Спасибо за ответ, но вы не могли бы показать на примере?
для этого хотя бы названия полей в таблице или код вашего изначального запроса нужно
0
maraterl
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 48
10.02.2014, 16:16  [ТС] 5
нашел пару примеров
PHP
1
2
$sql="SELECT * FROM db_guest ORDER BY time ASC";
$result=mysql_query($sql);
и
PHP
1
2
$sql="SELECT * FROM db_guest ORDER BY time DESC";
$result=mysql_query($sql);
вроде синтаксис поиска я понял, теперь получается на форме нужно создать два поля:
HTML5
1
input  name="data">
. Первое поле для ввода с какого числа фильтровать и второе поле по какое число фильтровать

Добавлено через 7 минут
Как теперь связать эти два поля с запросом в БД?
0
mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
10.02.2014, 16:59 6
Цитата Сообщение от maraterl Посмотреть сообщение
Первое поле для ввода с какого числа фильтровать и второе поле по какое число фильтровать
я затупил и неправильно понял вопрос

ORDER BY не фильтрует, а сортирует данные. в данном случае -- по дате.
для ваших целей нужно воспользоваться WHERE
PHP
1
2
$sql="SELECT * FROM db_guest WHERE time=>'2014-01-01 0:00:00' AND time<='2014-02-10 15:00:00' ORDER BY time DESC";
$result=mysql_query($sql);
с текстовыми полями будет примерно так же, единтвенное, что нужно будет сделать, это привести поисковые данные к тому же виду, как они лежат в поле таблицы

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if(isset($_POST["test"]))
{
    // в случае если в форму вводилась только дата, то время подставляем "0:00:00"
    $begin = $_POST["begin"]." 0:00:00"; 
    $end = $_POST["end"]." 23:59:59";
 
    $sql = "SELECT * FROM db_guest WHERE time=>'".$begin."' AND time<='".$end."' ORDER BY time DESC";
    $result=mysql_query($sql);
}
 
echo '<form method="POST">';
echo 'Начало: <input type="text" name="begin" value="" />';
echo 'Конец: <input type="text" name="end" value="" />';
echo '<input type="submit" value="Сохранить" name="test" />';
echo '</form>';
но сразу оговорюсь, что если в форму было введено, например "10.02.2014", то правильно работать не будет, нужно, чтобы дата была формата "год-месяц-день"

Добавлено через 9 минут
опять ошибся) вот так будет верно
PHP
1
$sql = "SELECT * FROM db_guest WHERE time>='".$begin."' AND time<='".$end."' ORDER BY time DESC";
Добавлено через 24 минуты
ну вот как-то так, если не слишком заморочено получилось, конечно
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
if(isset($_POST["test"]))
{
    $begin = mktime(0, 0, 0, $_POST["start_month"], $_POST["start_day"], $_POST["start_year"]);
    $end = mktime(23, 59, 59, $_POST["end_month"], $_POST["end_day"], $_POST["end_year"]);
 
    $sql = "SELECT * FROM db_guest WHERE time>='".date("Y-m-d H:i:s", $begin)."' AND time<='".date("Y-m-d H:i:s", $end)."' ORDER BY time DESC";
    $result=mysql_query($sql);
}
 
$month = array("январь", "февраль", "март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь");
 
echo '<form method="POST">';
echo '<table cellspacing="0" cellpadding="0" border="0">';
echo '<tr>';
echo '<td>Начало:</td>';
echo '<td>';
echo '<select name="start_day">';
 
for($i = 1; $i <= 31; $i++)
{
    echo '<option value="'.$i.'">'.(($i < 10)?("0".$i):($i)).'</option>';
}
 
echo '</select>';
echo '</td>';
echo '<td>';
echo '<select name="start_month">';
 
for($i = 0; $i < count($month); $i++)
{
    echo '<option value="'.($i + 1).'">'.$month[$i].'</option>';
}
 
echo '</select>';
echo '</td>';
echo '<td>';
echo '<select name="start_year">';
 
for($i = date("Y"); $i >= 1901; $i--)
{
    echo '<option value="'.$i.'">'.$i.'</option>';
}
 
echo '</select>';
echo '</td>';
echo '</tr>';
 
echo '<tr>';
echo '<td>Конец:</td>';
echo '<td>';
echo '<select name="end_day">';
 
for($i = 1; $i <= 31; $i++)
{
    echo '<option value="'.$i.'">'.(($i < 10)?("0".$i):($i)).'</option>';
}
 
echo '</select>';
echo '</td>';
echo '<td>';
echo '<select name="end_month">';
 
for($i = 0; $i < count($month); $i++)
{
    echo '<option value="'.($i + 1).'">'.$month[$i].'</option>';
}
 
echo '</select>';
echo '</td>';
echo '<td>';
echo '<select name="end_year">';
 
for($i = date("Y"); $i >= 1901; $i--)
{
    echo '<option value="'.$i.'">'.$i.'</option>';
}
 
echo '</select>';
echo '</td>';
echo '</tr>';
echo '</table>';
echo '<input type="submit" value="Тест" name="test" />';
echo '</form>';
1
Para bellum
Эксперт PHP
4106 / 3053 / 986
Регистрация: 06.01.2011
Сообщений: 8,934
10.02.2014, 17:00 7
Есть BETWEEN ещё .
PHP
1
$sql = "SELECT * FROM db_guest WHERE time BETWEEN '".$begin."' AND '".$end."' ORDER BY time DESC";
0
mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
10.02.2014, 17:05 8
как вот угораздило так коряво прочитать, что изначально фильтрация стала сортировкой... старею

Цитата Сообщение от lyod Посмотреть сообщение
Есть BETWEEN ещё .
есть и такое, но я вообще предпочитаю даты хранить числом в базе, ибо воистину
0
Para bellum
Эксперт PHP
4106 / 3053 / 986
Регистрация: 06.01.2011
Сообщений: 8,934
10.02.2014, 19:08 9
Цитата Сообщение от mav Посмотреть сообщение
я вообще предпочитаю даты хранить числом в базе
В смысле в секундах от 01.01.1970? BETWEEN и со временем в секундах справится .
0
maraterl
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 48
10.02.2014, 20:01  [ТС] 10
Попытался сделать по примеру что скинул mav, подключил базу, заменил на свои таблицы, но почему то не фильтрует, а хотя поиск идет. Не могли бы посмотреть где я ошибся. Необходимо было реализовать поиск и фильтрацию по дате. С поиском разобрался, но не могу разобраться с фильтрацией
0
Вложения
Тип файла: rar Index.rar (2.3 Кб, 5 просмотров)
mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
11.02.2014, 08:34 11
Цитата Сообщение от maraterl Посмотреть сообщение
С поиском разобрался, но не могу разобраться с фильтрацией
ошибок в коде было немало, вот и не работало)
1. лучше писать <?php, а не <? в начале скрипта
2. если написан if и после него не одна строчка на выполненние при этом условии, то оборачиваем {...}
3. при сабмите формы если производится проверка по наличию какого-то индекса $_POST массива, то этот индекс должен быть уникален, то есть не стоит создавать две кнопки с name="show"

в общем, вот так вроде бы работает (обработчики внизу, где написано "//-------------------Поиск-------------------------")
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
<style>
h2 {color:#FFF;
    text-align:center;
    font-family:Tahoma;
    }
h3 {color:#000000;
    text-align:center;
    font-family:Verdana, Geneva, sans-serif;
    }
table { width: 100%;                /* Ширина таблицы */
        border: 1px solid green;    /* Рамка вокруг таблицы */
        margin: auto;               /* Выравниваем таблицу по центру окна */
       }
td { text-align: center;            /* Выравниваем текст по центру ячейки */
     border: 1px solid green;       /* Рамка вокруг ячейки */
    }
</style>
<h3>Поиск по БД</h3> 
<!-- Элементы управления формы -->
<form name="out" method="post" align = "left">
<p> Введите ASN для поиска: <input type="text" name="asn">
<input type="submit" name="show" value="Показать">
</form>
 
<?php
//-------------Фильтрация по дате---------------- 
$link = mysql_connect("localhost", "root", "") or die("Не могу подключиться");
mysql_select_db('gts', $link) or die ('Не могу выбрать БД');
 
$month = array("январь", "февраль", "март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь");
 
echo '<form method="POST">';
echo '<table cellspacing="0" cellpadding="0" border="0">';
echo '<tr>';
echo '<td>Начало:</td>';
echo '<td>';
echo '<select name="start_day">';
 
for($i = 1; $i <= 31; $i++)
{
    echo '<option value="'.$i.'">'.(($i < 10)?("0".$i):($i)).'</option>';
}
 
echo '</select>';
echo '</td>';
echo '<td>';
echo '<select name="start_month">';
 
for($i = 0; $i < count($month); $i++)
{
    echo '<option value="'.($i + 1).'">'.$month[$i].'</option>';
}
 
echo '</select>';
echo '</td>';
echo '<td>';
echo '<select name="start_year">';
 
for($i = date("Y"); $i >= 1901; $i--)
{
    echo '<option value="'.$i.'">'.$i.'</option>';
}
 
echo '</select>';
echo '</td>';
echo '</tr>';
 
echo '<tr>';
echo '<td>Конец:</td>';
echo '<td>';
echo '<select name="end_day">';
 
for($i = 1; $i <= 31; $i++)
{
    echo '<option value="'.$i.'">'.(($i < 10)?("0".$i):($i)).'</option>';
}
 
echo '</select>';
echo '</td>';
echo '<td>';
echo '<select name="end_month">';
 
for($i = 0; $i < count($month); $i++)
{
    echo '<option value="'.($i + 1).'">'.$month[$i].'</option>';
}
 
echo '</select>';
echo '</td>';
echo '<td>';
echo '<select name="end_year">';
 
for($i = date("Y"); $i >= 1901; $i--)
{
    echo '<option value="'.$i.'">'.$i.'</option>';
}
 
echo '</select>';
echo '</td>';
echo '</tr>';
echo '</table>';
echo '<input type="submit" value="Фильтровать" name="filter" />';
echo '</form>';
 
//-------------------Поиск-------------------------
if(isset($_POST['filter']))
{
    $begin = mktime(0, 0, 0, $_POST["start_month"], $_POST["start_day"], $_POST["start_year"]);
    $end = mktime(23, 59, 59, $_POST["end_month"], $_POST["end_day"], $_POST["end_year"]);
    $sql = "SELECT * FROM inteco WHERE data>='".date("Y-m-d H:i:s", $begin)."' AND data<='".date("Y-m-d H:i:s", $end)."' ORDER BY data DESC";
    $result = mysql_query($sql);
 
    if(mysql_num_rows($result) > 0)
    {
        print "<table>\n";
 
        while ($line = mysql_fetch_array ($result, MYSQL_NUM)) 
        {
            print "\t<tr>\n";
 
            for ($i = 0; $i < count($line); $i++) 
            {
                print "\t\t<td>".$line[$i]."</td>\n"; 
            }
        
            print "\t</tr>\n";
        }
    
        print "</table>\n";
    }
    else
    {
        print "По запросу ничего не найдено.";
    }
}
 
if(isset($_POST['show'])) 
{
    // вот это место не совсем понятно, зачем использовать LIKE, 
    // тем более преобразуя строку в верхний регистр, если там числовое значение.
    // достаточно обойтись: 
    // $query = "SELECT * FROM inteco WHERE asn='".$_POST['asn']."' ORDER BY data DESC";
 
    $query = "SELECT * FROM inteco WHERE UPPER (asn) LIKE '%".strtoupper($_POST['asn'])."%'";
    $result = mysql_query($query) or die ("Запрос ошибочный");
 
    if(mysql_num_rows($result) > 0)
    {
        print "<table>\n";
 
        while ($line = mysql_fetch_array ($result, MYSQL_NUM)) 
        {
            print "\t<tr>\n";
 
            for ($i = 0; $i < count($line); $i++) 
            {
                print "\t\t<td>".$line[$i]."</td>\n"; 
            }
        
            print "\t</tr>\n";
        }
    
        print "</table>\n";
    }
    else
    {
        print "По запросу ничего не найдено.";
    }
}
?>
Добавлено через 3 минуты
Цитата Сообщение от lyod Посмотреть сообщение
В смысле в секундах от 01.01.1970? BETWEEN и со временем в секундах справится .
я к тому, что старые добрые "больше/меньше" как-то милее тем более, что человек явно в запросах пока еще не разбирается
1
maraterl
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 48
11.02.2014, 10:01  [ТС] 12
Спасибо за ответ, фильрация заработала. но дело в том что поиск и фильтрация работают отдельно. Мне необходимо произвести поиск по номеру, а затем исходя из результатов поиска нужно отфильровать по дате. Допустим я ввел в поиск 21299 и из базы выводит все записи где указано это число. Но дело в том что эти числа имеют разные даты. И мне не обходимо выбрать диапазон. Как вывести два запроса с одним результатом? Вот пример вывода поиска:
0
Миниатюры
Фильтрация записей в промежутке дат.  
mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
11.02.2014, 10:54 13
Лучший ответ Сообщение было отмечено maraterl как решение

Решение

вот так если последовательно, сначала нажимаем поиск, потом фильтруем
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
<style>
h2 {color:#FFF;
    text-align:center;
    font-family:Tahoma;
    }
h3 {color:#000000;
    text-align:center;
    font-family:Verdana, Geneva, sans-serif;
    }
table { width: 100%;                /* Ширина таблицы */
        border: 1px solid green;    /* Рамка вокруг таблицы */
        margin: auto;               /* Выравниваем таблицу по центру окна */
       }
td { text-align: center;            /* Выравниваем текст по центру ячейки */
     border: 1px solid green;       /* Рамка вокруг ячейки */
    }
</style>
 
<?php
 
echo '<h3>Поиск по БД</h3>';
echo '<!-- Элементы управления формы -->';
echo '<form name="out" method="post" align = "left">';
echo '<p> Введите ASN для поиска: <input type="text" name="asn" value="'.((isset($_POST["asn"])?($_POST["asn"]):(""))).'">';
echo '<input type="submit" name="show" value="Показать">';
echo '</form>';
 
//-------------Фильтрация по дате---------------- 
$link = mysql_connect("localhost", "root", "123") or die("Не могу подключиться");
mysql_select_db('gts', $link) or die ('Не могу выбрать БД');
 
$month = array("январь", "февраль", "март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь");
 
echo '<form method="POST">';
echo '<table cellspacing="0" cellpadding="0" border="0">';
echo '<tr>';
echo '<td>Начало:</td>';
echo '<td>';
echo '<select name="start_day">';
 
for($i = 1; $i <= 31; $i++)
{
    echo '<option value="'.$i.'"'.((isset($_POST["start_day"]) && $_POST["start_day"] == $i)?(" selected"):("")).'>'.(($i < 10)?("0".$i):($i)).'</option>';
}
 
echo '</select>';
echo '</td>';
echo '<td>';
echo '<select name="start_month">';
 
for($i = 0; $i < count($month); $i++)
{
    echo '<option value="'.($i + 1).'"'.((isset($_POST["start_month"]) && $_POST["start_month"] == ($i+1))?(" selected"):("")).'>'.$month[$i].'</option>';
}
 
echo '</select>';
echo '</td>';
echo '<td>';
echo '<select name="start_year">';
 
for($i = date("Y"); $i >= 1901; $i--)
{
    echo '<option value="'.$i.'"'.((isset($_POST["start_year"]) && $_POST["start_year"] == $i)?(" selected"):("")).'>'.$i.'</option>';
}
 
echo '</select>';
echo '</td>';
echo '</tr>';
 
echo '<tr>';
echo '<td>Конец:</td>';
echo '<td>';
echo '<select name="end_day">';
 
for($i = 1; $i <= 31; $i++)
{
    echo '<option value="'.$i.'"'.((isset($_POST["end_day"]) && $_POST["end_day"] == $i)?(" selected"):("")).'>'.(($i < 10)?("0".$i):($i)).'</option>';
}
 
echo '</select>';
echo '</td>';
echo '<td>';
echo '<select name="end_month">';
 
for($i = 0; $i < count($month); $i++)
{
    echo '<option value="'.($i + 1).'"'.((isset($_POST["end_month"]) && $_POST["end_month"] == ($i+1))?(" selected"):("")).'>'.$month[$i].'</option>';
}
 
echo '</select>';
echo '</td>';
echo '<td>';
echo '<select name="end_year">';
 
for($i = date("Y"); $i >= 1901; $i--)
{
    echo '<option value="'.$i.'"'.((isset($_POST["end_year"]) && $_POST["end_year"] == $i)?(" selected"):("")).'>'.$i.'</option>';
}
 
echo '</select>';
echo '</td>';
echo '</tr>';
echo '</table>';
 
if(isset($_POST["asn"]))
{
    echo '<input type="hidden" name="asnvalue" value="'.$_POST["asn"].'" />';
}
 
echo '<input type="submit" value="Фильтровать" name="filter" />';
echo '</form>';
 
//-------------------Поиск-------------------------
if(isset($_POST['filter']))
{
    $begin = mktime(0, 0, 0, $_POST["start_month"], $_POST["start_day"], $_POST["start_year"]);
    $end = mktime(23, 59, 59, $_POST["end_month"], $_POST["end_day"], $_POST["end_year"]);
 
    $where = "data>='".date("Y-m-d H:i:s", $begin)."' AND data<='".date("Y-m-d H:i:s", $end)."'";
 
    if(isset($_POST["asnvalue"]))
    {
        $where .= " AND asn='".$_POST["asnvalue"]."'";
    }
 
    $sql = "SELECT * FROM inteco WHERE ".$where." ORDER BY data DESC";
    $result = mysql_query($sql);
 
    if(mysql_num_rows($result) > 0)
    {
        print "<table>\n";
 
        while ($line = mysql_fetch_array($result, MYSQL_NUM)) 
        {
            print "\t<tr>\n";
 
            for ($i = 0; $i < count($line); $i++) 
            {
                print "\t\t<td>".$line[$i]."</td>\n"; 
            }
        
            print "\t</tr>\n";
        }
    
        print "</table>\n";
    }
    else
    {
        print "По запросу ничего не найдено.";
    }
}
 
if(isset($_POST['show'])) 
{
    // вот это место не совсем понятно, зачем использовать LIKE, 
    // тем более преобразуя строку в верхний регистр, если там числовое значение.
    // достаточно обойтись: 
    // $query = "SELECT * FROM inteco WHERE asn='".$_POST['asn']."' ORDER BY data DESC";
 
    $query = "SELECT * FROM inteco WHERE UPPER (asn) LIKE '%".strtoupper($_POST['asn'])."%'";
    $result = mysql_query($query) or die ("Запрос ошибочный");
 
    if(mysql_num_rows($result) > 0)
    {
        print "<table>\n";
 
        while ($line = mysql_fetch_array ($result, MYSQL_NUM)) 
        {
            print "\t<tr>\n";
 
            for ($i = 0; $i < count($line); $i++) 
            {
                print "\t\t<td>".$line[$i]."</td>\n"; 
            }
        
            print "\t</tr>\n";
        }
    
        print "</table>\n";
    }
    else
    {
        print "По запросу ничего не найдено.";
    }
}
?>
а вот так, если все в одной форме
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
<style>
h2 {color:#FFF;
    text-align:center;
    font-family:Tahoma;
    }
h3 {color:#000000;
    text-align:center;
    font-family:Verdana, Geneva, sans-serif;
    }
table { width: 100%;                /* Ширина таблицы */
        border: 1px solid green;    /* Рамка вокруг таблицы */
        margin: auto;               /* Выравниваем таблицу по центру окна */
       }
td { text-align: center;            /* Выравниваем текст по центру ячейки */
     border: 1px solid green;       /* Рамка вокруг ячейки */
    }
</style>
 
<?php
 
//-------------Фильтрация по дате---------------- 
$link = mysql_connect("localhost", "root", "123") or die("Не могу подключиться");
mysql_select_db('gts', $link) or die ('Не могу выбрать БД');
 
$month = array("январь", "февраль", "март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь");
 
echo '<form method="POST">';
echo '<h3>Поиск по БД</h3>';
echo '<p> Введите ASN для поиска: <input type="text" name="asn" value="'.((isset($_POST["asn"])?($_POST["asn"]):(""))).'" /></p>';
 
echo '<table cellspacing="0" cellpadding="0" border="0">';
echo '<tr>';
echo '<td>Начало:</td>';
echo '<td>';
echo '<select name="start_day">';
 
for($i = 1; $i <= 31; $i++)
{
    echo '<option value="'.$i.'"'.((isset($_POST["start_day"]) && $_POST["start_day"] == $i)?(" selected"):("")).'>'.(($i < 10)?("0".$i):($i)).'</option>';
}
 
echo '</select>';
echo '</td>';
echo '<td>';
echo '<select name="start_month">';
 
for($i = 0; $i < count($month); $i++)
{
    echo '<option value="'.($i + 1).'"'.((isset($_POST["start_month"]) && $_POST["start_month"] == ($i+1))?(" selected"):("")).'>'.$month[$i].'</option>';
}
 
echo '</select>';
echo '</td>';
echo '<td>';
echo '<select name="start_year">';
 
for($i = date("Y"); $i >= 1901; $i--)
{
    echo '<option value="'.$i.'"'.((isset($_POST["start_year"]) && $_POST["start_year"] == $i)?(" selected"):("")).'>'.$i.'</option>';
}
 
echo '</select>';
echo '</td>';
echo '</tr>';
 
echo '<tr>';
echo '<td>Конец:</td>';
echo '<td>';
echo '<select name="end_day">';
 
for($i = 1; $i <= 31; $i++)
{
    echo '<option value="'.$i.'"'.((isset($_POST["end_day"]) && $_POST["end_day"] == $i)?(" selected"):("")).'>'.(($i < 10)?("0".$i):($i)).'</option>';
}
 
echo '</select>';
echo '</td>';
echo '<td>';
echo '<select name="end_month">';
 
for($i = 0; $i < count($month); $i++)
{
    echo '<option value="'.($i + 1).'"'.((isset($_POST["end_month"]) && $_POST["end_month"] == ($i+1))?(" selected"):("")).'>'.$month[$i].'</option>';
}
 
echo '</select>';
echo '</td>';
echo '<td>';
echo '<select name="end_year">';
 
for($i = date("Y"); $i >= 1901; $i--)
{
    echo '<option value="'.$i.'"'.((isset($_POST["end_year"]) && $_POST["end_year"] == $i)?(" selected"):("")).'>'.$i.'</option>';
}
 
echo '</select>';
echo '</td>';
echo '</tr>';
echo '</table>';
 
echo '<input type="submit" value="Фильтровать" name="filter" />';
echo '</form>';
 
//-------------------Поиск-------------------------
if(isset($_POST['filter']))
{
    $begin = mktime(0, 0, 0, $_POST["start_month"], $_POST["start_day"], $_POST["start_year"]);
    $end = mktime(23, 59, 59, $_POST["end_month"], $_POST["end_day"], $_POST["end_year"]);
 
    $where = "data>='".date("Y-m-d H:i:s", $begin)."' AND data<='".date("Y-m-d H:i:s", $end)."'";
 
    if(isset($_POST["asn"]))
    {
        $where .= " AND asn='".$_POST["asn"]."'";
    }
 
    $sql = "SELECT * FROM inteco WHERE ".$where." ORDER BY data DESC";
    $result = mysql_query($sql);
 
    if(mysql_num_rows($result) > 0)
    {
        print "<table>\n";
 
        while ($line = mysql_fetch_array($result, MYSQL_NUM)) 
        {
            print "\t<tr>\n";
 
            for ($i = 0; $i < count($line); $i++) 
            {
                print "\t\t<td>".$line[$i]."</td>\n"; 
            }
        
            print "\t</tr>\n";
        }
    
        print "</table>\n";
    }
    else
    {
        print "По запросу ничего не найдено.";
    }
}
?>
1
maraterl
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 48
11.02.2014, 14:02  [ТС] 14
Может быть нужно было создать новый топик. Я задался вопросом. Можно ли полученный результат экспортировать в текстовый файл? Если да, то как удобно сделать?
0
mav
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
11.02.2014, 15:34 15
Цитата Сообщение от maraterl Посмотреть сообщение
Может быть нужно было создать новый топик. Я задался вопросом. Можно ли полученный результат экспортировать в текстовый файл? Если да, то как удобно сделать?
как-то так
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
<style>
h2 {color:#FFF;
    text-align:center;
    font-family:Tahoma;
    }
h3 {color:#000000;
    text-align:center;
    font-family:Verdana, Geneva, sans-serif;
    }
table { width: 100%;                /* Ширина таблицы */
        border: 1px solid green;    /* Рамка вокруг таблицы */
        margin: auto;               /* Выравниваем таблицу по центру окна */
       }
td { text-align: center;            /* Выравниваем текст по центру ячейки */
     border: 1px solid green;       /* Рамка вокруг ячейки */
    }
</style>
 
<?php
 
//-------------Фильтрация по дате---------------- 
$link = mysql_connect("localhost", "root", "123") or die("Не могу подключиться");
mysql_select_db('gts', $link) or die ('Не могу выбрать БД');
 
$month = array("январь", "февраль", "март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь");
 
echo '<form method="POST">';
 
echo '<h3>Поиск по БД</h3>';
echo '<p> Введите ASN для поиска: <input type="text" name="asn" value="'.((isset($_POST["asn"])?($_POST["asn"]):(""))).'" /></p>';
 
echo '<table cellspacing="0" cellpadding="0" border="0">';
echo '<tr>';
echo '<td>Начало:</td>';
echo '<td>';
echo '<select name="start_day">';
 
for($i = 1; $i <= 31; $i++)
{
    echo '<option value="'.$i.'"'.((isset($_POST["start_day"]) && $_POST["start_day"] == $i)?(" selected"):("")).'>'.(($i < 10)?("0".$i):($i)).'</option>';
}
 
echo '</select>';
echo '</td>';
echo '<td>';
echo '<select name="start_month">';
 
for($i = 0; $i < count($month); $i++)
{
    echo '<option value="'.($i + 1).'"'.((isset($_POST["start_month"]) && $_POST["start_month"] == ($i+1))?(" selected"):("")).'>'.$month[$i].'</option>';
}
 
echo '</select>';
echo '</td>';
echo '<td>';
echo '<select name="start_year">';
 
for($i = date("Y"); $i >= 1901; $i--)
{
    echo '<option value="'.$i.'"'.((isset($_POST["start_year"]) && $_POST["start_year"] == $i)?(" selected"):("")).'>'.$i.'</option>';
}
 
echo '</select>';
echo '</td>';
echo '</tr>';
 
echo '<tr>';
echo '<td>Конец:</td>';
echo '<td>';
echo '<select name="end_day">';
 
for($i = 1; $i <= 31; $i++)
{
    echo '<option value="'.$i.'"'.((isset($_POST["end_day"]) && $_POST["end_day"] == $i)?(" selected"):("")).'>'.(($i < 10)?("0".$i):($i)).'</option>';
}
 
echo '</select>';
echo '</td>';
echo '<td>';
echo '<select name="end_month">';
 
for($i = 0; $i < count($month); $i++)
{
    echo '<option value="'.($i + 1).'"'.((isset($_POST["end_month"]) && $_POST["end_month"] == ($i+1))?(" selected"):("")).'>'.$month[$i].'</option>';
}
 
echo '</select>';
echo '</td>';
echo '<td>';
echo '<select name="end_year">';
 
for($i = date("Y"); $i >= 1901; $i--)
{
    echo '<option value="'.$i.'"'.((isset($_POST["end_year"]) && $_POST["end_year"] == $i)?(" selected"):("")).'>'.$i.'</option>';
}
 
echo '</select>';
echo '</td>';
echo '</tr>';
echo '</table>';
 
echo '<input type="submit" value="Фильтровать" name="filter" />';
echo '</form>';
 
//-------------------Поиск-------------------------
$export = false;
 
if(isset($_POST['export']))
{
    $begin = mktime(0, 0, 0, $_POST["start_month"], $_POST["start_day"], $_POST["start_year"]);
    $end = mktime(23, 59, 59, $_POST["end_month"], $_POST["end_day"], $_POST["end_year"]);
 
    $where = "data>='".date("Y-m-d H:i:s", $begin)."' AND data<='".date("Y-m-d H:i:s", $end)."' AND asn='".$_POST["asn"]."'";
 
    $sql = "SELECT * FROM inteco WHERE ".$where." ORDER BY data DESC";
    $result = mysql_query($sql);
 
    if(mysql_num_rows($result) > 0)
    {
        if(!empty($_POST["filename"]))
        {
            $filename = $_POST["filename"];
        }
        else 
        {
            $filename = "export_".date("d.m.Y").".txt";
        }
 
        $h = fopen($filename, "w");
 
        while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) 
        {
            fwrite($h, "\r\n");
 
            foreach($line as $name => $value) 
            {
                fwrite($h, $name.": ".$value."\r\n"); 
            }
        }
    
        fclose($h);
 
        echo '<p style="color: #090;">Файл "'.$filename.'" записан.</p>';
        $export = true; 
    }
    else
    {
        print '<p style="color: #900;">Запись файла не удалась</p>';
    }
}
 
if(isset($_POST['filter']) || $export)
{
    $begin = mktime(0, 0, 0, $_POST["start_month"], $_POST["start_day"], $_POST["start_year"]);
    $end = mktime(23, 59, 59, $_POST["end_month"], $_POST["end_day"], $_POST["end_year"]);
 
    $where = "data>='".date("Y-m-d H:i:s", $begin)."' AND data<='".date("Y-m-d H:i:s", $end)."'";
 
    if(isset($_POST["asn"]))
    {
        $where .= " AND asn='".$_POST["asn"]."'";
    }
 
    $sql = "SELECT * FROM inteco WHERE ".$where." ORDER BY data DESC";
    $result = mysql_query($sql);
 
    if(mysql_num_rows($result) > 0)
    {
        print "<table>\n";
 
        while ($line = mysql_fetch_array($result, MYSQL_NUM)) 
        {
            print "\t<tr>\n";
 
            for ($i = 0; $i < count($line); $i++) 
            {
                print "\t\t<td>".$line[$i]."</td>\n"; 
            }
        
            print "\t</tr>\n";
        }
    
        print "</table>\n";
 
        echo '<form method="POST">';
        echo '<p> Введите имя файла: <input type="text" name="filename" value="" /></p>';
        echo '<input type="hidden" name="asn" value="'.@$_POST["asn"].'" />';
        echo '<input type="hidden" name="start_day" value="'.$_POST["start_day"].'" />';
        echo '<input type="hidden" name="start_month" value="'.$_POST["start_month"].'" />';
        echo '<input type="hidden" name="start_year" value="'.$_POST["start_year"].'" />';
        echo '<input type="hidden" name="end_day" value="'.$_POST["end_day"].'" />';
        echo '<input type="hidden" name="end_month" value="'.$_POST["end_month"].'" />';
        echo '<input type="hidden" name="end_year" value="'.$_POST["end_year"].'" />';
        echo '<input type="submit" value="Записать в файл" name="export" />';
        echo '</form>';
    }
    else
    {
        print "По запросу ничего не найдено.";
    }
}
?>
1
11.02.2014, 15:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2014, 15:34

Выборка в промежутке дат (по условию)
Не могу ни как составить выборку по условию промежутка дат. Даты храню в тайм...

Определенная дата в промежутке дат
Здравствуйте. Есть два поля для ввода. Пользователь должен ввести туда даты....

Вывести файлы в промежутке указанных дат создания
Вывести список всех файлов из указанной директории, дата создания которых лежит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru