Jump to content

alex_tihonko

Newbie
  • Posts

    21
  • Joined

  • Last visited

Everything posted by alex_tihonko

  1. Что за выращивание лога? Атрибуты у тегов при строгом доктайпе не допускаются? P.S. основная моя деятельность - программирование, верстку я только начал осваивать. А у вас какая скорость подключения? Поделитесь пожалуйста информацией У меня на скорости 1Мб/с изображения загружаются не очень быстро - если фотографий много, то при переходе к следующему изображению оно часто оказывается загруженным не до конца и отображается частично.
  2. Добрый день! Порой встречаются страницы, на которых достаточно много тяжелых изображений. При этом браузер начинает загружать все изображения одновременно. Пример такой страницы: http://africa-studio.ru/04_studio.htm Можно ли сделать так, чтобы изображения загружались по очереди в той последовательности, в которой они встречаются в коде, т.е. чтобы следующее изображение не начинало загружаться, пока полностью не загрузится предыдущее? P.S. галерея работает некрасиво, приходится ставить большую начальную задержку, иначе при первом проходе изображения показываются обрезанными, т.к. они еще не загрузились: http://tihonko.spb.ru/show_gallery.php?id_section=25
  3. В IE5 JQuery не работает. Поэтому на него я точно забью) Хотя если кто-нибудь доработает JQuery, чтобы она работала в IE5, то я подумаю))
  4. Эх, ладно, будем поддерживать IE6.
  5. Посмотрим, спасибо!
  6. Добрый день! При выполнении последнего проекта, меня в очередной раз взбесил IE6 - эта Божья ошибка. Не буду рассказывать что он вытворял в этот раз, но было весело(если кому интересно - я расскажу). Статистика говорит о том, что им по прежнему пользуются 11% пользователей. Кто как считает, нужно вообще ориентироваться на IE6 при выполнении проекта или пусть идет лесом то, что он все показывает вкривь и вкось?
  7. Стояла задача сделать так, чтобы правая колонка была всегда, вне зависимости от количества контента, не меньше левой. Причем с помощью слоев (так как нужно было использовать параметры max-width и min-width). За основу был взят вот этот рецепт. Все это привело к тому, что фоновый цвет пришлось задать для всей правой колонки.
  8. Добрый день! Вот какая история приключилась: Сначала, когда я закончил верстку, сайт отображался корректно во всех браузерах кроме ie6. В нем фоновый цвет тега <div class='rightcol'> заслонял содержимое тега! Т.е фоновый цвет располагался поверх содержимого. Поэтому на месте правой колонки располагался просто белый прямоугольник. Долго не мог понять, что не так. Стал экспериментировать. Макет в ie6 стал отображаться корректно после того, как я убрал все комментарии вида <!-- --> из кода. На этом я и успокоился , хотя связь комментарием с фоновым цветом мне до сих пор не понятна. Сегодня пошел к заказчику показывать сайт. Заказчик - кафедра, у них понятное дело - мониторы 15 дюймов и браузер ie6. И на их компьютере опять двадцать пять - фон правой колонки отображается поверх ее содержимого. Домой пришел, проверил у себя в ie6 - все нормально. В чем может быть причина такого глюка и как ее устранить, подскажите пожалуйста? Вот ссылка на сайт: http://vzfei.tihonko.ru
  9. Спасибо! Я не знал о существовании условных комментариев. Сейчас нашел несколько статей, почитал. Очень удобная штука
  10. Добрый день! В связи с тем, что IE6 не понимает параметров min-width и max-width, хочу подкинуть ему хак, который установит обычный параметр width для слоя. Подскажите пожалуйста, как подкинуть хак только под IE6? P.S. IE7 и IE8 понимают параметры min-width и max-width.
  11. Пожалуйста! Если пример понравится, вот код обеих функции down(), up(): <?php //////////////////////////////////////////////////////////// // 2005-2008 (C) Кузнецов М.В., Симдянов И.В. // PHP. Практика создания Web-сайтов // IT-студия SoftTime // http://www.softtime.ru - портал по Web-программированию // http://www.softtime.biz - коммерческие услуги // http://www.softtime.mobi - мобильные проекты // http://www.softtime.org - некоммерческие проекты //////////////////////////////////////////////////////////// // Выставляем уровень обработки ошибок // (http://www.softtime.ru/info/articlephp.php?id_article=23) error_reporting(E_ALL & ~E_NOTICE); // Опускание блока на одну позицию вниз function down($id_position, $tbl_name, $where = "", $fld_name = "id_position") { // Извлекаем текущую позицию $query = "SELECT pos FROM $tbl_name WHERE $fld_name = $id_position LIMIT 1"; $pos = mysql_query($query); if(!$pos) { throw new ExceptionMySQL(mysql_error(), $query, "Ошибка при извлечении текущей позиции"); } if(mysql_num_rows($pos)) { $pos_current = mysql_result($pos, 0); } else { throw new ExceptionMySQL(mysql_error(), $query, "Ошибка при извлечении текущей позиции"); } // Извлекаем следующую позицию $query = "SELECT pos FROM $tbl_name WHERE pos > $pos_current $where ORDER BY pos LIMIT 1"; $pos = mysql_query($query); if(!$pos) { throw new ExceptionMySQL(mysql_error(), $query, "Ошибка при извлечении следующей позиции"); } if(mysql_num_rows($pos)) { $pos_next = mysql_result($pos, 0); // Меняем местами текущую и следующую позиции $query = "UPDATE $tbl_name SET pos = $pos_next + $pos_current - pos WHERE pos IN ($pos_next, $pos_current) $where"; if(!mysql_query($query)) { throw new ExceptionMySQL(mysql_error(), $query, "Ошибка изменения позиции"); } } } // Подъём блока на одну позицию вверх function up($id_position, $tbl_name, $where = "", $fld_name = "id_position") { // Извлекаем текущую позицию $query = "SELECT pos FROM $tbl_name WHERE $fld_name = $id_position LIMIT 1"; $pos = mysql_query($query); if(!$pos) { throw new ExceptionMySQL(mysql_error(), $query, "Ошибка при извлечении текущей позиции"); } if(mysql_num_rows($pos)) { $pos_current = mysql_result($pos, 0); } else { throw new ExceptionMySQL(mysql_error(), $query, "Ошибка при извлечении текущей позиции"); } // Извлекаем вышестоящую позицию $query = "SELECT pos FROM $tbl_name WHERE pos < $pos_current $where ORDER BY pos DESC LIMIT 1"; $pos = mysql_query($query); if(!$pos) { throw new ExceptionMySQL(mysql_error(), $query, "Ошибка при извлечении предыдущей позиции"); } if(mysql_num_rows($pos)) { $pos_preview = mysql_result($pos, 0); // Меняем местами текущую и вышестоящую позиции $query = "UPDATE $tbl_name SET pos = $pos_current + $pos_preview - pos WHERE pos IN ($pos_current, $pos_preview) $where"; if(!mysql_query($query)) { throw new ExceptionMySQL(mysql_error(), $query, "Ошибка изменения позиции"); } } } ?> Копирайты только нужно оставлять. Это не мое личное изобретение , а изобретение руководителей студии www.softtime.ru У них очень много полезных скриптов/приложений. Даже FrameWork свой есть. Я на базе него сайты делаю. Весьма удобный, правда функционал у него не очень большой. Но для маленьких/средних проектов вполне подойдет.
  12. Для того чтобы перемещать можно было нужно ввести дополнительное числовое поле "pos" Поле это должно работать так: при добавлении первой записи его значение должно быть равно 1. При добавлении последующей записи его значение должно вычисляться так: берем максимальную позицию в таблице и увеличиваем ее на 1. При этом если при выводе задана прямая сортировка по полю pos, то новые записи будут помещаться в конец таблицы. Если обратная - то в начало. Если нужно поднять запись (при прямой сортировке). То действуем так: извлекаем значение pos для этой записи, извлекаем значение поля pos для вышестоящей записи(у нее pos будет меньше) и меняем значения поля pos у этих записей местами. Соответственно если нужно запись опустить, то действуем так же за тем исключением, что извлекаем нижестоящую запись (у нее значение pos будет больше). Вот, например, функция, которой я пользуюсь: Параметры: $id_position - номер поднимаемой позиции $tbl_name - название таблицы, в которой осуществляется подъем записи $where - дополнительное where-условие, если оно требуется $fld_name - название поля, в котором содержится первичный ключ // Подъём блока на одну позицию вверх function up($id_position, $tbl_name, $where = "", $fld_name = "id_position") { // Извлекаем текущую позицию $query = "SELECT pos FROM $tbl_name WHERE $fld_name = $id_position LIMIT 1"; $pos = mysql_query($query); if(!$pos) { throw new ExceptionMySQL(mysql_error(), $query, "Ошибка при извлечении текущей позиции"); } if(mysql_num_rows($pos)) { $pos_current = mysql_result($pos, 0); } else { throw new ExceptionMySQL(mysql_error(), $query, "Ошибка при извлечении текущей позиции"); } // Извлекаем вышестоящую позицию $query = "SELECT pos FROM $tbl_name WHERE pos < $pos_current $where ORDER BY pos DESC LIMIT 1"; $pos = mysql_query($query); if(!$pos) { throw new ExceptionMySQL(mysql_error(), $query, "Ошибка при извлечении предыдущей позиции"); } if(mysql_num_rows($pos)) { $pos_preview = mysql_result($pos, 0); // Меняем местами текущую и вышестоящую позиции $query = "UPDATE $tbl_name SET pos = $pos_current + $pos_preview - pos WHERE pos IN ($pos_current, $pos_preview) $where"; if(!mysql_query($query)) { throw new ExceptionMySQL(mysql_error(), $query, "Ошибка изменения позиции"); } } } P.S. вызов функции нужно поместить в try-обработчик и добавить класс ExceptionMySQL, который служит для вывода сообщения об ошибке, если произойдет исключительная ситуация(ExceptionMySQL наследуется от Exception).
  13. Я бы сделал так. Страницы admin_t.php и red_t.php связаны между собой и с БД. Страница online.php не зависит от страниц admin_t.php и red_t.php, а просто делает выборку из БД. 1. admin_t.php <?php //На всякий случай вывод складываем в буфер ob_start(); //Если в POST не пусто - будем проверять есть ли такой логин в базе и есть есть, то правильный ли для него указан пароль if(!empty($_POST)) { //Достаем данные из базы, которые соответствуют введенному логину //в $usr - указатель на результирующую таблицу, в $user - массив с данными пользователя ...... //Если такого пользователя нет - помещаем в переменную $error сообщение об ошибке if(mysql_num_rows($usr) < 1) { $error = 'Неправильно введено имя пользователя!'; } //Если пользователь есть, но пароль введен не верно - помещаем в переменную $error сообщение об ошибке elseif($user['user_pass'] != $_POST['user_pass']) { $error = 'Неправильно введен пароль!'; } //Если пользователь существует и пароль введен правильно - переадресовываем на страницу red_t.php else { header("Location: red_t.php?user_name=$_POST[user_name]&user_pass=$_POST[user_pass]"); exit(); } } //выводим сообщение об ошибке, если пользователь ввел неправильные данные if(!empty($error)) { echo "<p>$error</p>"; } //Выводим форму, в которой нужно ввести логин и пароль. Обработчик - admin_t.php. Метод передачи - POST ........ ?> 2. Файл red_t.php <?php //На всякий случай вывод складываем в буфер ob_start(); //В REQUEST должны содержаться логин и пароль //Проверяем, что пользователь перешел к данной странице с правильными данными логин/пароль //в $usr - указатель на результирующую таблицу, в $user - массив с данными пользователя //Сначала извлекаем данные ........ //Теперь проверяем //Если переданы неправильные данные - переадресовываем на страницу авторизации if(mysql_num_rows($usr) < 1 || $user['user_pass'] != $_REQUEST['user_pass']) { header("Location: admin_t.php"); exit(); } //Если данные переданы правильно, осуществляем дальнейшие действия //Если это первое обращение к файлу - выведем форму для редактирования if(empty($_POST)) { //Извлекаем данные из базы и выводим форму для редактирования. Обработчик формы - файл red_t.php метод передачи - POST //В форму нужно добавить скрытые поля с именами user_name и user_pass. В них поместить значения $_REQUEST['user_name'] //и $_REQUEST['user_pass'] соответственно ...... } //Если же это обращение к странице после нажатия на кнопку 'submit' формы, // то сохраним изменения в базе и переадресуем на страницу online.php else { //Сохраняем изменения в базе ........ //Переадресовываем на страницу online.php header("Location: online.php"); exit(); } ?> 3. Файл online.php <?php //Просто извлекаем данные из базы и выводим их на страницу в нужном месте и виде ..... ?> Решение на лучшее не претендует, но работать будет
  14. Да, я тоже считаю, что так лучше всего делать. Если так делать, то разницы между, mysql_real_escape_string() и mysql_escape_string() никакой нет. Я просто хотел подчеркнуть небольшое различие, которое между этими функциями все же имеется. Вот анекдотец, может быть он будет новым : - Вчера снеговик H. покончил жизнь самоубийством, прыгнув на теплотрассу. Психологи считают, что виноваты комплексы, мучавшие снеговика в связи с маленькой морковкой
  15. Вот так будет работать: <?php //Данные для соединения c базой $db_location = "localhost"; $db_user = "test"; $db_user_pass = "test"; $db_name = "test"; //Соединяемся с базой $db_connection = mysql_connect($db_location, $db_user, $db_user_pass); mysql_select_db($db_name, $db_connection); $id = mysql_real_escape_string($_GET['id']); if (isset($_GET['id'])) { //Запрос $query = "SELECT * FROM test WHERE id = $id LIMIT 1"; $tst = mysql_query($query); //вывод результатов $test = mysql_fetch_array($tst); echo $test['name']; } ?> В окне браузера: Piter А вот так не будет: <?php //Данные для соединения c базой $db_location = "localhost"; $db_user = "test"; $db_user_pass = "test"; $db_name = "test"; $id = mysql_real_escape_string($_GET['id']); if (isset($_GET['id'])) { //Соединяемся с базой $db_connection = mysql_connect($db_location, $db_user, $db_user_pass); mysql_select_db($db_name, $db_connection); //Запрос $query = "SELECT * FROM test WHERE id = $id LIMIT 1"; $tst = mysql_query($query); //вывод результатов $test = mysql_fetch_array($tst); echo $test['name']; } ?> В окне браузера: Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in Z:\home\localhost\www\test\index.php on line 11 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in Z:\home\localhost\www\test\index.php on line 11 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\localhost\www\test\index.php on line 23
  16. Если соединение не установлено, то вызов mysql_real_escape_string() приведет к тому, что будет осуществлен вызов mysql_connect() c параметрами по умолчанию: сервер: localhost имя пользователя: root пароль: пустая строка Если соединиться не удастся, то myql_real_escape_string() вернет FALSE. Если же удастся - то вернет обработанную строку. На счет работы myql_real_escape_string() и myql_escape_string(): myql_real_escape_string() считается улучшенной версией myql_escape_string() в плане экранирования спецсимволов. myql_escape_string() не поддерживает работу с некоторыми восточными кодировками. Но если вы пользуетесь cp1251 или юникодом, то никакой разницы не будет. Обе функции будут одинаково хорошо экранировать все спецсимволы в строке. Поэтому я предпочитаю использовать myql_escape_string()
  17. Стоит добавить, что mysql_real_escape_string() требует предварительного соединения с БД Поэтому, если обработку нужно производить до того, как установлено соединение, то стоит воспользоваться mysql_escape_string()
  18. Добрый день! Столкнулся с такой проблемой: Для всех ссылок указан следующий стиль A { text-decoration: none; border-bottom: 1px dashed white; } А для ссылок-изображений нужно сделать так, чтобы у них была рамка в 1 пиксель желтого цвета. Я попробовал это сделать таким образом: A IMG { border: 1px solid yellow; } При этом у ссылок-изображений появляется как нижняя белая рамка, которая чуть-чуть отстоит от изображения, так и желтая рамка, которая прилегает к изображению вплотную. Избавиться от нижней рамки попробовал вот таким способом: A IMG { border-bottom: none; } вставив этот код между первыми двумя блоками. Но результата это не дало и по прежнему присутствуют обе рамки. Если последний блок кода вставить после первых двух, то у рамки желтого цвета пропадает нижняя часть, но белая нижняя рамка по прежнему присутствует. Т.е. используя параметр border-bottom в контекстном селекторе A IMG я не могу достучаться до белой нижней рамки. Подскажите пожалуйста, как же убрать белую нижнюю рамку у ссылок-изображений не трогая конструкцию A { text-decoration: none; border-bottom: 1px dashed white; } ?
  19. Попробуйте вот такое выражение: |^>([a-zа-я0-9_=*?.+]+?)<$|i Оно должно вытаскивать текст между тегами. Затем используйте preg_replace_callback(). В функции обратного вызова обрежьте аргумент $matches[1], который соответствует вхождению круглых скобок, и возвратите его. Если прием не будет срабатывать, сообщите об этом в этой теме. Доведем до ума
  20. Спасибо Я не знал про эту директиву.
  21. Да, это правда. Например в 5.3 Вы не можете заключить скрипт в контейнер <? ?> - интерпретатор решит, что символы <? ?> и код внутри них - это обычный текст. В 5.3 правильным считается вариант <?php ?>, который и поддерживается. Помимо этого в 5.3 в исходных настройках php.ini многое отличается от 5.2.х. Например - директива magic_quotes_gpc по дефолту имеет значение off. Т.е. волшебные кавычки выключены. Мое мнение - нужно быть в курсе, какие изменения претерпел php в версии 5.3. Потому что если об этом не знать, то в один момент, когда хостинг провайдеры перейдут на 5.3, скрипты, написанные под 5.2.х могут оказаться неработоспособными.
  22. Добрый день! Скажите пожалуйста как именно работает margin: auto? Тут сказано, что "Аргумент auto указывает, что размер отступов будет автоматически рассчитан браузером." Но не совсем ясно, как именно браузер будет автоматически рассчитывать отступы. Каким алгоритмом он руководствуется. Знающие, опишите пожалуйста этот процесс более детально
  23. Скажите, а разрешение какое желательно чтобы у него было? Чем больше тем лучше?
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy