Вход

Просмотр полной версии : Помогите доделать скрипт (


blits
12.09.2015, 18:42
Помогите доделать мой скрипт :( В php бы я мог бы сделать так:
if ($_COOKIE['ad'] == null): ?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>ля-ля-ля<body>
</html>
<?php endif; ?>
Но как так сделать в JS я незнаю... Пилю рекламную строку, при нажатии на кнопку крестика, в куках записывается что строка больше не будет показываться, но как ее не показывать, если у меня в куках не null я незнаю... Записываю с помощью jqerry cookie. Я на юкозе, поэтому юзать php не могу, а так бы давно уже сделал на нем.
Вот мой код http://jsfiddle.net/cn3oztzz/

if($.cookie('ad1_no') == null) {
и тут как то вывести html код))
}

пробовал с document.write, он все перезаписывает, с ним не вариант.
Нашел еще innerHTML, но не совсем понял, как с помощью него сделать то, что мне нужно

Vlasenko Fedor
12.09.2015, 19:54
if ($_COOKIE['ad'] == null): ?>
это ошибка Notice в рhp при отсутствии элемента массива с ключем 'ad'
правильно
if (empty($_COOKIE['ad'])): ?>
по js cookie ответ здесь (https://learn.javascript.ru/cookie)

blits
12.09.2015, 20:05
это ошибка Notice в рhp при отсутствии элемента массива с ключем 'ad'
правильно
я сейчас не про php, а как сделать аналогичную функцию на js, не куки, а if с возможностью вывода html.

laimas
12.09.2015, 22:31
это ошибка Notice в рhp при отсутствии элемента массива с ключем 'ad'

Это не ошибка, это предупреждение, и при отключении их вывода $_COOKIE['ad'] будет равно null, так что можно, было бы и проще:

if (!$_COOKIE['ad'])

Vlasenko Fedor
13.09.2015, 00:31
laimas,
а в чем для тебя разница между ошибкой и предупреждением. Или предупреждение это так забить можно отключив. Есть правило хорошего тона включать все ошибки. А не говнокодить уберая вывод ошибок
причем я именно правильно назвал ошибка
http://php.net/manual/ru/errorfunc.configuration.php#ini.error-reporting

laimas
13.09.2015, 09:00
Предупреждения, это рекомендации, и если я знаю, что они не влияют на исполнения кода, а тем более не приведут к фатальной ошибке, то я кивну и скажу спасибо. Но не более этого.
А вот ошибка, это уже невозможность работы кода далее, хотя можно ее и "засобачить".

Для начинающих обязательно нужно выводить и предупреждения и ошибки, а тем кто знает о чем это, можно отключить. А в РНР можно отключать только предупреждения, выводя только ошибки во время отладки.

Правило хорошего тона - вывод ошибок только во время отладки, на сервере их обязательно отключать, и не только РНР, но SQL, определяя их вывод в лог-файл.

Зная кое что и о поведении языка той или иной версии, можно даже заглушить вывод ошибки. Например, в новых версиях полученный массив размыкается и можно сразу работать с его элементами, что к примеру в JS легко делается. В старых версиях РНР этого нельзя сделать, только через предварительное объявления переменной. Это вроде бы мелочь, но она не позволяет обойтись одним лаконичным выражением в условии. Но все же, если знать поведение языка, то и в старых версиях при работе с массивами вполне можно поставить и заглушку.

А насчет правильно ли или нет, ну так это вообще "баг" - в РНР (и не только) предупреждение и ошибка, это все таки понятия разные.

А мануал я знаю. ;)

Vlasenko Fedor
13.09.2015, 13:34
при работе с массивами вполне можно поставить и заглушку
это не заглушка, это костыль для прикрытия своей задницы. Ведь у тебя все правильно. При этом внеся неясность (невидимость и непонимание) для других разработчиков работающих с этим кодом.
А теперь по коду
твой вариант
if (!$_COOKIE['ad'])
и мой
if (empty($_COOKIE['ad'])):
так как же правильно надо писать? косячить и прикрыватся запретом выводом предупреждений или сразу писать правильно
А мануал я знаю
Так в нем же написано для чего использовать empty (http://php.net/manual/ru/function.empty.php)
Или это лишнее для тебя?

laimas
13.09.2015, 14:02
это не заглушка, это костыль для прикрытия своей задницы. Ведь у тебя все правильно.

Голова для того, чтобы думать. А что касается $_COOKIE, как и $_POST, и другие, это супеглобальные массивы, это ни о чем не говорит вам?

Вам никто не запрещает писать isset($_POST['x']), а я буду $_POST['x'], и небо не упадет на землю. Язык знать надо, а не базарить зря. :)

Vlasenko Fedor
13.09.2015, 19:27
$_COOKIE, как и $_POST, и другие, это супеглобальные массивы
Причем здесь это ведь ты советуешь написать говнокодif (!$_COOKIE['ad'])
Язык знать надо, а не базарить зря
Так вот, читай документацию лучше и там по ссылкам написано все что тебя интересует. Не в грубой форме, а пишут советы чтоб не говнокодили. Ты запустишь свой код в другой среде где ошибки включены и увидишь все прелести твоего подхода. Вам никто не запрещает писать isset($_POST['x']), а я буду $_POST['x'], и небо не упадет на землю
Ну и говнокодь себе далее, только вот другим советы не надо в том же духе давать. Можешь повесить себе медаль и сказать я крутой программист, я пишу круче всех, плевать мне на встроенный empty, его для мудаков написали, а я круче

laimas
13.09.2015, 20:29
Причем здесь это ведь ты советуешь написать говнокод


Начинается вульгарность, и при том обвиняя другую сторону. )

Читайте, изучайте. isset($_COOKIE) это глупость, а if($_COOKIE['var']) без isset породит лишь напоминание, ценность которого в том, что напомнить - использование не инициализированной переменной опасно. При отключении вывода предупреждений интерпретатор молча вернет null. И я это знаю, и я в курсе переменных, которые ожидаю, как и их типов.

Вам никто не запрещает использовать isset, на здоровье, только не путайте ошибки с предупреждениями, а следственно и поведение языка в этих случаях.

Так что вместо вульгарности займитесь изучением и не порите горячки, как и глупостей о медалях. :)

Vlasenko Fedor
13.09.2015, 20:48
использование не инициализированной переменной опасно
о это уже что-то
При отключении вывода предупреждений интерпретатор молча вернет null
я же двал ссылку где разрабочики php при разработке напрямую советуют включить вывод всех ошибок.
Как по вашему, почему они это советует, чтобы вы говорили я все знаю и игнорировали

newKingOfTheBlock
13.09.2015, 20:55
Poznakomlus,
Ты что реально не понимаешь разницу между ошибкой и предупреждением? Выбрасывание ошибки означает сбрасывание текущих вычислений и прекращение работы программы, если ошибка не перхвачена. Если же перехвачена, будет нелокальный goto в место перехвата. Предупреждения к ошибкам, технически, не имеют никакого отношения вообще, это как теплое и мягкое, ты какой-то бред несешь.

Vlasenko Fedor
13.09.2015, 21:11
newKingOfTheBlock,
че, использование необъявленных переменных. Еще один защитник говнокода. И проив empty. Мало того, что empty правильно здесь не генерит вывод ошибок типа Notice. Так оно еще быстрее
<?php
function test($key = '')
{
static $arr_time = array();
if (isset($arr_time[$key])) {
$t = (microtime(true) - $arr_time[$key]['time']) * 1000;
$unit=array('b','kb','mb','gb','tb','pb');
$m = memory_get_usage() - $arr_time[$key]['memory'];
$m = @round($m/pow(1024,($i=floor(log($m,1024)))),2).' '.$unit[$i]; //собака друг человека :-)
echo 'Run time - ', $key, ' (ms): ', $t, ', memory: ', $m, (PHP_SAPI == 'cli' ? PHP_EOL : '<br>');
unset ($arr_time[$key]);
} else {
$arr_time[$key] = array('time' => microtime(true), 'memory' => memory_get_usage());
}
}
$arr = range(0, 1000000);

test('bolean');
foreach($arr as $value){
$a = !$_COOKIE['test'];
}
test('bolean');
test('empty');
foreach($arr as $value){
$a = empty($_COOKIE['test']);
}
test('empty');
Будет работать и там где ошибки включены. Ребята вы простите о чем здесь? Ка написать говнокод советуете или что? Или говорите что ошибка типа Notice это так для чайников, а крутые перцы на нее ложат

laimas
13.09.2015, 21:18
Еще один защитник говнокода. И проив empty. Мало того, что empty правильно здесь не генерит вывод ошибок типа Notice. Так оно еще быстрее

Это где вы прочли, что я противник empty? Суть вопроса в том, что предупреждение, это не есть ошибка. Все далее, это уже из пальца высосанное, а любители термина "говнокод" напоминают борцов за чистоту партии 37-х.

Вы что пытаетесь доказать? Путаете хрен с пальцем, а включение вывода ошибок на реальном сервере кроме как дурью, более назвать нечем.

Vlasenko Fedor
13.09.2015, 21:24
а включение вывода ошибок на реальном сервере кроме как дурью
Напиши разработчикам PHP, что они советуют тебе херней заниматься при разработке
http://php.net/manual/ru/errorfunc.configuration.php#ini.error-reporting

newKingOfTheBlock
13.09.2015, 21:25
Poznakomlus,
Хотел написать ровно то же, что написал laimas, выше. Речь о том, что вы спутали теплое с мягким. Игнорировать ли предупреждения, и стиль написания кода -- это уже другие вропросы.

Vlasenko Fedor
13.09.2015, 21:28
Игнорировать ли предупреждения, и стиль написания кода -- это уже другие вропросы
Чем успешно занимаемся надо было добавить :lol:

laimas
13.09.2015, 21:29
Напиши разработчикам PHP, что они советуют тебе херней заниматься при разработке


Знаете что, $a = empty($_COOKIE[0]); даст положительный результат, хотя вряд ли это ожидаемое. Так чего вы доказать хотите?

Я даже и не заметил, что плевок то не в мою сторону был. :)

Vlasenko Fedor
13.09.2015, 21:34
Знаете что, $a = empty($_COOKIE[' ']);
ну да так и должно, а чего ожидал здесь увидеть
empty(null) === true; //а говорил с доками дружишь

laimas
13.09.2015, 21:40
ну да так и должно

Я не то написал, что хотел, исправил. )

Vlasenko Fedor
13.09.2015, 21:49
Ребята не хочу долго спорить. Все прийдет с годами, с опытом, когда будете писать для разных сред не зная будет включен и выключен вывод ошибок. Понятно, что в своем коде можно их подавлять, но это также плохой стиль. Если можно писать легче понятней и разборчивей без, то почему бы инет. Это не только стилистика кода, это также и понимание работы его и не выявленных мелких ошибок, которые в дальнейшем могут принести проблемы. Желаю вам успешных Open source проектов где вас смогут покритиковать ваш код, а вы проявить себя. На этом откланиваюсь и покидаю данную тему. Свою позицию я как бы объяснил и высказал :)

laimas
13.09.2015, 22:03
Понятно, что в своем коде можно их подавлять, но это также плохой.

Вываливая ошибки на страницу, вы делаете неоценимую услугу тому, кто их специально анализирует. Советовать это же делать кому-то тем более не стоит. Отладкой надо заниматься на локальном сервере, а не на удаленном доступном публично.

Проблемы может породить даже ваш "чистый код". Но мы же его пишем, не дяди за нас, значит отдаем себе отчет в том, что делаем, контролируем и переменные, и поведение. Например, я прекрасно знаю, что обычный for будет шустрее против какой-то стандартной функции. Но мне и в голову не придет мысль выбирать между ними, подсчитав дотошно микросекунды, так как я знаю, что в моей конкретной ситуации это будет паранойя.

Или простой пример, выполнив это в 5.3:

$a = array(1, 4, 5);

if($n = end(array_slice($a, -2))) {
echo $n;
}
//получим - Strict Standards: Only variables should be passed


и помимо этого верный результат. В старших версиях это будет работать не заикаясь. Но зная об этом поведении, я просто напишу @end(array_slice($a, -2)). И гнев по поводу "говнокода" и его чистоте меня волновать не будет, как и вам никто не запрещает исполнить это поэтапно.