|
|
|
|
|
для: sim5
(07.02.2011 в 05:47)
| | 1.Большое спасибо за Ваши замеания по поводу безопасности и остальных моментах. Приму во внимание.
2.С локалью не разобрался, похоже оставлю определение месяца как есть .... Через массив.
3.На счет выделения месяца жирным, это я хотел здесь в коде просто выделить $m1 , но получилось что оно не выделило, а вставило туда теги.
<?php
echo "тра-ля-ля <font color=red size=5><b><u>".$m1."</u></b></font> тра-ля-ля ".$_POST['year']." - $num_rows тра-ля-ля.";
?>
|
п.с. здесь понятно. | |
|
|
|
|
|
|
|
для: TrEK
(06.02.2011 в 20:45)
| | Проверить просто пустой или непустой недостаточно, ибо sql-инъкция это не пустое значение, и "радости" от такого заполнения пустоты вы не получите. ;-) | |
|
|
|
|
|
|
|
для: TrEK
(06.02.2011 в 19:57)
| | >Ну $curr_m , $curr_y выводятся еще в одном месте у меня, чтоб как бы видеть какой сегодня месяц-год, тоесть для запроса в БД испаользуются не они а $_POST['month'], $_POST['year']
Не к чему их вообще использовать, ибо вы далее оперируете почему-то $_POST['month'], а в случае, если после проверки (так как вы делатете) будут возвращены нули, то это приведет просто к пустому запросу. Запрашивать то чего нет, и зная об этом хорошо, зачем, удостовериться, что нет? К тому же, вы эту текущую дату то не приравниваете пост перменным, то приравниваете.
Вам требуется выводить из базы и выбирать текущую дату при первичной загрузке страницы. Делать запрос по несуществующим датам тоже смысла нет. Отсюда появляется условие:
если массив $_POST пуст ИЛИ если установлена переменная $_POST['year'], но она после проверки возвращает ноль ИЛИ если установлена переменная $_POST['month'], но она после проверки возвращает ноль, то использовать текущую дату, ИНАЧЕ использовать дату пришедшую из формы.
Для того чтобы составить это СЛОВЕСНОЕ условие, достаточно подумать, что вам надо, а чего не желательно, и вам об этом уже вторую тему мусолит и cheops, и я несколько раз повторял... Но то, что словами написать условие вы могли бы, не сомневаюсь, по крайней мере, после "подумавши", точно. А перевести это условие на язык РНР, так это просто слова заменить на соответствия:
<?
if(empty($_POST) || isset($_POST['year']) && !intval($_POST['year']) || isset($_POST['month']) && !intval($_POST['month'])) {
$_POST['year'] = date("Y");
$_POST['month'] = date("m");
}
| Далее используете, везде, $_POST['year'] и $_POST['month']. Заметьте, что при первичной загрузке страницы вы устанавливаете их, а при получении формы будут использоваться те, что пришлет форма, но заменнные на текущее значение в случае инъекции. При этом, значения этих переменных прошедшие intval() вы не используете непосредственно, и можете использовать запрос, который вам показывал cheops ранее.
Далее достаточно указать:
<?
echo "ВСЕ фильми, Которые были добавленны за выбранный период! <b>".
strftime('%B', strtotime($_POST['year'].$_POST['month']))."</b> ".
$_POST['year']." - $num_rows фильмов.";
| А не разберетесь со своей локалью, можете использовать массив имен. Списки выводить циклом, проверя итерацию (добавляя к ней ведущий ноль) со значением date("m"), и при равенстве отмечать опшен как выбранный. Это же самое (вывод списка) делать и со списком года, проверяя соответственно с текущим годом.
Примечание: Коли вам действительно нужен месяц жирным шрифтом, то тег <b> нужен, а не его ВВ-тег, и подставлять его надо в текст, а не к функции (или переменной). | |
|
|
|
|
|
|
|
для: TrEK
(06.02.2011 в 20:45)
| | Хм... напротив, функция empty() возвращает true (истина), если POST не содержит ничего, ! - это отрицание, т.е. !empty() возвращает true (истина), если POST содержит хоть что-то. | |
|
|
|
|
|
|
|
для: sim5
(06.02.2011 в 13:33)
| | Я имел вввиду что означает !empty, но уже понял, условие если запрос POST не пустой, а что-то содержит.. | |
|
|
|
|
|
|
|
для: sim5
(06.02.2011 в 16:15)
| | Так суть в том, что в консоле кирилицей пишет месяц )) а при пшп запросе - выводит латынь.
date +%B - ну это консольная комманда, дает вывод текущий месяц, полностью. +%b - сокращенно. | |
|
|
|
|
|
|
|
для: TrEK
(06.02.2011 в 16:04)
| | Какая команда?
Если латиницей показывает, значит локаль не устанавливается.
А это что такое - date '+%B' ? | |
|
|
|
|
|
|
|
для: sim5
(06.02.2011 в 15:18)
| | Ну $curr_m , $curr_y выводятся еще в одном месте у меня, чтоб как бы видеть какой сегодня месяц-год, тоесть для запроса в БД испаользуются не они а $_POST['month'], $_POST['year']
На счет массива спасибо, поищу как это правильно делается.
Дело в том, что при date '+%B' у меня на страничку почему-то выводится месяц латынью, хотя та же в комманда показывает месяц в кириллице. | |
|
|
|
|
|
|
|
для: TrEK
(06.02.2011 в 15:02)
| | Уберите все эти if, поместите название месяцев в массив, с ключами равными номерам месяцев. Будете получать из него, при этом не важно будет, текущий вы месяц берете или иной.
Кстати, если у вас $curr_m (и с годом тоже) только для запроса к базе создана, то зачем - используйте уже имеющиеся $_POST['month'], $_POST['year'].
PS. А вообще лучще дату, которую вы получите после условий проверки, отдавать функции strtotime, формируя с помощью нее необходимое имя месяца. Локаль только нужную установить надо:
<?
//русская локаль для даты/времени
setlocale(LC_TIME, 'Russian_Russia.1251');
//сокращенное имя месяца
print strftime('%b', strtotime('this date'));
//или полное имя месяца
print strftime('%B', strtotime('this date'));
| В примере указана текущая дата, вам вместо нее нужно указать то, что получите после условий. | |
|
|
|
|
|
|
|
для: sim5
(06.02.2011 в 14:33)
| | Все , я понял суть своей ошибки, щас буду переделывать... (про ескьюел-инъекцию)
еще однин момент:
<?php
$m1=$_POST['month'];
if ($m1=="01") $m1="янв";
if ($m1=="02") $m1="фев";
if ($m1=="03") $m1="март";
if ($m1=="04") $m1="апр";
if ($m1=="05") $m1="май";
if ($m1=="06") $m1="июнь";
if ($m1=="07") $m1="июль";
if ($m1=="08") $m1="авг";
if ($m1=="09") $m1="сен";
if ($m1=="10") $m1="окт";
if ($m1=="11") $m1="ноя";
if ($m1=="12") $m1="дек";
{
..
..
Тру-ту-ту-ла-ла-ла
..
..
}
..
..
###Первоначальное открытие странички.
###Выше идет проверки или установлен чек-бокс, а так как при перв.открытии он не установлен,
###то проверку на наличие пустого POST я вставляю после else "если чек-бокс не установлен"
else
{if (тра-та-та) {тра-ля-ля} else {тра-ля-лю}
{$sql="SELECT что-то FROM film WHERE dateadd LIKE '".sprintf("%04d-%02d", $_POST['year'], $_POST['month'])."%' ORDER BY dateadd";
$result = mysql_query($sql);
$num_rows = mysql_num_rows($result);
echo "ВСЕ фильми, Которые были добавленны за выбранный период! ".[b]$m1[/b]." ".$_POST['year']." - $num_rows фильмов.";
}
}
..
..
?>
|
$m1 - описано в самом начале, соответственно в том блоке, где осуществляется запрос в БД - $m1 не определяется потому что не было POST, которое можно было бы конвертировать в $m1 значение.
Подскажите, как можно при пустом POST получить тот же $m1:
<?php
$m1=$_POST['month']; ### $_POST есть!
if ($m1=="01") $m1="янв";
if ($m1=="02") $m1="фев";
if ($m1=="03") $m1="март";
if ($m1=="04") $m1="апр";
if ($m1=="05") $m1="май";
if ($m1=="06") $m1="июнь";
if ($m1=="07") $m1="июль";
if ($m1=="08") $m1="авг";
if ($m1=="09") $m1="сен";
if ($m1=="10") $m1="окт";
if ($m1=="11") $m1="ноя";
if ($m1=="12") $m1="дек";
?>
|
так?
<?php
$curr_m=date('m');
if (empty($_POST['month']))
{$m1=$curr_m;}
else
{$m1=$_POST['month'];}
if ($m1=="01") $m1="янв";
if ($m1=="02") $m1="фев";
if ($m1=="03") $m1="март";
if ($m1=="04") $m1="апр";
if ($m1=="05") $m1="май";
if ($m1=="06") $m1="июнь";
if ($m1=="07") $m1="июль";
if ($m1=="08") $m1="авг";
if ($m1=="09") $m1="сен";
if ($m1=="10") $m1="окт";
if ($m1=="11") $m1="ноя";
if ($m1=="12") $m1="дек";
?>
|
| |
|
|
| |
|