Приветствую Вас на втором уроке, цикла "Разработка CMS" Сегодня мы будем писать модуль мини новостей. Я уже писал статью на тему этого модуля, так, что изобретать новое я не стану. В той статья, скажем была теория, сейчас же будет практика. Что нам понадобится? Нам понадобится база данных, и пару строк кода. В введение к этому циклу я не упомянул, что нам понадобится локальный сервер.
Я использую данвер, инструкция по установки есть на официальном сайте, так что если у Вас еще не стоит локальный сервер, то поставьте его, очень нужная вещь (Кстати, прошу прощение что не упомянул про него =()
Ну что ж, попытаюсь объяснить логику работы нашего блога... В админ панели мы добавляем какую нить новую статью, при загрузки главной страницы нашего блога, появляется небольшое описание нашей статьи (поста) ниже будет расположена кнопочка "читать дальше" (Про мысли о создание такой кнопки, можно почитать тут) Собственно как будет работать наш "модуль" При обращение сервера к файлу index.php подключается наш модуль (news.php) в котором определенна следующая логика:
Для начало конектимся к базе данных и проверяем, есть ли вообще статьи в блоге, после чего подключается шаблончик - html код с разметкой, отвечающий за расположение блоков описание статьи, название, автор статьи, дата размещения, всевозможные нужные ссылки, и тому подобное... заменяем в шаблоне идентификаторы на информацию из базы данных, после чего с генерированный код помещается в переменную и выводится на экран. В общих чертах думаю понятна работа модуля, на практики, должно все встать на свои места В голову пришла идея накидать схему, если просмотреть ее то все станет понятно
Для начало нам понадобится таблица в базе данных, создадим ее:
CREATE TABLE IF NOT EXISTS `blog` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`text` text NOT NULL,
`title` varchar(255) NOT NULL,
`author` varchar(255) NOT NULL,
`date_b` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
Далее по нарисованной мной схеме, правим файл index.php, в начале файла вставляем вот эти строчки
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "blog";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "root";//Имя пользователя БД
$passUSER = "";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
Далее по схеме у нас идет подключение модуля news.php. Все модули у нас будут лежать в папке moduls в корне сайта. Так что создаем такую папку на сервере, и пишем наш модуль. Его логика видна на схеме, вот код с комментариями:
<?
function index_page()
{
$result_index = mysql_query("SELECT * FROM blog ORDER BY id DESC LIMIT 10");//Выводим из базы данных последние 10 записей
$myrow_index = mysql_fetch_array($result_index);
if($myrow_index != "")//Проверяем есть ли в базе данных записи
{//Если есть...
$sm_read = file("templates/news.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его
do//Цикл do while
{
$edd_tamp = $sm_read;//Так как на придется править шаблон,
//то лучше его сохранить в отдельную переменную, иначе нам придется
//пользоваться функцией file() чаще чем 1 раз, а это нагрузка на сервер
$text = explode("[end]",$myrow_index[text]);//идентификатор в тексте показывающий,
//что после него следует вывести кнопку "читать дальше"
//Замены идентификаторов на переменные из базы данных
$edd_tamp = str_replace("[_text]",$text[0],$edd_tamp);//Текст
$edd_tamp = str_replace("[_title]",$myrow_index[title],$edd_tamp);//Название статьи
$edd_tamp = str_replace("[_id]",$myrow_index[id],$edd_tamp);//id статьи, для вывода в полной статьи
$edd_tamp = str_replace("[_author]",$myrow_index[author],$edd_tamp);//Автор статьи
$edd_tamp = str_replace("[_date_b]",$myrow_index[date_b],$edd_tamp);//Дата размещения
$news .= $edd_tamp;// Склеиваем весь с генерированный код в одну переменную
}
while($myrow_index = mysql_fetch_array($result_index));
}
else $news = "<p align='center'>Нет записей в базе данных</p>";//Если записей нет, то вывести это сообщение
return $news;//Выводим с генерированный html код
}
?>
Для генерации html кода нам понадобится шаблон, разметка шаблона для новостей берется из файла index.html который мы верстали в предыдущей статье
Вот вырезка из файла index.html
<!--ТЕКСТ-->
<div class="div_news">
<p class="title">Введение</p>
<p>Хотел дописать свою CMS но увы дело это долгое по причине того, что постоянно придумываю что-то еще, и внедряю все новые элементы.. Боюсь что мое, так сказать, "дописывание" может никогда не закончится =) Эта небольшая статья будет содержать лишь цель моего (и Вашего) проекта. Написание статей на блоге помогает мне разобраться в написанном коде, и улучшать его. Тем самым этот цикл статей мне поможет точно, возможно он и поможет Вам. Писать будем скрипт блога. </p>
<p align="right"><a href="#">Читать дальше</a></p>
</div>
<div class="div_footer">
Автор: Rio-Shaman | 09 Октября 2011 года 07:39
</div>
<div class="div_news">
<p class="title">Кнопка "Читать дальше"</p>
<p>Было время, пришлось задуматься...как же делают такой мини текст, после которого идет кнопка читать полностью... Постигая PHP с трудом верилось что это делается в ручную...На своем первом сайте я делал специальный столбец с мини текстом, и именно этот текст выводил на новостной странице, добавляя внизу кнопку "Читать дальше" Это работает, но мне кажется это как то не очень удобно... Я искал способ который бы подсчитывал символы в переменной, и обрезал, скажем после двухсот символов, переменную... Я до сих пор верю что такой способ есть, но я его не нашел =( Какое то время я пользовался таким способом: </p>
<p align="right"><a href="#">Читать дальше</a></p>
</div>
<div class="div_footer">
Автор: Rio-Shaman | 03 Октября 2011 года 11:20
</div>
<!--ТЕКСТ-->
Тут мы видим повторяющийся блог
<div class="div_news">
...
</div>
Это и есть наш шаблончик мини новостей, копируем его, и вставляем в файл news.html который сохраним в папке templates. Следующим шагом будет замена текста на идентификаторы...вот готовый код шаблона news.html
<div class="div_news">
<p class="title">[_title]</p>
<p>[_text]</p>
<p align="right"><a href="?blog=[_id]">Читать дальше</a></p>
</div>
<div class="div_footer">
Автор: [_author] | [_date_b]
</div>
Все файлы для выполнения шага "подключение модуля news.php" у нас есть, так что подключаем. Для этого надо внести в index.php следующие изменения, перед
include("templates/index.html");
вставляем следующий код
//МОДУЛЬ МИНИ НОВОСТЕЙ
include("moduls/news.php");
$txt = index_page();//Выводим результат функции в переменную, которая отобразится на экране пользователя
//МОДУЛЬ МИНИ НОВОСТЕЙ
И последним нашим шагом, является подключения шаблона index.html...так как этот шаг мы сделали в предыдущей статье то его пропускаем, но! Нам еще нужно отредактировать index.html. Так что исправляем вот этот код
<!--ТЕКСТ-->
<div class="div_news">
<p class="title">Введение</p>
<p>Хотел дописать свою CMS но увы дело это долгое по причине того, что постоянно придумываю что-то еще, и внедряю все новые элементы.. Боюсь что мое, так сказать, "дописывание" может никогда не закончится =) Эта небольшая статья будет содержать лишь цель моего (и Вашего) проекта. Написание статей на блоге помогает мне разобраться в написанном коде, и улучшать его. Тем самым этот цикл статей мне поможет точно, возможно он и поможет Вам. Писать будем скрипт блога. </p>
<p align="right"><a href="#">Читать дальше</a></p>
</div>
<div class="div_footer">
Автор: Rio-Shaman | 09 Октября 2011 года 07:39
</div>
<div class="div_news">
<p class="title">Кнопка "Читать дальше"</p>
<p>Было время, пришлось задуматься...как же делают такой мини текст, после которого идет кнопка читать полностью... Постигая PHP с трудом верилось что это делается в ручную...На своем первом сайте я делал специальный столбец с мини текстом, и именно этот текст выводил на новостной странице, добавляя внизу кнопку "Читать дальше" Это работает, но мне кажется это как то не очень удобно... Я искал способ который бы подсчитывал символы в переменной, и обрезал, скажем после двухсот символов, переменную... Я до сих пор верю что такой способ есть, но я его не нашел =( Какое то время я пользовался таким способом: </p>
<p align="right"><a href="#">Читать дальше</a></p>
</div>
<div class="div_footer">
Автор: Rio-Shaman | 03 Октября 2011 года 11:20
</div>
<!--ТЕКСТ-->
на этот
<!--ТЕКСТ-->
<?=$txt?>
<!--ТЕКСТ-->
Все, наш модуль готов...При заполнение базы данных, новости будут выводится на экран, вот скрин
update: Если после запуска Вы наблюдаете не адекватную картину в виде каракозябр, или непонятных символов в верху ( типа вот таких - п»їп»ї ), то переходите вот к этому посту "Правильная кодировка у нашего движка". Эта проблема связана с кодировкой, так что ее, просто, необходимо сменить, и все =)
Исходник |
У меня при нажатие на кнопку "читать дальше" не отображается текст полностью =(, только в строке ввода меняется на другую "?blog=1" и все... как решить проблему?..
http://rio-shaman.ru/index.php?blog=39
Так как только этого модуля мало.
вот у вас в статье написано про "[end]", если вставить в строку, то все отлично текст обрезается как надо, НО это если вручную вставить, а можно ли как-нибудь автоматически вставить в строку к примеру после 100 символа вставить "[end]", смотрел про php вставка в строку, но проблема заключается в том, что я не понял где переменная отвечающая за текст, если эта "$edd_tamp = str_replace("[_text]",$text[0],$edd_tamp);//Текст", то увы не вставляет =(
Я бы не советовал делать автоматическую генерацию анонса, так как в случае автоматизированного процесса, Вы не сможете избежать обрезание html кода в анонсе. По сути будет огромный шанс того, что у Вас рано или поздно образуется не закрытый html тег, что может повлиять на визуальную картину =(
Но все же если Вы хотите поэкспериментировать, полный текст содержится в переменной $myrow_index[text]
Для того, что бы изображения были, то Вам придется переписывать большую часть кода, я в свое время решил что использование код-слова [end] это решение многих проблем =)
P.S.: И я админ не только общительный, но и дружелюбный, если будут у Вас какие трудности, пишите, попробую помочь =)
Вроде все работает так как я и хотел, если хотите то можете отредактировать статью, думаю другим будет полезно ;)
//Обрабатываем данные для обрезки
$end=$myrow_index[text];
$data=substr_replace($end,"...[end]",125,0);//вставляем в строку "...[end]" после 125 символа
$text = explode("[end]",$data);//Ищем идентификатор в тексте показывающий,
//что после него следует вывести кнопку "читать дальше"
Это в файле news.php
Пример:
Текст ДО обработки
<img style="float: left; border: 0; margin: 5px;" src="../upload/2009228438.jpg" alt="Менеджер файлов для нашей CMS Часть 1" width="100" height="100" />Добрый день читатель Блога RS!
Текст ПОСЛЕ обработки
<img style="float: left; border: 0; margin: 5px;" src="../upload/2009228438.jpg" alt="Менеджер файлов для нашей CMS...[end]
Как видите тег img не закрылся, из-за чего будет ошибка на странице... Для избежание такой ошибки, необходимо чистить код от html, и после уже приклеивать изображение, а это уже совершенно другой алгоритм. Я может быть в скором будущем напишу отдельный пост, где попробуем внедрить автоматизм
Всю статью повторила, но что-то пока не получилось увидеть сборку аналогично Вашему скрину, дальше пока идти не решаюсь. Думаю не верно подключаю таблицу, денвер ругается.
$nameDB = "blog";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "root";//Имя пользователя БД
$passUSER = "";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
Наверное в той к которой подключаемся и создаём таблицу.
http://rio-shaman.ru/index.php?blog=67
Сообщения денвера:
Warning: file(templates/news.html) [function.file]: failed to open stream: No such file or directory in Z:\home\localhost\www\1blog\moduls\news.php on line 8
Warning: implode() [function.implode]: Bad arguments. in Z:\home\localhost\www\1blog\moduls\news.php on line 9
Warning: include(templates/index.html) [function.include]: failed to open stream: No such file or directory in Z:\home\localhost\www\1blog\index.php on line 16
Warning: include() [function.include]: Failed opening 'templates/index.html' for inclusion (include_path='.;/usr/local/php5/PEAR') in Z:\home\localhost\www\1blog\index.php on line 16
Помогите разобраться.
PS. все Ваши предыдущие посты я внимательно читаю, пока все получалось
Для упрощения создание нужной таблицы с нужными колонками я дал SQL запрос:
CREATE TABLE IF NOT EXISTS `blog` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`text` text NOT NULL,
`title` varchar(255) NOT NULL,
`author` varchar(255) NOT NULL,
`date_b` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
Вставлять этот SQL запрос необходимо в поле SQL запроса базы данных.
Вот что Вам нужно сделать:
1. Удалить созданные таблицы blog, blog1, ... ,blog N
2. Зайти на главную страницу базы данных
3. Щелкнуть по кнопке "SQL"
4. Вставить SQL запрос из этого поста в поле SQL запроса
5. Нажать "ОК"
Таблица должна быть создана, после чего проблем возникнуть не должно, если что не получается пишите. Вот ссылка на скрин, попытался отобразить куда необходимо нажимать
http://rio-shaman.ru/upload/1051289460.jpg
Денверу не нравятся 8 и 9 строка из news.php.
Вот эти строки:
$sm_read = file("templates/news.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его
<?php
function index_page()
{
$result_index = mysql_query("SELECT * FROM blog ORDER BY id DESC LIMIT 10");//Выводим из базы данных последние 10 записей
$myrow_index = mysql_fetch_array($result_index);
if($myrow_index != "")//Проверяем есть ли в базе данных записи
{//Если есть...
$sm_read = file("templates/news.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его
do//Цикл do while
{
$edd_tamp = $sm_read;//Так как на придется править шаблон,
//то лучше его сохранить в отдельную переменную, иначе нам придется
//пользоваться функцией file() чаще чем 1 раз, а это нагрузка на сервер
$text = explode("[end]",$myrow_index[text]);//идентификатор в тексте показывающий,
//что после него следует вывести кнопку "читать дальше"
//Замены идентификаторов на переменные из базы данных
$edd_tamp = str_replace("[_text]",$text[0],$edd_tamp);//Текст
$edd_tamp = str_replace("[_title]",$myrow_index[title],$edd_tamp);//Название статьи
$edd_tamp = str_replace("[_id]",$myrow_index[id],$edd_tamp);//id статьи, для вывода в полной статьи
$edd_tamp = str_replace("[_author]",$myrow_index[author],$edd_tamp);//Автор статьи
$edd_tamp = str_replace("[_date_b]",$myrow_index[date_b],$edd_tamp);//Дата размещения
$news .= $edd_tamp;// Склеиваем весь с генерированный код в одну переменную
}
while($myrow_index = mysql_fetch_array($result_index));
}
else $news = "<p align='center'>Нет записей в базе данных</p>";//Если записей нет, то вывести это сообщение
return $news;//Выводим с генерированный html код
}
?>
$sm_read = file("templates/news.html");//...подключаем шаблон
пишите
$sm_read = file("templates/news.htm");//...подключаем шаблон
Так же придется переправить index.php поменять там строчку
include("templates/index.html");//Подключение шаблона
на
include("templates/index.htm");//Подключение шаблона
Но мой Вам совет, лучше поменяйте расширение с HTM на HTML, иначе далее по материалу Вам придется везде делать поправки, а это лишний геморрой...
Так же я заметил что в файле index.php строчки
//Пока что мы вводим значение переменных в ручную
$header_title = "Документ HTML";
$header_metaD = "Описание страницы";
$header_metaK = "Ключевые слова страницы";
идут после
include("templates/index.html");//Подключение шаблона
Это не правильно. Строчка
include("templates/index.html");//Подключение шаблона
Должна находится в самом низу файла index.php ( ну естественно перед "?>" =) )
можно еще вопрос: У меня в БД первой записью идет строка с titl-ом Первая статья,
вторая запись с titl-ом Вторая статья, а отображается наоборот: Вторая, а потом Первая. У Вас тоже сначала Кнопка "Читать дальше", а потом Введение.
$result_index = mysql_query("SELECT * FROM blog ORDER BY id DESC LIMIT 10");//Выводим из базы данных
есть атрибут ORDER BY id DESC, переводится как: "Сортировать по id в обратном порядке". Это сделано специально для того чтобы новые статьи отображались первыми. Если хотите что бы этого не было уберите DESC из запроса SELECT
По следующему посту про модуль Статьи: в конце Вы пишете ...для теста заполните в базе данных таблицу blog, и увидите, что все прекрасно работает... В этой таблице я заполнила только две записи, я про них уже упоминала, их вывод собственно и вижу в блоге . Все изменения согласно уроку по модулю Статьи внесла, но имхо ничего не изменилось, что-то еще нужно в таблицу добавить? Сорри за тупость...
$result_index = mysql_query("SELECT * FROM blog WHERE id = '$blog'"); //Выводим из базы статью
id=1 это понятно, а id = '$blog' не понятно.
2. $blog содержит число, с помощью этого числа из базы данных выводится определенная строка ( то бишь пост ). Это число определяется с помощью GET переменной ( подробнее о GET и POST читайте тут - http://rio-shaman.ru/index.php?blog=65 ). Обратите внимание что ссылка "читать дальше" ведет на страницу типа:
http://site.ru/index.php?blog=1
Число 1 в этой ссылке помещается в переменную blog, после чего из базы данных выводится статья чье id равно единице.
p.s.: Пишите пожалуйста вопросы в посте к которому относится эти вопросы =) Я вижу все комментарии, так что не бойтесь, не потеряется =)
п»їп»ї
И шрифт становится крупнее. Думаю как раз это у Вас и происходит
P.S.: Если конечно проблема именно в кодировке, а не простая особенность css =) Если будут какие проблемы, пишите, постараюсь помочь
Все же я бы порекомендовал Вам остановится на windows-1251, ибо с ней я работал и смогу, если что, помочь.
1. После подключения к базе данных ( для того что бы вся инфа из базы данных выводилась в кодировке utf-8 ) прописать вот такую строчку "mysql_query("SET NAMES 'utf8'");" То есть вот так:
...
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
mysql_query("SET NAMES 'utf8'");
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
2. Далее необходимо принудительно заставить сервер передавать инфу в кодировки utf-8. Для этого нужно создать в корне сайта файл .htaccess и прописать в нем вот такую строчку
AddDefaultCharset utf8
3. Далее нужно в шаблоне index.html изменить мета тег вот так
...
<meta http-equiv="Content-Type" content="text/html; charset=utf8">
...
4. Ну и естественно все файлы должны быть в кодировке utf-8
P.S.: После всего этого должно работать все корректно. Надеюсь это поможет...
1. Попрыгал на вашем сервисе, ошибок явных не вижу
2. Идея неплохая, но как мне кажется Вам очень сильно не хватает человеко-подобных ссылок, так как пользователю будет очень важно иметь вполне читаемую ссылку на свой блог
Удачи Вам в раскрутке и доработки Вашего проекта =)
mysql_select_db($nameDB, mysql_connect($nameSERVER, $nameUSER, $passUSER));
вот такую строчку:
mysql_query("SET NAMES 'cp1251''");
"Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in Z:*\*\www\moduls\news.php on line 5"
Я так понимаю что он с типами данных что-то путает, вместо строкового использует логический.
Шаблоны, скрипты пути все копировал, т.е. код идентичен выше изложенному.
$connect = mysql_select_db($nameDB, mysql_connect($nameSERVER, $nameUSER, $passUSER));
if (!$connect) {die('Ошибка соединения: ' . mysql_error());}
echo 'Успешно соединились';
Допустим я создал бд с именем, паролем и именем пользователя "asd", а таблицу "blog", то мой запрос на коннект должен выглядеть :
$nameDB = "asd";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "asd";//Имя пользователя БД
$passUSER = "asd";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
???
Если Вас не затруднит добавьте меня в скайпе, Я пошагово опишу свои действия возможно тогда вы заметите в чем проблема.
В итоге оказалось, что инклудид скрипт с новостями он раньше чем происходит коннект с базой(строчки перепутал)...
Буду постигать предоставленный вами материал дальше)
Спасибо огромное, что так скоро реагируете на сообщения пользователей!
И также еще одна проблема: указана база данных к которой подключаюсь, в самой базе данных создаю материалы, но на страничке пишет: "Нет записей в базе данных". Хотя они есть, я добавлю их через пхпмайадмин...не знаю что и делать(
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "news";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "root";//Имя пользователя БД
$passUSER = "";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
В самый вверх.
Хотелось также спросить про базу данных и таблиц в ней. Вот я создал одну базу данных, назвал ее news, в ней есть таблицы blog, news, menu. В файле index.php я пишу название таблицы news, а уже в каждом из скриптов указывать на конкретную таблицу, т.е. $result_index = mysql_query("SELECT * FROM blog ORDER BY id DESC LIMIT 10");, т.е. тут FROM blog и указывает из какой таблицы скрипт берет данные, правильно?
Если все так, значит подключение к базе быть должно по идеи ... но тогда что ему мешает выдать данные ...
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "news";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "root";//Имя пользователя БД
$passUSER = "";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
в самый вверх файла index.php?
но беда не закончилась(( с кодировкой теперь проблемы. В базе данных указан "cp1251_general_ci" на всех таблицах, файлы сохранены в данной кодировке, ANSI, но русские буквы показывает ????? * все указано на то что нужно поставить кирилицу, но он не ставит ... прочитал ваши статьи по смене кодировки - все сделал, не помогло (...
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
вставить вот такую строчку:
mysql_query("SET NAMES 'cp1251'");
http://rio-shaman.ru/download/download_1248152925.rar
Если и это не поможет, то я не знаю что еще сделать =(
1. mysql_fetch_array без соответствующего флага???!! Здесь уж лучше mysql_fetch_assoc применить! Он хоть только один массив возьмёт, а не два, как предыдущий.
2. do...while - эта конструкция вообще ну в оооочень редких случаях должна применяться! - Это в любом учебнике написано. Достаточно здесь while или foreach взять (кстати второй как раз для массивов). И код раза в 2 уменьшится.
3. "//Замены идентификаторов на переменные из базы данных " хорошо хоть что их тут только 5. Не проще вставить сам код news.html и просто пробежаться циклом с заменой данных???
Заранее спасибо!
http://rio-shaman.ru/index.php?blog=39
Notice: Undefined variable: news in /moduls/news.php
то есть переменная в которую склеивается весь код, не определена...
Такого количества косяков и уязвимостей нет нигде больше.
Вместо
$date = date("d/m/Y H:i");
Написано:
$date_day = date("d");//Определяем день
$date_month = date("m");//Определяем месяц
$date_year = date("Y");//Определяем год
$date_time = date("H:i");//Определяем часы и минуты
$date_comm = $date_day."/".$date_month."/".$date_year." ".$date_time;//Склеим все переменные в одну
Вместо:
$cat=(int)$_GET[\'cat\'];
if (!$cat) redirect (\'/\');
Написано:
//if(isset($_GET[\'cat\']))
//{
// $cat = $_GET[\'cat\'];
// if(!preg_match("/^[0-9]+$/",$cat))
// {
// header("location: index.php");
// exit;
// }
//}
//пример
Зачем - то:
$edd_tamp = str_replace("[_text]",$text[0],$edd_tamp);//Текст
$edd_tamp = str_replace("[_title]",$value[title],$edd_tamp);//Название статьи
$edd_tamp = str_replace("[_id]",$value[id],$edd_tamp);//id статьи, для вывода в полной статьи
$edd_tamp = str_replace("[_author]",$value[author],$edd_tamp);//Автор статьи
$edd_tamp = str_replace("[_date_b]",$value[date_b],$edd_tamp);//Дата размещения
Хотя даже конкатенация работает на много порядков быстрее.
стоит:
$id_comm = htmlspecialchars($id_comm);
намного быстрее работает:
(int)$id_comm;
стоит:
$txt_comm = str_replace("\\n","<BR>",$txt_comm);//Заменяем переносы строки на тег <BR>
можно:
nl2br($txt_comm);
//Избавляемся от кавычки
$id_comm = str_replace("\'","'",$id_comm);
$txt_comm = str_replace("\'","'",$txt_comm);
$author_comm = str_replace("\'","'",$author_comm);
если прогоняли ранее через htmlspecialchars можно было флаг задать чтобы он кавычки убрал, если это типа защита от sql - injection, то нужно mysql_real_escape_string, кавычками sql-injection не заканчивается.
Написано
$value[text]
Правильно
$value[\'text\']
Написано
$sm_read = file("templates/news.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его
Делается одной функцией ЕМНИП file_get_contents
Данный движок лишь одна из моих (и моих читателей) ступеней в программирование, не более того.
P.S. Но это лишь мое мнение про ценность материала на моем блоге.
Сам регулярно смотрю информацию чуть ли не о каждой функции в официальной документации.
Мое мнение, что лучше изначально учиться правильно, долго переучиваться :(
В основном одним проектом http://nn-sp.ru/
У Вас имеется phpmyadmin? Припоминается подобная ошибка, когда mysql сервер определял, что создано два пользователя root. Такое происходило при не корректной переустановки mysql сервера.
Думаю такой код будет меньше и удобней, он выполняет сразу 2 функции file() и implode =)
$sm_read = file_get_contents("templates/news.html");
Если не прав, исправьте меня)
и есть ли оно на сайте
Короче ребята запарился я с этой кодировкой что не сделаешь "краказябры" з....... честно говоря.
Решил я эту проблему сохраняю все в utf-8 все норм работает и не надо не где проставлять windows-1251 час на сколько мне известно везде по умолчанию utf-8 идет. Да и Notepad++ и NetBeans тоже с utf-8 работают лично у меня так не знаю у кого как.
Только что ради интереса создал на Денвере еще один проект, помимо того над которым работаю, все сохранил в utf-8, все отлично все норм работает не каких "краказябр".
Так как я решил эту проблему, просто создал в директорий проекта на котором работаю, файл .htaccess он так и называется без всякого расширения (вдруг если кто не знает, то есть и название и расширение .htaccess) и прописал следующие строки (вдруг если опять кто не знает) :
Удачи Всем и спасибо ОГРОМНОЕ Алексею!
Вот все выводит отлично, но в конце страницы, то есть в самом низу пишет:
Спасибо за ранее.
http://savepic.ru/7704972.png
как настроить правильно кодировку?
Привет автор. Ты мудак, и вот 6 причин почему я так считаю.
1. Для определения количества записей которые попали в выборку используются mysql_num_rows, которая сейчас уже устарела и стоит использовать mysqli_affected_rows
2. расширение для работы с базой mysql_* устарело, и стоит использовать mysqli_*
3. Использовать функциональный подход это дно как мне кажется, лучше использовать ООП
4. Зачем брать файл как массив строчек, а потом его объединять? Что за ***? Про функцию file_get_contents слышал?
5. $text = explode("[end]",$myrow_index[text]); это что за дичь? Свое собственное оригинальное решение?
6. str_replace("[_text]",$text[0],$edd_tamp); Про шаблонизаторы слышал? Лучше бы уже <?=$text[0]?> использовал
Да, непонятно как работает это услове.В разделе : Часть 2 - Получаем начальные навыки php, уроки php вы приводите пример цикла do while.
Пример:
Тут все ясно, цикл повторяется пока $a меньше 100. В модуле news.php в качестве условия цикла приводится присвоение переменной $myrow_index значения mysql_fetch_array($htpekmn_index)); Конечным результатом цикла будет значение в переменной $news — это строка, как она соотносится с условием?
Функция mysql_fetch_array возвращает (из ресурса $result_index который содержит ряды выборки из БД) ассоциативный и/или численный массив. Как только ряды выборки заканчиваются, функция выдает FALSE, что приводит к остановке цикла.
У меня к вам вопрос:
А можно заменить:
на:
а в файле конфиг прописать все процедуры подключения?
просто я новичок в этом деле а везде встречал именно файл конфигурации