Помощник
Дата поста: | В теме: | За сообщение: | Поблагодарили: | ||
---|---|---|---|---|---|
16.3.2010, 18:00 |
Как правильно прописать ссылку |
||||
14.3.2010, 1:40 |
Расчет сколько лет, зная дату рождения ищу функцию |
[quote name='sc2r2bey' post='2618595']выдает ошибку Deprecated: Function split() is deprecated in Z:homedemowwwdemo.php on line 7[/quote] sc2r2bey, вы, наверное, свежий Денвер с PHP 5.3 поставили? Короче, замените строку [php]$birth = split ('[/.-]', $birth_date);[/php] на [php]$birth = preg_split('/[.-/]/', $birth_date);[/php]и ошибки уйдут. А проблема связана с тем, что при переходе к PHP 5.3.x многие функции переведены в разряд устаревших (подлежащих удалению в будущем). В новой версии php их еще можно заставить работать настройками в файле php.ini, но с версии PHP 6 разработчики обещают убрать такие функции совсем. Подробности см, например, тут: http://php.su/php/?migration53 Следующие директивы php.ini будут отмечены как НЕИСПОЛЬЗУЕМЫЕ (DEPRECATED) в PHP 5.3 и удалены в PHP 6.0.0
|
|||
11.3.2010, 15:42 |
Скрипт для определения браузера и ОС А так же определить версии. Помогите найти. |
Прощу прощения, что влез, но мне очень нужна помощь помогите мне пожалуйста нужен скрипт для определения типов и версий браузеров и опрационок посетителей сайта, который мне полученную инфу запишет в базу подскажите скриптик оооооооочень нужно!!!!!!!!!!!!!!!!!!!!!!!!!1 kuku, $_SERVER['HTTP_USER_AGENT'] вам в руки. Ниже несколько примеров содержимого этой переменной для разных сочетаний осей и браузеров: (Win XP + IE8) Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729) (Win XP + Opera 10.50) Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.5.22 Version/10.50 (Win XP + Firefox 3.6) Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729) (Win2k + IE 5.01) Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) (Win98 + Opera 6.04) Mozilla/4.0 (compatible; MSIE 5.0; Windows 98) Opera 6.04 [ru] (Linux под иксами с NS 7.1) Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 Немного кода на php (определяем тип и версию браузера и тип ОС, версию оси - вам на факультатив) [php]<?php //============== Тип и версия браузера ============== function browser_info($agent) { // Cигнатуру Opera ищем раньше ИЕ, т.к. опера иногда раньше обманывала, // что она не опера, а ИЕ и добавляла себе ИЕшную сигнатуру "MSIE") // Ищем сигнатуру Opera старый вариант: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98) Opera 6.04 [ru] if (ereg( 'Opera ([0-9].[0-9]{1,2})', $agent, $version)) : $browse_type = "Opera"; $browse_version = $version[1]; // Ищем сигнатуру Opera новый вариант (версия живет отдельно): Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.5.22 Version/10.50 elseif (ereg( 'Opera/', $agent)): ereg( 'Version/([0-9]{1,2}.[0-9]{1,2})', $agent, $version); $browse_type = "Opera"; $browse_version = $version[1]; // Ищем сигнатуру Internet Explorer elseif (ereg('MSIE ([0-9].[0-9]{1,2})', $agent, $version)): $browse_type = "IE"; $browse_version = $version[1]; // Ищем сигнатуру Firefox elseif (ereg('Firefox/([0-9].[0-9]{1,2})', $agent, $version)): $browse_type = "Firefox"; $browse_version = $version[1]; // Ищем сигнатуру Chrome elseif (ereg( 'Chrome/([0-9].[0-9]{1,2})', $agent, $version)) : $browse_type = "Chrome"; $browse_version = $version[1]; // Ищем сигнатуру Netscape elseif (ereg( 'Netscape/([0-9].[0-9]{1,2})', $agent, $version)) : $browse_type = "Netscape"; $browse_version = $version[1]; // Если все мимо // значит наша функция этот браузер не знает else : $browse_type = "Unknown"; $browse_version = "Unknown"; endif; // Возвращаем тип и версию браузера в виде массива return array ($browse_type, $browse_version); } //============== Тип операционной системы ============== function opsys_info($agent) { // Ищем сигнатуру Windows if ( strstr ($agent, 'Win') ) : $opsys = "Windows"; // Ищем сигнатуру Linux elseif ( strstr($agent, 'Linux') ) : $opsys = "Linux"; // Ищем сигнатуру UNIX elseif ( strstr ($agent, 'Unix') ) : $opsys = "Unix"; // Ищем сигнатуру Macintosh elseif ( strstr ($agent, 'Mac') ) : $opsys = "Macintosh"; // Ничего не нашли - хз какая ось else : $opsys = "Unknown"; endif; // Возвращаем информацию об оси return $opsys; } $agent = $_SERVER['HTTP_USER_AGENT']; echo "<pre>"; print_r (browser_info($agent)); print_r (opsys_info($agent)); echo "</pre>"; ?>[/php] |
|||
1.3.2010, 17:58 |
Можно ли вернуться обратно на страницу по ссылке Возможно ли вернуться назад? |
LOla, сравните строки попарно (подсказка: они таки разные): http://skyeterrier.spb.ru/imags/images/baner-mini.jpg - такого рисунка у вас нет http://skyeterrier.spb.ru/imegs/images/baner-mini.jpg - такой рисунок у вас есть http://skyeterrier.spb.ru/imags/images/sk-baner-big.jpg - такого рисунка у вас нет http://skyeterrier.spb.ru/imegs/images/sk-baner-big.jpg - такой рисунок у вас есть |
|||
20.2.2010, 16:46 |
Расчет сколько лет, зная дату рождения ищу функцию |
Исправленный вариант (без ограничений на диапазон дат рождения): [php]<html> <body> <?php function age($birth_date) { $birth = split ('[/.-]', $birth_date); $now = getdate(); $age = $now['year'] - $birth[2]; if($now['mon'] < $birth[1]) $age--; if($now['mon'] == $birth[1]) if($now['mday'] < $birth[0]) $age--; return $age; } //выводит строку "год"/"года"/"лет" в зависимости от числового значения возраста, например: "22 года" или "45 лет" function s_years($age) { $age = abs($age); $t1 = $age % 10; $t2 = $age % 100; return ($t1 == 1 && $t2 != 11 ? "год" : ($t1 >= 2 && $t1 <= 4 && ($t2 < 10 || $t2 >= 20) ? "года" : "лет")); } $s_bdate = "25.08.1530"; $age = age($s_bdate); echo "Если бы Иван Грозный, родившийся $s_bdate, не умер, то сейчас ему было бы $age " . s_years($age); $s_bdate = "26-08-1828"; $age = age($s_bdate); echo "<br>Лев Толстой родился $s_bdate. Это было $age " . s_years($age) . " назад."; $s_bdate = "13/11/1729"; $age = age($s_bdate); echo "<br>А. В. Суворов — великий русский полководец, не потерпевший ни одного поражения в своей военной карьере, родился $s_bdate. С тех пор прошло $age " . s_years($age); ?> </body> </html>[/php] |
|||
16.2.2010, 14:08 |
Помогите доработать функцию, которая обрезает изображение |
sc2r2bey, примерно, так [php]/** /* @desc функция вырезает на картинке произвольную отцентрованную область /* @param $filename путь к файлу с исходной картинкой /* @param $w нужная ширина "обрезка" /* @param $h нужная высота "обрезка" /* @param $target_filename куда записывать результат. Если не указать, то перепишется исходный файл. */ function evokeAlignedArea($filename,$w,$h,$target_filename=null){ $thumb = imagecreatetruecolor($w, $h); $bgc = imagecolorallocate($thumb, 255, 255, 255); imagefilledrectangle($thumb, 0, 0, $w, $h, $bgc); $source = imagecreatefromjpeg($filename); $size = GetImageSize($filename); $x = round(($size[0]-$w)/2); $y = round(($size[1]-$h)/2); imagecopyresampled($thumb, $source, 0, 0, $x, $y, $w, $h, $w, $h); $target_filename = is_null($target_filename)?$filename:$target_filename; imagejpeg($thumb,$target_filename); imagedestroy($thumb); imagedestroy($source); return true; } ?>[/php] (работоспособность исходной функции не проверял, только убрал из параметров функции $x,$y и добавил вычисление центральной области картинки) опять же, желательно добавить проверки на то, что $filename - это картинка и что делать, если это не так, [php] $size = @GetImageSize($filename); if ($size) {} else {}[/php] что $w, $h - не превышают размеров исходного изображения и что делать, если это не так
|
|||
6.2.2010, 13:54 |
Как выравнить всплывающее окно? |
Народ помогите выровнить poup окно, а то как то окошко тупо прижимается к левому верхнему углу. phpuser, вы не уточнили, как именно должно быть выровнено всплывающее окно. Например, отцентровать окно можно примерно так: <html> <head> <title>Новое окно</title> <script type="text/javascript" language="javascript"> var newWindow; function makeNewWindow() { //задаем ширину и высоту окна w = 500; h = 600; //вычисляем положение окна в зависимости от разрешения экрана lPos = (screen.width) ? (screen.width-w)/2 : 0; tPos = (screen.height) ? (screen.height-h)/2 : 0; if (!newWindow || newWindow.closed) { //выводим окно newWindow = window.open("","","height="+h+",width="+w+",top="+tPos+",left="+lPos); // force small delay for IE to catch up setTimeout("writeToWindow()", 50); } else { // window's already open; bring to front newWindow.focus(); } } function writeToWindow() { // assemble content for new window var newContent = "<html><head><title>One Sub Window<\/title><\/head>"; newContent += "<body><h1>This window is brand new.<\/h1>"; newContent += "<\/body><\/html>"; // write HTML to new window document newWindow.document.write(newContent); newWindow.document.close(); // close layout stream } </script> </head> <body> <a href="#" onClick="makeNewWindow()"><img style="border:none;" align="left" src="button.png" /></a> </body> </html> Потестено в ИЕ4-8, ФФ 3, (в этих браузерах всплывающее окно располагается по центру экрана монитора) Опера 10 (ведет себя альтернативно: позиционирование всплывающего окна ограничено рамками родительского окна, а если всплывающее не влезает в родительское - открывает новую вкладку). |
|||
5.2.2010, 0:05 |
Ошибка с функциями |
В теле страницы вызываю: [php]$idc = $myrow3['id']; function sumcat($idc); /* И всё это в цикле */[/php] А вот сама ошибка: Parse error: syntax error, unexpected ';', expecting '{' in Z:\home\localhost\www\php\menu.php on line 37 При чём ошибка возникает на строке вызова функции. phpuser, слово function лишнее. А ругательство об ошибке "unexpected ';', expecting '{' " в переводе на человеческий язык гласит: "ожидалась '{', а нарисована ';' " т.е. строка, начинающаяся со слова function, подразумевает, что дальше будет описание функции. А вы явно хотели вызвать функцию, а не описать. |
|||
27.1.2010, 14:03 |
FTP или сервер |
||||
24.1.2010, 12:48 |
PHP-функция для вычисления разницы между датами |
Приведу пример из своей практики, он вроде похож на то, что требуется. Надо было выводить дату события одним цветом, если событие запланировано, но еще не случилось и другим, если событие уже произошло [php]<?php function color_date($key_date) { // количество секунд, на которое _текущая_дата_ отличается от 1 января 1970г. $current_time = time(); // количество секунд, на которое _контрольная_дата_ отличается от 1 января 1970г. и добавляем 3 часа для времени по МСК $key_time = strtotime($key_date)+10800; // если контрольная дата больше текущей, то цвет "#993300", нет - "#330033" echo "color=\"#" . ($key_time > $current_time ? "993300" : "330033") . "\""; } ?> ... <br><font <?php color_date("12.02.2010"); ?> >2 февраля 2010</font>, Описание события <br><font <?php color_date("27.10.2009"); ?> >25 — 27 ноября 2009</font>, Описание другого события[/php] |
|||
14.1.2010, 21:06 |
Мелкое окно! |
Rashambik, примерно, такой: <A href="page.htm" onclick="window.open('page.htm','pageName','width=500, height=500')">link</A> Детали см тут: http://javascript.ru/window.open |
|||
13.12.2009, 11:50 |
Можно ли вернуться обратно на страницу по ссылке Возможно ли вернуться назад? |
LOla, именно так и пишем, только пробел надо убрать между "java" и "script". Как правильно заметил ZiTosS, команда history.back(); просто лезет в историю браузера и показывает предыдущую посещенную страницу (если она была) и место в этой странице, с которого был произведен переход на текущую страницу. См. также в справочнике: http://javascript.ru/window.history |
|||
11.12.2009, 11:33 |
Можно ли вернуться обратно на страницу по ссылке Возможно ли вернуться назад? |
есть текст, в тексте ссылка которая уходит на другую страницу, на этой страницк статья прочитав которую человек жмёт "Назад" и его возвращают на первую страницу. Как это сделать я знаю, а как сделать что бы возврат был именно к тому месту в тексте от которого ушёл по ссылке. <a href="java script:history.back();">Назад</a> Примечание: форум принудительно делит слово "javascript" в хтмл-конструкциях на два. В правильном коде следует писать его слитно.Сработает: * если включен javascript * если таки была страница, с которой была вызвана страничка с нашей ссылкой "Назад" * если посетитель больше не кликал по ссылкам, например, для навигации внутри странички с ссылкой "Назад" Возврат будет именно к тому месту, если будет возможность прокрутить страницу к этому месту (будет достаточно материала после точки возврата) ZiTosS, проблем с кроссбраузерностью данного способа не встречал, использовал его еще на ИЕ4, и щас потестил на современных ИЕ8, ФФ3.5 и О10 - работает одинаково. |
|||
7.12.2009, 18:35 |
Защита от накруток. Как организовать максимально надежно? |
ZiTosS, 100% защиты естественно нет, особенно при анонимном голосовании и пока каждому человеку не вживлен в голову ид-чип. Но. Можно придумать алгоритм минимизирующий накрутки: 1. Не показывать голосующему, что ты засек факт накрутки, для чего: либо выводить текущие результаты с запаздыванием, либо вообще результаты не показывать до окончания голосования 2. Использовать несколько фильтров одновременно (уже упоминавшиеся IP, сессия, cookie + использовать дополнительно браузер, разрешение экрана, ось) и анализировать скриптом эту инфу на предмет подозрительности поданных голосов. 3. Использовать скрипты по анализу действий голосовавшего (например, если голосованием требуется оценить статью, смотрим сколько времени прошло с момента открытия страницы со статьей и оцениваем: успеет ли посетитель за это время статью прочесть, или сравниваем количество загрузок страницы с оцениваемым материалом с количеством кликов по голосовалке) 4. Еще подумать и добавить пару пунктов по ситуации, в зависимости от соотношения (трудозатраты программирования и анализа)/(важность точности голосования) |
|||
4.12.2009, 19:35 |
Как обрезать строку? |
[php]<?php $string = "index.php?module=news&page=2"; echo substr($string, 0, strpos($string, "&")) ?>[/php]
|
|||
11.9.2009, 21:00 |
Ошибка синтакиса HEREDOC |
Вячеслав, закрывающий идентификатор при использовании heredoc-синтаксиса должен начинаться в первом столбце строки и вообще кроме него ничто не должно находится в этой строке, т.е. правильно так: [php]HERE;[/php] а так неправильно: [php] HERE;[/php] и так тоже неправильно: [php]HERE; $var=1;[/php] Подробнее см тут: HEREDOC |
|||
2.9.2009, 21:30 |
Фотогалерея на JavaScript (javascript фотогалерея) |
kolesgan, Читаем инструкцию на страничке: http://devkick.com/lab/galleria/. Скачиваем, складируем в правильные места и вписываем все что она велит на чистом английском языке. Если использовать настройки скрипта по умолчанию, то получится так: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> Если хочется, чтоб было так как в демо1, то так: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> |
|||
21.8.2009, 10:58 |
Создание древовидного меню как лучше сделать? |
RussiaStudent, я не большой спец по базам данных, но мне кажется, что наиболее простой и, соответственно, правильный ;) алгоритм, примерно, такой: * делаем одну табличку с 2мя полями: [id узла] - [id родителя] * если в id родителя - 0, то это корень дерева * для построения потомков конкретного узла делаем выборку по заданному id родителя * для построения всего дерева делаем цикл по всем id узлов ну вот, пока писал, ZiTosS уже что-то похожее закодил ;) |
Спасибо сказали: (0) |
||
17.8.2009, 15:44 |
Защита изображения |
(http://www.webdocs.ru/content-545.html) Запрет выдачи картинок чужим сайтам. Довольно нередким явлением является то, что недобросовестные модераторы и ведущие рубрик различных сайтов да и некоторые блоггеры, в целях экономии трафика, вместо того чтобы сослаться на понравившиеся картинки или хотя бы пересохранить их у себя на сервере, просто тянут их к себе прямо с вашего сайта, или как говорится ”личат”. Как понимаете, ничего хорошего для вас, как владельца сайта с которого и тянуться напрямую картинки на чужой сайт - нет! И узнаете Вы об этом пожалуй только по резко возросшему трафику или по количеству обращений к файлу, которое не соответствует количеству посетителей. А так как, в наше время трафик стоит денег и немалых, то отдавать просто так его на сторону неприятно, да и злостных личеров стоит наказать. Поэтому нужно что-то делать, к счатью на большинстве нормальных хостингов есть возможность пользоваться файлом .htaccess, вот с его помощью и будем решать проблему. Можно прописать правило в файле .htaccess. Причем это можно сделать как для конкретного сайта, так и для всех, оставив к примеру только несколько разрешенных, таких как Google Images или картинки Яндекса. Итак... Способ первый, закрываем кран подачи кислорода для всех RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?вашсайт\.ru/ [nc] RewriteCond %{HTTP_REFERER} !^http://(www\.)?google\.com/ [nc] - доступ Гуглю открыт RewriteRule .*\.(gif|jpg|png)$ http://вашсайт.ru/images/hotlinkers.jpg [nc] RewriteRule \.(jpe?g|gif|png)$ - [F] - эту строчку можно подставить вместо последней, чтобы перенаправлять на 403 Forbidden вместо картинки. Что собственно происходит? Когда к серверу идет запрос на файл с расширением (gif|jpg|png), и этот запрос не с вашего сайта, то запрашиватель отправляется прямиком к картинке httр://вашсайт.ru/images/hotlinkers.jpg, которая может быть расположена по вашему усмотрению и на ней может быть все что угодно. Такой способ быстро отбивает охоту личить ваши картинки. Способ второй, режем особо усердных пожирателей трафика. RewriteEngine On RewriteCond %{HTTP_REFERER} ^http://(www\.)?zloylicher\.net/ [NC,OR] RewriteCond %{HTTP_REFERER} ^http://(www\.)?esheodin\.com/ [NC] RewriteRule \.(jpeg|gif|png)$ images/hotlinkers.jpg [R,L] В данном случае запрет на запрос к картинкам выдается только сайтам, злобным личерам, которые в свою очередь тоже идут лесом и смотрят на ту картинку, которую вы хотите им показать. Вся разница в том, что в одном случае вы закрываете доступ всем, а во втором только личерам. Способ третий. Защищаем любые файлы на сайте от сличивания RewriteEngine on RewriteCond %{HTTP_REFERER} ^http://(www\.)?zloylicher\.com/ [NC,OR] RewriteCond %{HTTP_REFERER} ^http://(www\.)?esheodin\.com/ [NC] RewriteCond %{REQUEST_FILENAME} !hotlinkers.jpg$ RewriteRule .*\.(gif|jpe?g|png|bmp|pdf|zip|rar|mp3|js)$ http://www.mysite.com/images/hotlinkers.jpg [R] Естественно не забываем прописать правильные названия сайтов и пути к файлам. Вариантов может быть много. Для ленивых есть неплохой .htaccess генератор, который все делает сам, вам только нужно ввести домены и путь к картинке для личеров. Пожалуй на этом все, удачи! По материалам http://www.webmakerslounge.com |
|||
4.8.2009, 20:06 |
Метки на сайте |
Чёт тут не понятно. Можно как то получше расписать таблицу??? Плиз. Вот пример моей таблицы если можно то на ней показать как это сделать. phpuser, в эту никакие не надо добавлять надо создать две новые таблицы в одну будут складироваться id меток и их названия name (назовем ее tags), а во вторую - id новостей (id_news) и меток (id_tags), которые соответствуют друг другу (назовем ее news_tags_collations), т.е. при добавлении новости с id=12 (например, "Про компьютерную графику"), у которой должны быть, например, две метки с id=3 (name="Компьютеры") и id=5 (name="Графика"), то в таблицу news_tags_collations должно добавиться 2 строки: id_news=12 - id_tags=3 и id_news=12 - id_tags=5: INSERT INTO `db`.`news_tags_collations` ( `id_news` , `id_tags` ) VALUES ( 12, 3 ), ( 12, 5 ); ну вот, пока рисовал ответ, Евгений уже ответил |
|||
2.8.2009, 12:14 |
Реализация добавления поля формы без перезагрузки |
<html> |
|||
1.8.2009, 22:25 |
Реализация добавления поля формы без перезагрузки |
количество элементов в массиве $pole - это count($pole) в $value попадают значения элементов массива foreach ($pole as $value) { //для каждого элемента массива $pole помещать его значение в переменную $value по-русски эта конструкция читается так: "для каждого элемента массива $pole помещать его значение в переменную $value и выводить эту переменную в браузер" т.е. я могу теперь вместо в echo делать записи в БД да |
|||
1.8.2009, 21:34 |
Реализация добавления поля формы без перезагрузки |
супер я практически понял, ты меня подправил а как тогда вычислить количество элементов массива и с какого номера начинается массив? количество элементов в массиве возвращает функция count($pole) про то с какого номера начинается массив, встречный вопрос: вот вам массив: $forest = array('деревья' => array('липа', 'осина', 'елка'), 'звери' => array('тигр', 'лев', 'обезьян')); который элемент в нем первый? ;) есть такое понятие, как внутренний указатель массива. функция reset() устанавливает внутренний указатель массива на "первый элемент" и возвращает его (указатель). вообще для работы с массивами есть много специальных функций, например, foreach, которая позволяет "перемещаться" по массивам, про нее можно почитать, например, тут: foreach |
|||
1.8.2009, 20:58 |
Реализация добавления поля формы без перезагрузки |
кстати а почему name="pole[1]" ведь массивы начинаются с 0? sc2r2bey, [php]echo $_POST['pole'][1]; //$_POST['pole'] - это уже массив, но если сильно хочется, то для красоты можно создать новый, например, так: $pole = $_POST['pole']; print_r($pole); echo $pole[1];[/php] кстати а почему name="pole[1]" ведь массивы начинаются с 0? в php массивы начинаются с чего угодно и вообще могут индексироваться, чем удобно программисту, например, могут быть такие элементы массива: pole[1] pole[2] pole['a'] pole['b'] pole['some'] pole['something else'] и т.п. я проиндексировал массив по числу строчек, типа у первой строчки номер 1, у второй - 2, но можно было, например, и с нуля индексировать, для этого достаточно было в качестве имен полей указать не "pole[N]", а просто "pole[]". |
|||
1.8.2009, 20:27 |
Реализация добавления поля формы без перезагрузки |
sc2r2bey, добавлять и убавлять можно и группу полей и все прочее, что только можно закодировать хтмл-ом. Про "checkbox, галочку и поле для загрузки изображения" непонятно, почему нужна именно галочка и что вы, собственно, от них всех хотели. Но, есть подозрение, что ничто не мешает и их "сделать" по такому же типу. ;) |
|||
Текстовая версия | Сейчас: 24.4.2024, 2:28 |