[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Множественное сравнение, проверка INSERT в mySQL
Barh
Здравствуйте, форумчане!

Написал такую функцию:
function next_day($month,$day) {   // Принимает
if ((int)$month == 1 or 3 or 5 or 7 or 8 or 10 or 12) $duration_month = 31;
elseif ((int)$month == 4 or 6 or 9 or 11) $duration_month = 30;
else $duration_month = 28;

if ($day < $duration_month) { // Если не 31 число
$day++; // то +1 день
}
else { // Если 31 число
$month++; // То +1 месяц
$day = 1; // И день = 1
}
$nextDate = array(
'month' => (int)$month,
'day' => (int)$day
);
return $nextDate;
}


Но первый if всегда возвращает true. Как можно заменить это условие? Я бы мог конечно перечислить $month == 1 && $month == 3 и т.п. но получается, как-то не красиво.
Хочу спросить, как сделать красиво и чтобы работало?)

И еще один вопрос:
    $query = "SELECT `id`
FROM `"
.$table."`
WHERE `checked_by` = '"
.$user_id."'
AND `time_add` BETWEEN TIMESTAMP("
.$date." 04:00:00') AND TIMESTAMP('".$date." 03:59:59')";
$result = mysql_query($query) or ($summ = 0); // Если запрос не проходит, то переменная будет равно нулю
if(isset($result) || mysql_num_rows($result)>0) {
$summ = mysql_num_rows($result); // Записываем количество строк в переменную
}

Не нравится мне такая проверка if(isset($result) || mysql_num_rows($result)>0) , т.к. потом мне нужно как раз таки узнать это количество строк и получается, что php будет два раза узнавать количество строк, как написать лучше? И вообще правильно ли так проверять, что INSERT прошел без ошибок?



Спустя 5 минут, 14 секунд (29.01.2012 - 23:38) forza написал(а):
$date = strtotime(date("Y-m-d", strtotime($date)) . " +1 day");
прибавляем к текущей дате 1 день wink.gif

Спустя 10 минут, 10 секунд (29.01.2012 - 23:49) Barh написал(а):
Да, видимо зря мучался)) Спасибо, но всё равно мне интересны те вопросы, которые я спросил. В будущем точно пригодится!)

Спустя 13 минут, 3 секунды (30.01.2012 - 00:02) asokol написал(а):
а) $month == 1 || $month == 3 - in_array($month, array(1, 3));
б) if ($summ = mysql_num_rows($result)) ...
в) По поводу INSERT (у каждого варианта своя область применения):
1. mysql_affected_rows();
2. INSERT INTO ... ON DUPLICATE KEY UPDATE;
3. INSERT IGNORE.

P.S. а как насчет високосного года?

Спустя 14 минут, 29 секунд (30.01.2012 - 00:16) Placido написал(а):
Цитата (asokol @ 29.01.2012 - 23:02)
P.S. а как насчет високосного года?

Присоединяюсь. Добавлю, что не всякий год, который делится на 4 без остатка - високосный (не являются високосными года, которые кратны 100 и не кратны 400).

Спустя 24 минуты, 4 секунды (30.01.2012 - 00:40) Barh написал(а):
forza
asokol
Placido
Спасибо за ответы! Мне пригодится это знать на будущее)

Спустя 4 минуты, 23 секунды (30.01.2012 - 00:45) Barh написал(а):
И еще вопрос в вдогонку, часто нужно писать такие условия:
if (isset($author['lastname_rus'])) echo $author['lastname_rus'];

Подозреваю, что как-то можно это упростить?)

Спустя 5 минут, 53 секунды (30.01.2012 - 00:51) neadekvat написал(а):
echo isset($author['lastname_rus']) ? $author['lastname_rus'] : null;

Спустя 20 минут, 24 секунды (30.01.2012 - 01:11) Barh написал(а):
neadekvat
Хм.. не знаю упрощает ли это вызов) тернарные операторы конечно немного побыстрее, но вот возник вопрос, может кто знает, если нет, измерения проведу сам.

1. Идет условие if, если false, то просто идём дальше, нет условия else:
if (isset($var)) echo var;


2. Или такое тернарное выражение, но здесь есть условие для не true:
echo isset($var) ? $var : null;


И по моему даже вы делали замеры по скорости if, else и тернарных условий.
От тех, которые работают быстрее -> к медленным: тернарный true, if, тернарный false, else.

А что будет быстрее в этом варианте? 1 или 2? При условии что переменной $var не существует. Ведь в первом выражение isset возвращает false и мы идем дальше. А во втором варианте еще и ссылаемся на условие для false, на null.

P.S. И по факту получилось даже длиннее запись)

Спустя 5 минут, 13 секунд (30.01.2012 - 01:16) neadekvat написал(а):
Barh, на самом деле, if лучше записть в две строки. Это к слову о "запись длиннее".

Формально - да, if должен быть быстрее, т.к. echo отправит в поток null.

Спустя 8 часов, 51 минута, 56 секунд (30.01.2012 - 10:08) Barh написал(а):
neadekvat
Жаль, что не существует более короткой записи.
У меня есть достаточно длинный HTML-код и переменные PHP, которые на нем размещаются. Но этих PHP может придти разное количество из БД, поэтому там где вывод перееменной у меня и стоит подобная проверка. Думал, что можно как то упростить..

Спустя 4 часа, 46 минут, 30 секунд (30.01.2012 - 14:55) DarkLynx написал(а):
А вы проверку на существование переменной проводите в шаблоне?
Почему не проверить проверку на существование переменной в скрипте который их отдает шаблону?? То есть если переменной нет, возвращать переменную но пустую..

А все выводы в шаблоне с
<? if (isset($var)) echo $var; ?>
заменить на простое
<?=$var; ?>

Спустя 1 час, 18 минут, 33 секунды (30.01.2012 - 16:13) Barh написал(а):
DarkLynx
Спасибо, да, наверное так будет лучше, сделать проверку переменных раньше)

Спустя 24 минуты, 20 секунд (30.01.2012 - 16:37) neadekvat написал(а):
Цитата (DarkLynx @ 30.01.2012 - 15:55)
заменить на простое
<?=$var; ?>

Пока что все-таки лучше писать <?php echo

Спустя 32 секунды (30.01.2012 - 16:38) inpost написал(а):
Barh
<?=$var; ?>
это не проверка, это банальный ВЫВОД переменной. Если её нет - сразу WARNING, невозможно вывести несуществующую переменную. Разве что собак лепить придется.

Спустя 16 минут, 25 секунд (30.01.2012 - 16:54) DarkLynx написал(а):
Цитата (inpost @ 30.01.2012 - 13:38)
Barh
<?=$var; ?>
это не проверка, это банальный ВЫВОД переменной. Если её нет - сразу WARNING, невозможно вывести несуществующую переменную. Разве что собак лепить придется.

Я же в посте написал, в коде который отправляет переменные в шаблон, сделать проверку на существование переменной, если нету, то создать нулловую.. Код ниже

if (!isset($var))
$var = null;


Спустя 11 минут, 14 секунд (30.01.2012 - 17:06) inpost написал(а):
DarkLynx
Как-то слишком много, я бы просто собаку влепил бы smile.gif

Спустя 12 минут, 54 секунды (30.01.2012 - 17:19) DarkLynx написал(а):
Цитата (inpost @ 30.01.2012 - 14:06)
DarkLynx
Как-то слишком много, я бы просто собаку влепил бы smile.gif

Ну конечно можно и собачку, но одно дело "починить" ошибку, а другое дело скрыть её =)

Спустя 6 часов, 51 минута, 31 секунда (31.01.2012 - 00:10) Barh написал(а):
asokol
Цитата

а) $month == 1 && $month == 3 - in_array($month, array(1, 3));

Только наверное ты хотел сказать, что $month == 1 || $month == 3 аналогична $month = in_array($month, array(1, 3)) ?
Потому что я так понимаю это просто проверяет массив на вхождения in_array($month, array(1, 3). И если хоть одно вхождение есть, то уже true?

Спустя 5 минут, 12 секунд (31.01.2012 - 00:15) Barh написал(а):
Наверное противоречит правилам писать в теме не по теме))
Так что прошу прощения, т.к. создавать новую для такого вопроса не вижу смысла, а вопрос такой:

for($i = 0; $i <= 30; $i++)
{
$hol = ''; // Создаем пустую переменную
$date = date('Y-m-d', strtotime($i .' day')); // Записываем в переменную $i-день в формате Y-m-d (2003-08-31)
$holiday = date('w', strtotime($i .' day')); // Записываем в переменную $i-день в формате w (День недели) от 0 (воскресенье) до 6 (суббота)

if($holiday == in_array($holiday,array(6,null))) // если день недели равен 6 или 0, то переменная $hol принимает значение УРА!
$hol = ' <b style="color:red">Ура!</b>';

echo $date . ' '. date('D', strtotime($i .' day')) . $hol .'<br>'; // выводим теперь по порядку Y-m-d ДЕНЬ НЕДЕЛИ и переменную $hol (если она есть)
}

Это слегка измененная мной функция из уроков IRBIS-school.
Собственно изменена она только в одном месте (не считая комментариев).

Было:

if($holiday == 6 || $holiday == 0)


Стало:

if($holiday == in_array($holiday,array(6,null)))


Так вот если писать in_array($holiday,array(6,0))), то вхождение 0 найдено не будет. Я так понимаю функция date() возвращает не 0, а null. Или я не прав?

Спустя 22 часа, 59 минут, 42 секунды (31.01.2012 - 23:15) asokol написал(а):
Barh, я поправил ошибку.

А зачем $holiday сравнивать с результатом in_array?

for($i=0, $time=time(); $i<=30; $i++) {
echo date('Y-m-d D', $time+$i*24*3600)
. (
in_array(date('w', $time+$i*24*3600), array(0,6))?' <strong style="color:red;">Ура!</strong>':'') . '<br />';
}
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.