Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/40: Рейтинг темы: голосов - 40, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 48
1

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

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

Author24 — интернет-сервис помощи студентам
Добрый день форумчане, столкнулся с такой проблемой. Имеется БД и вся информация из нее выводится на форму index. Так как в базе несколько тысяч записей сделал поиск по определенному id и теперь далее необходимо сделать фильтрацию по дате из отсортированного поиска. Тип даты в БД datetime.
Вот скрин как выглядит форма:
Миниатюры
Фильтрация записей в промежутке дат.  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.02.2014, 15:37
Ответы с готовыми решениями:

Не работает фильтрация записей по промежутку дат
Не работает фильтрация записей по промежутку дат. Вместо фильтрации тащит все записи. $logs =...

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

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

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

14
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
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 48
10.02.2014, 15:59  [ТС] 3
Спасибо за ответ, но вы не могли бы показать на примере?
0
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
10.02.2014, 16:04 4
Цитата Сообщение от maraterl Посмотреть сообщение
Спасибо за ответ, но вы не могли бы показать на примере?
для этого хотя бы названия полей в таблице или код вашего изначального запроса нужно
0
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
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
Эксперт PHP
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
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
228 / 206 / 120
Регистрация: 23.06.2009
Сообщений: 481
10.02.2014, 17:05 8
как вот угораздило так коряво прочитать, что изначально фильтрация стала сортировкой... старею

Цитата Сообщение от lyod Посмотреть сообщение
Есть BETWEEN ещё .
есть и такое, но я вообще предпочитаю даты хранить числом в базе, ибо воистину
0
Эксперт PHP
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
10.02.2014, 19:08 9
Цитата Сообщение от mav Посмотреть сообщение
я вообще предпочитаю даты хранить числом в базе
В смысле в секундах от 01.01.1970? BETWEEN и со временем в секундах справится .
0
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 48
10.02.2014, 20:01  [ТС] 10
Попытался сделать по примеру что скинул mav, подключил базу, заменил на свои таблицы, но почему то не фильтрует, а хотя поиск идет. Не могли бы посмотреть где я ошибся. Необходимо было реализовать поиск и фильтрацию по дате. С поиском разобрался, но не могу разобраться с фильтрацией
Вложения
Тип файла: rar Index.rar (2.3 Кб, 10 просмотров)
0
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
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 48
11.02.2014, 10:01  [ТС] 12
Спасибо за ответ, фильрация заработала. но дело в том что поиск и фильтрация работают отдельно. Мне необходимо произвести поиск по номеру, а затем исходя из результатов поиска нужно отфильровать по дате. Допустим я ввел в поиск 21299 и из базы выводит все записи где указано это число. Но дело в том что эти числа имеют разные даты. И мне не обходимо выбрать диапазон. Как вывести два запроса с одним результатом? Вот пример вывода поиска:
Миниатюры
Фильтрация записей в промежутке дат.  
0
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
0 / 0 / 0
Регистрация: 04.04.2011
Сообщений: 48
11.02.2014, 14:02  [ТС] 14
Может быть нужно было создать новый топик. Я задался вопросом. Можно ли полученный результат экспортировать в текстовый файл? Если да, то как удобно сделать?
0
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.02.2014, 15:34
Помогаю со студенческими работами здесь

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

Авто-расчет кол-ва дней в промежутке заданных дат.
Привет друзья! Стоит задача - требуется, что бы в ячейке отображалось число (количество) -...

Выборка значений в промежутке дат ADOQuery, TimeDataPicker, Delphi
Не получается выборка по заданному диапазону дат. Необходимо выводить записи с датами между...

Фильтрация дат
Есть поле дата, вс записи в формате дата, но при выборе сортировки от старого к новому выдает кашу...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru