Пишем модуль Мини новости для нашей CMS

 

Приветствую Вас на втором уроке, цикла "Разработка 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>
  • [_title] - Название нашей статьи
  • [_text] - Текст нашей статьи
  • [_id] - id в БД
  • [_author] - Автор статьи
  • [_date_b] - Дата размещения

Все файлы для выполнения шага "подключение модуля 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: Если после запуска Вы наблюдаете не адекватную картину в виде каракозябр, или непонятных символов в верху ( типа вот таких - п»їп»ї ), то переходите вот к этому посту "Правильная кодировка у нашего движка". Эта проблема связана с кодировкой, так что ее, просто, необходимо сменить, и все =)

Исходник
 

Возможно Вам будут интересны следующие заметки

Комментарии (139)

Ваше имя *
Сайт
Ваш E-mail *
Ваше сообщение *
 
mail92, 31 Января 2012 г. 02:15 пишет:
Гость
Статья хорошая, но у меня вопрос к автору....
У меня при нажатие на кнопку "читать дальше" не отображается текст полностью =(, только в строке ввода меняется на другую "?blog=1" и все... как решить проблему?..
Rio-Shaman, 31 Января 2012 г. 12:44 пишет:
Автор
А Вы писали модуль "Статьи"?
http://rio-shaman.ru/index.php?blog=39
Так как только этого модуля мало.
Ответ для пользователя: mail92
mail92, 31 Января 2012 г. 13:43 пишет:
Гость
скорее всего нет =), я писал этот модуль и в предыдущей статье, где начала этой статьи..
mail92, 31 Января 2012 г. 14:08 пишет:
Гость
Все разобрался, спасибо =), кстати у меня вопрос:
вот у вас в статье написано про "[end]", если вставить в строку, то все отлично текст обрезается как надо, НО это если вручную вставить, а можно ли как-нибудь автоматически вставить в строку к примеру после 100 символа вставить "[end]", смотрел про php вставка в строку, но проблема заключается в том, что я не понял где переменная отвечающая за текст, если эта "$edd_tamp = str_replace("[_text]",$text[0],$edd_tamp);//Текст", то увы не вставляет =(
Rio-Shaman, 31 Января 2012 г. 14:45 пишет:
Автор
Тот кусочек кода, что Вы указали, отвечает за замену код-слова [_text] на уже обработанную переменную текста $text[0] ( эта переменная содержит все, что было написано перед [end] ).

Я бы не советовал делать автоматическую генерацию анонса, так как в случае автоматизированного процесса, Вы не сможете избежать обрезание html кода в анонсе. По сути будет огромный шанс того, что у Вас рано или поздно образуется не закрытый html тег, что может повлиять на визуальную картину =(

Но все же если Вы хотите поэкспериментировать, полный текст содержится в переменной $myrow_index[text]
Ответ для пользователя: mail92
mail92, 31 Января 2012 г. 15:01 пишет:
Гость
Спасибо, вечерком попробую сделать, спасибо что так оперативно отвечаете, редко найдешь ресурсы, где Админы такие общительные =)
Rio-Shaman, 31 Января 2012 г. 15:11 пишет:
Автор
Хочу Вас предостеречь, если Вы будете делать автоматизированный анонс, то Вам придется забыть о изображениях в начале анонса, ибо придется всю переменную с текстом чистить от html кода.

Для того, что бы изображения были, то Вам придется переписывать большую часть кода, я в свое время решил что использование код-слова [end] это решение многих проблем =)

P.S.: И я админ не только общительный, но и дружелюбный, если будут у Вас какие трудности, пишите, попробую помочь =)
Ответ для пользователя: mail92
mail92, 31 Января 2012 г. 23:01 пишет:
Гость
Вот решил проблему с автоматизированием обрезки ;)...
Вроде все работает так как я и хотел, если хотите то можете отредактировать статью, думаю другим будет полезно ;)

//Обрабатываем данные для обрезки
$end=$myrow_index[text];
$data=substr_replace($end,"...[end]",125,0);//вставляем в строку "...[end]" после 125 символа
$text = explode("[end]",$data);//Ищем идентификатор в тексте показывающий,
//что после него следует вывести кнопку "читать дальше"

Это в файле news.php
Rio-Shaman, 01 Февраля 2012 г. 03:59 пишет:
Автор
Понимаете в чем дело, если в тексте есть html код, а он будет 99%, то после автоматической обрезки, появится не закрытые теги...
Пример:

Текст ДО обработки
<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, и после уже приклеивать изображение, а это уже совершенно другой алгоритм. Я может быть в скором будущем напишу отдельный пост, где попробуем внедрить автоматизм
Ответ для пользователя: mail92
mail92, 02 Февраля 2012 г. 01:53 пишет:
Гость
хм, просто я посмотрел что там эта переменная выдает через echo $.. и сделал... Хотя думаю да вы правы... Буду надеяться что такое не произойдет ;)
Ольга, 24 Марта 2012 г. 18:09 пишет:
Читатель
Вы пишете CREATE TABLE IF NOT EXISTS `blog`, т.е. таблица называется blog, а как называется вся БД ? В какой базе мы создаем эту таблицу?
Всю статью повторила, но что-то пока не получилось увидеть сборку аналогично Вашему скрину, дальше пока идти не решаюсь. Думаю не верно подключаю таблицу, денвер ругается.
Дмитрий, 24 Марта 2012 г. 19:09 пишет:
Читатель
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "blog";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "root";//Имя пользователя БД
$passUSER = "";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));

Наверное в той к которой подключаемся и создаём таблицу.
Ответ для пользователя: Ольга
Rio-Shaman, 24 Марта 2012 г. 19:51 пишет:
Автор
В моем случае база данных называется "blog". Название не принципиально, как хотите так базу данных и называйте.
Ответ для пользователя: Ольга
Rio-Shaman, 24 Марта 2012 г. 20:00 пишет:
Автор
Если Вы не знаете как создавать базу данных, то читайте вот этот пост:
http://rio-shaman.ru/index.php?blog=67
Ответ для пользователя: Ольга
Ольга, 25 Марта 2012 г. 09:57 пишет:
Читатель
БД я создала, назвала BLOG, в ней создала, например, 4 таблицы blog, blog1, blog2 и blog3. К какой таблице будем конектиться ? Разве название таблицы не важно ? (название БД, действительно, не играет роли, но название таблицы в базе разве не нужно указывать?) Поправьте меня, где я ошибаюсь?

Сообщения денвера:
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. все Ваши предыдущие посты я внимательно читаю, пока все получалось
Rio-Shaman, 25 Марта 2012 г. 10:55 пишет:
Автор
Таблица которая понадобится в данном уроке называется blog. В этой таблице 5 колонок: id, text, title, author, date_b.

Для упрощения создание нужной таблицы с нужными колонками я дал 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
Ответ для пользователя: Ольга
Ольга, 25 Марта 2012 г. 11:15 пишет:
Читатель
таблиц blog1, ... ,blog N у меня и не было, это так для иллюстрации вопроса. А таблица blog в БД blog у меня похоже все-таки создавалась. Просто меня смутило, что и БД и таблица в ней назывались одинаково - blog.

Денверу не нравятся 8 и 9 строка из news.php.
Вот эти строки:
$sm_read = file("templates/news.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его
Rio-Shaman, 25 Марта 2012 г. 11:18 пишет:
Автор
Судя по сообщениям денвера у Вас в папке templates нет файлов index.html и news.html
Ответ для пользователя: Ольга
Ольга, 25 Марта 2012 г. 12:07 пишет:
Читатель
есть оба, только не знаю как отправить Вам скрин, т.е.как сделать вложение
Ольга, 25 Марта 2012 г. 12:12 пишет:
Читатель
вот текст файла news.php, может 8 и 9 это другие строки? Посмотрите пожалуйста,

<?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 код
}
?>
Rio-Shaman, 25 Марта 2012 г. 12:19 пишет:
Автор
Денвер говорит, что не может подключить файл news.html который находится в папке templates. Дело не в том что в коде что-то не так, в коде все норм. Скиньте пожалуйста всю Вашу папку. Я имею ввиду заархивируйте всю папку и скиньте на http://rghost.ru/, после чего укажите ссылку, я скачаю посмотрю, что у Вас не так...
Ответ для пользователя: Ольга
Ольга, 25 Марта 2012 г. 12:28 пишет:
Читатель
http://rghost.ru/37208473
Rio-Shaman, 25 Марта 2012 г. 12:36 пишет:
Автор
Расширение ваших файлов в папке templates - HTM, а должны быть HTML. Либо меняйте расширение файлов, либо в коде, вместо (файл news.php)

$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 ( ну естественно перед "?>" =) )
Ответ для пользователя: Ольга
Ольга, 25 Марта 2012 г. 12:39 пишет:
Читатель
огромное спасибо, сейчас попробую все поправить и если получится буду двигаться дальше.
Ольга, 25 Марта 2012 г. 12:59 пишет:
Читатель
сейчас все вышло без ошибок, правда вид не ахти, без рамочек, ну и текст, конечно, другой.
Rio-Shaman, 25 Марта 2012 г. 13:30 пишет:
Автор
Дизайн дело пятое =) функционал в приоритете, там далее будет норм диз, так, что не отчаивайтесь =)
Ответ для пользователя: Ольга
Rio-Shaman, 25 Марта 2012 г. 13:33 пишет:
Автор
Кстати, я щас глянул в Вашу папку, вижу, что у Вас файл с стилем называется css.css, а в index.html прописан как style.css. Подкорректируйте имя стиля и будет у Вас базовый дизайн Вашего персонального блога =)
Ответ для пользователя: Ольга
Ольга, 25 Марта 2012 г. 14:58 пишет:
Читатель
да-да, я уж потом все перепроверила и тоже обратила внимание, просто копировала из других своих каталогах, а там он назывался css.
можно еще вопрос: У меня в БД первой записью идет строка с titl-ом Первая статья,
вторая запись с titl-ом Вторая статья, а отображается наоборот: Вторая, а потом Первая. У Вас тоже сначала Кнопка "Читать дальше", а потом Введение.
Rio-Shaman, 25 Марта 2012 г. 15:13 пишет:
Автор
В строке

$result_index = mysql_query("SELECT * FROM blog ORDER BY id DESC LIMIT 10");//Выводим из базы данных

есть атрибут ORDER BY id DESC, переводится как: "Сортировать по id в обратном порядке". Это сделано специально для того чтобы новые статьи отображались первыми. Если хотите что бы этого не было уберите DESC из запроса SELECT
Ответ для пользователя: Ольга
Ольга, 25 Марта 2012 г. 15:54 пишет:
Читатель
ага понятно.

По следующему посту про модуль Статьи: в конце Вы пишете ...для теста заполните в базе данных таблицу blog, и увидите, что все прекрасно работает... В этой таблице я заполнила только две записи, я про них уже упоминала, их вывод собственно и вижу в блоге . Все изменения согласно уроку по модулю Статьи внесла, но имхо ничего не изменилось, что-то еще нужно в таблицу добавить? Сорри за тупость...
Rio-Shaman, 25 Марта 2012 г. 19:35 пишет:
Автор
При нажатие на кнопку "читать дальше" должны увидеть написанную Вами статью целиком. Текст статьи помещается в колонку text таблицы blog
Ответ для пользователя: Ольга
Ольга, 25 Марта 2012 г. 21:56 пишет:
Читатель
текст статьи я и так целиком в блоге вижу, при нажатии "читать дальше" тоже самое вижу. Может текст статей маленький, поэтому и виден целиком?
Ольга, 25 Марта 2012 г. 22:00 пишет:
Читатель
еще мне в файле text.php не понятна строка

$result_index = mysql_query("SELECT * FROM blog WHERE id = '$blog'"); //Выводим из базы статью

id=1 это понятно, а id = '$blog' не понятно.
Rio-Shaman, 25 Марта 2012 г. 22:14 пишет:
Автор
1. Для того что бы разделить статью на анонс и продолжение необходимо вставить код-слово [end] в текст. То есть вы отсчитываете пару предложений в своей статье, вставляете [end] и продолжаете писать статью. После сохранения на главной странице будет виден текст до [end] а вся остальная часть будет видна только при нажатие на кнопку "читать дальше".

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.: Пишите пожалуйста вопросы в посте к которому относится эти вопросы =) Я вижу все комментарии, так что не бойтесь, не потеряется =)
Ответ для пользователя: Ольга
Ольга, 25 Марта 2012 г. 22:41 пишет:
Читатель
с [end] потом поэкспериментирую, с id = '$blog' мне еще нужно разбираться.
Алексей, 21 Апреля 2012 г. 16:12 пишет:
Читатель
Нашел такую вещь) Если подключать mews.php и $txt = index_page(); перед подключением шаблона, то вылазят отступы сверху, меняется шрифт, а, если после шаблона подключить, то с дизайном все ок, но не выводит надпись) Не встречалось такое? Или далее все исправим?
Rio-Shaman, 21 Апреля 2012 г. 16:43 пишет:
Автор
Дело скорее всего в кодировке. Для того что бы все было правильно файлы должны быть в кодировке windows-1251. Если этого не сделать то в самом верху появляются приблизительно вот такие символы

п»їп»ї

И шрифт становится крупнее. Думаю как раз это у Вас и происходит
Ответ для пользователя: Алексей
Алексей, 21 Апреля 2012 г. 19:39 пишет:
Читатель
В принципе работе н мешает) С блоками я такого не замечал) Позже посмотрю, что да как)
Ответ для пользователя: Rio-Shaman
Rio-Shaman, 21 Апреля 2012 г. 19:47 пишет:
Автор
Изменение в кодировке необходимы, ибо в дальнейшем перенаправление ( header() ) не будет работать!

P.S.: Если конечно проблема именно в кодировке, а не простая особенность css =) Если будут какие проблемы, пишите, постараюсь помочь
Ответ для пользователя: Алексей
Алексей, 21 Апреля 2012 г. 23:52 пишет:
Читатель
Да, перенаправление не работает) Пробовав поставить все файлы в 251, браузер не очень охотно отображал все. Поставив ве таблицы в utf-8, не работает перенаправление) Разберемся)
Алексей, 22 Апреля 2012 г. 00:09 пишет:
Читатель
А возможно изменить кодировку таблиц? Просто заметил, что вставлял sql так как было у вас, но сейчас увидел, что вы указывали 1251, а мне нужен utf-8)
Rio-Shaman, 22 Апреля 2012 г. 00:22 пишет:
Автор
Скорее всего можно, но я не могу Вам советовать что-либо по этому поводу, ибо не практиковал. А если не практиковал, то не знаю, что из этого выйдет.

Все же я бы порекомендовал Вам остановится на windows-1251, ибо с ней я работал и смогу, если что, помочь.
Ответ для пользователя: Алексей
Алексей, 22 Апреля 2012 г. 00:30 пишет:
Читатель
Начну снова) Поопытнее буду) Спасибо за уроки)
Rio-Shaman, 22 Апреля 2012 г. 00:47 пишет:
Автор
Думаю для того что бы кодировка utf работала нормально, нужно:

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.: После всего этого должно работать все корректно. Надеюсь это поможет...
Ответ для пользователя: Алексей
Алексей, 22 Апреля 2012 г. 02:06 пишет:
Читатель
Возьму на вооружение, да и другим будет полехно. Приятно разговаривать с профессионалом ) Но пойду вашим советом, Алексей, и, начав с самого начала, создам базу и файлы все переведу в 1251) Спасибо за быструю помощь)
mail92, 22 Апреля 2012 г. 19:50 пишет:
Гость
Здравствуйте Rio-Shaman, я у вас когда то интересовался тут на сайте, что и где у вас в переменных и вы ответили))), за это вас огромное спасибо))), прошло уже не мало времени после того, как я просматривал ваш сайт, где и учился, точнее заполнял свои пробелы в своей голове))), огромное спасибо вам, что хорошо и добродушно отвечаете/объясняете пользователям, вернуться на ваш сайт я решил, чтобы вам сказать спасибо и... попросить посетить мой сайт http://floodz.ru/, сказать как он вам, как сама идея сайта и по возможности сообщить ошибки в скриптах, если конечно есть желание и время)))
Rio-Shaman, 22 Апреля 2012 г. 21:09 пишет:
Автор
Здравствуйте! Не за что, всегда рад помочь. Насчет сайта:

1. Попрыгал на вашем сервисе, ошибок явных не вижу
2. Идея неплохая, но как мне кажется Вам очень сильно не хватает человеко-подобных ссылок, так как пользователю будет очень важно иметь вполне читаемую ссылку на свой блог

Удачи Вам в раскрутке и доработки Вашего проекта =)
Ответ для пользователя: mail92
mail92, 23 Апреля 2012 г. 00:08 пишет:
Гость
Спасибо)), я давно вас хотел пригласить на свой сайт, просто никак руки не доходили написать вам)), да и боялся я, что вы немного негативно отнесетесь))), насчет дизайна, я немного по-другому хотел реализовать идею, просто никак не могу найти статью, как реализовать перемещение блоков, ну к примеру, на яндексе такое реализовано))), по-этому дизайн сайта такой скучный))), но думаю это временно))
Алекандр, 02 Июня 2012 г. 17:39 пишет:
Гость
А почему поле date_b в БД имеет тип VARCHAR а не DATE?
Rio-Shaman, 02 Июня 2012 г. 19:58 пишет:
Автор
На этот вопрос я могу ответить лишь вот так: "Потому что" =)
Ответ для пользователя: Алекандр
Алекандр, 02 Июня 2012 г. 21:40 пишет:
Гость
))) Но лучше ведь Date написать! Или всё же нет разницы? Просто php и mysql для меня только начинается...
Ответ для пользователя: Rio-Shaman
Rio-Shaman, 02 Июня 2012 г. 21:49 пишет:
Автор
Дело в том, что я никогда таким типом не пользовался, поэтому не знаю как он работает...
Ответ для пользователя: Алекандр
Алекандр, 02 Июня 2012 г. 22:24 пишет:
Гость
Спасибо за ответ, всё-равно. Думаю, что разницы нет.
Алексей, 28 Июля 2012 г. 22:20 пишет:
Гость
У меня проблема - у меня на главной странице отображается только одна новость, а в БД у меня ДВЕ записи. Похоже, что к переменной $news не дописывается html код второй записи, а просто html код первой записи меняется на html код второй....
Rio-Shaman, 29 Июля 2012 г. 00:35 пишет:
Автор
Это исключено так как в коде четко прописано - ".=", что позволяет наполнять переменную news в каждом новом шаге цикла.
Ответ для пользователя: Алексей
Роман, 01 Августа 2012 г. 11:07 пишет:
Гость
У меня из БД почему то только знаки вопроса выводит!
Rio-Shaman, 01 Августа 2012 г. 15:01 пишет:
Автор
У Вас проблема с кодировкой. Скорее всего в базе данных информация хранится в кодировки utf8. Для того чтобы исправить данную проблему, попробуйте поставить после подключения к базе данных

mysql_select_db($nameDB, mysql_connect($nameSERVER, $nameUSER, $passUSER));

вот такую строчку:

mysql_query("SET NAMES 'cp1251''");
Ответ для пользователя: Роман
Nikita, 17 Августа 2012 г. 08:59 пишет:
Читатель
Помогите разобраться с ошибкой, пожалуйста.
"Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in Z:*\*\www\moduls\news.php on line 5"
Я так понимаю что он с типами данных что-то путает, вместо строкового использует логический.
Шаблоны, скрипты пути все копировал, т.е. код идентичен выше изложенному.
Rio-Shaman, 17 Августа 2012 г. 11:21 пишет:
Автор
По всей видимости у Вас нет коннекта к базе данных. Проверьте правильно ли Вы ввели имя базы данных, логин и пароль от нее...
Ответ для пользователя: Nikita
Nikita, 17 Августа 2012 г. 11:59 пишет:
Читатель
Для проверки присвоил переменной мускул запрос и проверил условием, которое говорит что соединение присутствует...

$connect = mysql_select_db($nameDB, mysql_connect($nameSERVER, $nameUSER, $passUSER));
if (!$connect) {die('Ошибка соединения: ' . mysql_error());}
echo 'Успешно соединились';
Ответ для пользователя: Rio-Shaman
Nikita, 17 Августа 2012 г. 12:13 пишет:
Читатель
Тем-же макаром проверил переменную "$myrow_index", действительно пишет "Ошибка соединения: No database selected".. Значит я чего-то не понимаю..
Допустим я создал бд с именем, паролем и именем пользователя "asd", а таблицу "blog", то мой запрос на коннект должен выглядеть :
$nameDB = "asd";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "asd";//Имя пользователя БД
$passUSER = "asd";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
???
Rio-Shaman, 17 Августа 2012 г. 12:52 пишет:
Автор
При условие что у пользователя asd достаточно прав для того чтобы считывать информацию из базы данных, то все должно быть нормально...
Ответ для пользователя: Nikita
Nikita, 17 Августа 2012 г. 13:49 пишет:
Читатель
Уф, Я Вас уже достал наверное, но все же хотел бы выяснить что не так..)
Если Вас не затруднит добавьте меня в скайпе, Я пошагово опишу свои действия возможно тогда вы заметите в чем проблема.
Ответ для пользователя: Rio-Shaman
Rio-Shaman, 17 Августа 2012 г. 14:35 пишет:
Автор
А Вы пробовали приконнектится к базе данных с помощью пользователя root?
Ответ для пользователя: Nikita
Nikita, 17 Августа 2012 г. 14:50 пишет:
Читатель
Алексей, я штук 5 баз создавал с пользователями, менял всем права и рут в том числе пробовал))
В итоге оказалось, что инклудид скрипт с новостями он раньше чем происходит коннект с базой(строчки перепутал)...
Буду постигать предоставленный вами материал дальше)
Спасибо огромное, что так скоро реагируете на сообщения пользователей!
Rio-Shaman, 17 Августа 2012 г. 15:02 пишет:
Автор
Способность понимать, в случае ошибки, что происходит не так в коде, один из важнейших навыков программиста. Развивайте это навык =)
Ответ для пользователя: Nikita
ник, 03 Сентября 2012 г. 21:31 пишет:
Гость
Простите, а как растянуть новости на несколько страниц?
Rio-Shaman, 03 Сентября 2012 г. 22:35 пишет:
Автор
Вот статья про постраничную навигацию (http://rio-shaman.ru/index.php?blog=170) Но я не знаю как она будет себя вести (скорее всего не будет работать) на данном этапе разработки движка...
Ответ для пользователя: ник
Юрий, 07 Сентября 2012 г. 14:12 пишет:
Читатель
Алексей, у меня похожая проблема что и у Ольги. Однако прочитав ваши ответы и выполнив все действия так, как вы описывали, проблема осталась следующая: на странице выходит ошибка "Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in Z:\home\avanesov.ru\www\modules\news.php on line 5" , проверил этот файл и эту строчку, данные в ней: $myrow_index = mysql_fetch_array($result_index); *. Другие файлы проверил, разрешения - все так как вы описываете ...
И также еще одна проблема: указана база данных к которой подключаюсь, в самой базе данных создаю материалы, но на страничке пишет: "Нет записей в базе данных". Хотя они есть, я добавлю их через пхпмайадмин...не знаю что и делать(
Юрий, 07 Сентября 2012 г. 14:24 пишет:
Читатель
Ради теста, скачал ваш исходный файл и вставил в другую директиву, сохранив при этом базу данных, но код шаблонов полностью ваш. В итоге ошибка точно такая же ... и точно также выводит что в базе нет данных, хотя они есть (
Юрий, 07 Сентября 2012 г. 16:29 пишет:
Читатель
Хм ... странно получается. Выполнил урок по поводу создания меню на сайте - все сделал так, как написано, но ошибка точно такая же как и с новостями. Ошибка именно на той же строчке. $myrow_index = mysql_fetch_array($result_index); * ума не приложу с чем это связано ((
Юрий, 07 Сентября 2012 г. 16:40 пишет:
Читатель
Жаль нет возможности зарегистрироваться и редактировать свои посты ) На всякий случай залил папку с необходимыми файлами ... может вы сможете найти ошибку(. http://rghost.ru/40233222
Rio-Shaman, 07 Сентября 2012 г. 19:01 пишет:
Автор
В index.php перетащите блок

//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "news";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "root";//Имя пользователя БД
$passUSER = "";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)

В самый вверх.
Ответ для пользователя: Юрий
Юрий, 07 Сентября 2012 г. 20:51 пишет:
Читатель
а как вы думаете, почему информация с базы данных не показывается? пишет в базе данных нет, хотя я добавлял материалы через базу ...
Rio-Shaman, 07 Сентября 2012 г. 21:13 пишет:
Автор
Скрипт пытается сделать выборку из базы данных к которой он еще не подключился. После не удачной попытке заполучить информацию у скрипта нет выхода как вывести Вам сообщение о том, что якобы в базе данных информации нет...
Ответ для пользователя: Юрий
Юрий, 07 Сентября 2012 г. 21:32 пишет:
Читатель
ммм...и что делать? Простите, я просто новичек в этом, и я пытаюсь понять суть проблемы и ее решение.
Хотелось также спросить про базу данных и таблиц в ней. Вот я создал одну базу данных, назвал ее news, в ней есть таблицы blog, news, menu. В файле index.php я пишу название таблицы news, а уже в каждом из скриптов указывать на конкретную таблицу, т.е. $result_index = mysql_query("SELECT * FROM blog ORDER BY id DESC LIMIT 10");, т.е. тут FROM blog и указывает из какой таблицы скрипт берет данные, правильно?

Если все так, значит подключение к базе быть должно по идеи ... но тогда что ему мешает выдать данные ...
Rio-Shaman, 07 Сентября 2012 г. 23:12 пишет:
Автор
Вы перенесли блок

//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "news";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "root";//Имя пользователя БД
$passUSER = "";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)

в самый вверх файла index.php?
Ответ для пользователя: Юрий
Юрий, 08 Сентября 2012 г. 00:05 пишет:
Читатель
Да) теперь все работает, спасибо))
но беда не закончилась(( с кодировкой теперь проблемы. В базе данных указан "cp1251_general_ci" на всех таблицах, файлы сохранены в данной кодировке, ANSI, но русские буквы показывает ????? * все указано на то что нужно поставить кирилицу, но он не ставит ... прочитал ваши статьи по смене кодировки - все сделал, не помогло (...
Rio-Shaman, 08 Сентября 2012 г. 01:21 пишет:
Автор
Попробуйте сразу после:
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
вставить вот такую строчку:
mysql_query("SET NAMES 'cp1251'");
Ответ для пользователя: Юрий
Юрий, 08 Сентября 2012 г. 07:40 пишет:
Читатель
Вставил, все равно не работает( хотя слова "автор", "читать дальше" на русском, а вот текст из базы данных нет ... в браузере пробовал меня в свойства - вид - кодиовка - 'cp1251', автовыбор - все равно знаки вопрса ... хм ...
Rio-Shaman, 08 Сентября 2012 г. 12:49 пишет:
Автор
Попробуйте положить в корень Вашего блога вот этот файл
http://rio-shaman.ru/download/download_1248152925.rar
Если и это не поможет, то я не знаю что еще сделать =(
Ответ для пользователя: Юрий
Юрий, 08 Сентября 2012 г. 22:11 пишет:
Читатель
Фуф ... наконец-то ... пересоздал таблицы, изменил кодировку базы данных в файле my.ini в денвере...сейчас все нормально. Да уж, интересно что будет на хосте))...спасибо!
Alex, 22 Сентября 2012 г. 12:55 пишет:
Гость
Да вы что ребята!!!
1. mysql_fetch_array без соответствующего флага???!! Здесь уж лучше mysql_fetch_assoc применить! Он хоть только один массив возьмёт, а не два, как предыдущий.
2. do...while - эта конструкция вообще ну в оооочень редких случаях должна применяться! - Это в любом учебнике написано. Достаточно здесь while или foreach взять (кстати второй как раз для массивов). И код раза в 2 уменьшится.
3. "//Замены идентификаторов на переменные из базы данных " хорошо хоть что их тут только 5. Не проще вставить сам код news.html и просто пробежаться циклом с заменой данных???

FALCON, 29 Октября 2012 г. 22:03 пишет:
Гость
А где здесь строка, которая отвечает за вывод полного текста, после нажатия на ЧИТАТЬ ДАЛЬШЕ ?
Заранее спасибо!
Rio-Shaman, 30 Октября 2012 г. 10:50 пишет:
Автор
О выводе полного текста статьи читайте вот на этой странице:
http://rio-shaman.ru/index.php?blog=39
Ответ для пользователя: FALCON
FALCON, 30 Октября 2012 г. 23:42 пишет:
Гость
Аа, спасибо, а то я уж сам начал тут пытаться))
Ответ для пользователя: Rio-Shaman
foozzi, 11 Ноября 2012 г. 02:17 пишет:
Читатель
Если поставить режим отладки, то можно увидеть море ошибок, а самое главное:
Notice: Undefined variable: news in /moduls/news.php
то есть переменная в которую склеивается весь код, не определена...
bet, 28 Октября 2013 г. 21:40 пишет:
Гость
Удалите эту статью.
Такого количества косяков и уязвимостей нет нигде больше.
Алексей, 28 Октября 2013 г. 21:49 пишет:
Автор
Так ведь код не для сайта форт нокс :-D
Ответ для пользователя: bet
bet, 28 Октября 2013 г. 23:32 пишет:
Гость
Ну не знаю, сейчас увидел этот код в SVN, волосы дыбом встали.

Вместо
$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("\'","&#039",$id_comm);
$txt_comm = str_replace("\'","&#039",$txt_comm);
$author_comm = str_replace("\'","&#039",$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
Ответ для пользователя: Алексей
Алексей, 29 Октября 2013 г. 00:10 пишет:
Автор
Никто не спорит, что у моих примеров очень много всего не хорошего. Я не однократно говорил, что код не совершенен, и, что писал все это в блог не для того что бы научить, а для себя самого. Кому интересно, читают, повторяют, а после понимают, что код далек не идеален.
Данный движок лишь одна из моих (и моих читателей) ступеней в программирование, не более того.
Ну не знаю, сейчас увидел этот код в SVN, волосы дыбом встали.
Бывает =) честно говоря, сам пугаюсь когда вижу код своей предыдущий работы =) Но убирать данный материал, думаю лишнее, кто-то глядя на этот пример все же может чему-то научится. А если есть голова на плечах, то данная информация будет лишь стартом, а не эталоном
P.S. Но это лишь мое мнение про ценность материала на моем блоге.
Ответ для пользователя: bet
bet, 29 Октября 2013 г. 00:18 пишет:
Гость
Вы конечно все правильно написали, материала должно быть много и на разный уровень.
Сам регулярно смотрю информацию чуть ли не о каждой функции в официальной документации.
Мое мнение, что лучше изначально учиться правильно, долго переучиваться :(
Ответ для пользователя: Алексей
Алексей, 29 Октября 2013 г. 00:23 пишет:
Автор
На практике знаю, что учится сразу правильно писать, можно мозг сломать. (Не считая конечно если Вы получаете образование в данной области.) Это сейчас я понимаю как работают, например те же неймспейсы. С уровнем который у меня был год назад, я бы давно бросил попытки научится программировать.
Ну не знаю, сейчас увидел этот код в SVN, волосы дыбом встали.
Кстати, странно, что Вы нашли код в SVN. Я как бэ уже давно не веду работы по улучшению RS-BLOG'а
Ответ для пользователя: bet
bet, 29 Октября 2013 г. 00:33 пишет:
Гость
У себя в продакшн увидел :(
Ответ для пользователя: Алексей
Алексей, 29 Октября 2013 г. 13:40 пишет:
Автор
Чем Вы занимаетесь если не секрет?
Ответ для пользователя: bet
bet, 29 Октября 2013 г. 16:33 пишет:
Гость
Всем понемногу, сервера, программирование, проектирование, информационная безопасность.
В основном одним проектом http://nn-sp.ru/
Ответ для пользователя: Алексей
MAX, 31 Октября 2013 г. 18:14 пишет:
Читатель
Warning: mysql_query(): Access denied for user \'root\'@\'localhost\' (using password: NO) in /home/u371428401/public_html/moduls/news.php on line 4 Warning: mysql_query(): A link to the server could not be established in /home/u371428401/public_html/moduls/news.php on line 4 Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /home/u371428401/public_html/moduls/news.php on line 5 
вот такая ошибка что это базу прописываю правильно
Алексей, 31 Октября 2013 г. 21:25 пишет:
Автор
Однозначно проблема в БД. Если верить ошибке проблема в пароле.
У Вас имеется phpmyadmin? Припоминается подобная ошибка, когда mysql сервер определял, что создано два пользователя root. Такое происходило при не корректной переустановки mysql сервера.
Ответ для пользователя: MAX
MAX, 01 Ноября 2013 г. 12:03 пишет:
Читатель
и что теперь делать что корректирывать
Алексей, 01 Ноября 2013 г. 13:02 пишет:
Автор
Так у Вас есть phpmyadmin? Если есть зайдите на него. Если там такая же ошибка, то нужно думать в сторону сброса пароля у root. А если нет такой ошибки, то я не знаю в чем может быть проблема.
Ответ для пользователя: MAX
/nik\, 01 Ноября 2013 г. 23:43 пишет:
Гость
Спасибо вам за ваши статьи, можете подсказать как выводить не последние записи, а случайные?
Алексей, 02 Ноября 2013 г. 22:23 пишет:
Автор
На блоге есть статья по реализации модуля похожих постов. В этой статье описывается рандомный выбор заметок из категории. Можете взять данный пост на заметку
Ответ для пользователя: /nik\
Андрей, 16 Ноября 2013 г. 13:02 пишет:
Гость
Здравствуйте, не подскажете в чем дело, сайт на hostline.ru, создал поддомен главного сайта, поставил этот движок (данной статьи), а у меня белый экран :( пхп в поддомене включено.
Алексей, 17 Ноября 2013 г. 12:57 пишет:
Автор
Попробуйте у index.php, в самом вверху поставить вот эти две строчки:
error_reporting(E_ALL);
ini_set("display_errors", 1);
Думаю это поможет увидеть не белый экран, а ошибку.
Ответ для пользователя: Андрей
Alex Jobs, 08 Февраля 2014 г. 19:28 пишет:
Гость
А почему Вы не используете функцию file_get_contents()
Думаю такой код будет меньше и удобней, он выполняет сразу 2 функции file() и implode =)

$sm_read = file_get_contents("templates/news.html");


Если не прав, исправьте меня)
Алексей, 08 Февраля 2014 г. 22:41 пишет:
Автор
Если не прав, исправьте меня)
Вы правы. Когда писал код не знал про существование данной функции =)
Ответ для пользователя: Alex Jobs
Петр, 02 Апреля 2014 г. 22:10 пишет:
Гость
В файле menu.html в ссылке <a href="/index.php?page=add_content"> прямой слэш, на мой взгляд, является лишним.
Максим, 11 Мая 2014 г. 12:43 пишет:
Гость
Хотелось бы увидеть статью про "Связка категорий и рубрик"
и есть ли оно на сайте
alexeymeek, 13 Мая 2014 г. 04:40 пишет:
Гость
...по окончании процедур, описанных в данной статье, тестирую проект, (в БД записей нет) получаю пустую страничку ("Нет записей в базе данных"), пока все нормально, однако в самом верху странички (Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in Z:\сервер\наш блог\www\moduls\news.php on line 5)... что сие означает?
Алексей, 13 Мая 2014 г. 08:36 пишет:
Автор
Что передаваемый параметр в функцию mysql_fetch_array() не является ресурсом (функция mysql_query вернула булевый результат, а не ресурс, как ожидалось). Такое происходит, обычно, из за неверно составленного запроса. Ну или каких либо проблем с БД.
Ответ для пользователя: alexeymeek
Михаил, 17 Августа 2014 г. 20:20 пишет:
Гость
Алексей, подскажите пожалуйста по БД (я создал БД и таблицу но ничего не отображается), после того как я поставил сайт на хостинг, строчка $host = "localhost"; должна поменяться? если да, то что надо написать вместо localhost
Алексей, 01 Сентября 2014 г. 16:26 пишет:
Автор
В большинстве случаев у хостера БД лежит на той же машине что и сервер, поэтому переменная host должна иметь значение localhost (Повторюсь, в большинстве случаев)
Ответ для пользователя: Михаил
CrazyUser, 27 Ноября 2014 г. 16:58 пишет:
Читатель
$news .= $edd_tamp; - это же получается не объявленная переменная? её не надо через IsSet?
Илнур, 08 Января 2015 г. 22:21 пишет:
Гость
Доброго времени всем!
Короче ребята запарился я с этой кодировкой что не сделаешь "краказябры" з....... честно говоря.
Решил я эту проблему сохраняю все в utf-8 все норм работает и не надо не где проставлять windows-1251 час на сколько мне известно везде по умолчанию utf-8 идет. Да и Notepad++ и NetBeans тоже с utf-8 работают лично у меня так не знаю у кого как.
Только что ради интереса создал на Денвере еще один проект, помимо того над которым работаю, все сохранил в utf-8, все отлично все норм работает не каких "краказябр".
Так как я решил эту проблему, просто создал в директорий проекта на котором работаю, файл .htaccess он так и называется без всякого расширения (вдруг если кто не знает, то есть и название и расширение .htaccess) и прописал следующие строки (вдруг если опять кто не знает) :
AddDefaultCharset UTF-8
Так что вот так ребята может кому поможет.
Удачи Всем и спасибо ОГРОМНОЕ Алексею!
Илнур, 08 Января 2015 г. 22:38 пишет:
Гость
Алексей!
Вот все выводит отлично, но в конце страницы, то есть в самом низу пишет:
Fatal error: Cannot redeclare index_page() (previously declared in Z:\home\moi.loc\www\moduls\news.php:2) in Z:\home\moi.loc\www\moduls\news.php on line 33
ругается на строку 33
<?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]);//идентификатор в тексте показывающий, 
//что после него следует вывести кнопку "читать дальше"
$end=$myrow_index[text];
$data=substr_replace($end,"...[end]",125,0);//вставляем в строку "...[end]" после 125 символа
$text = explode("[end]",$data);//Ищем идентификатор в тексте показывающий, 
//Замены идентификаторов на переменные из базы данных
$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 код
}
?>
че за проблема может быть.
Спасибо за ранее.
alisher, 27 Июля 2015 г. 04:23 пишет:
Гость
при добавление поста выдаёт "Warning: Cannot modify header information - headers already sent by (output started at Z:\home\bd.uz\www\index.php:10) in Z:\home\bd.uz\www\index.php on line 25" при кодировке utf-8, при обновлении страницы список постов отображается. При кодировке ansi ошибки не выдаёт но не работает с рус текстом
Алексей, 27 Июля 2015 г. 21:26 пишет:
Автор
Так у Вас файл в UTF-8? Наверное UTF-8 с BOM. Пере сохраните файл без BOM
Ответ для пользователя: alisher
Влад, 29 Июля 2015 г. 07:53 пишет:
Читатель
Помогите, у меня с кодировкой что-то не так((
http://savepic.ru/7704972.png

как настроить правильно кодировку?
Алексей, 30 Июля 2015 г. 10:45 пишет:
Автор
У Вас база скорее всего в кодировки UTF-8. Попробуйте сразу после строк
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "blog";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "root";//Имя пользователя БД
$passUSER = "";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));	
написать вот это
mysql_query("SET NAMES 'cp1251'");
mysql_query("SET CHARACTER SET 'cp1251'");
Ответ для пользователя: Влад
Влад, 30 Июля 2015 г. 16:29 пишет:
Читатель
Помогло, только для меню, а новости так и остались.((
Ответ для пользователя: Алексей
Алексей, 30 Июля 2015 г. 17:31 пишет:
Автор
Почитайте вот этот комментарий. Может поможет
Ответ для пользователя: Влад
Алексей, 30 Июля 2015 г. 19:30 пишет:
Автор
если и комментарий не помог попробуйте в index.php в верху вставить вот такую строчку
ini_set('default_charset',  'cp1251');
Ответ для пользователя: Влад
Влад, 30 Июля 2015 г. 19:44 пишет:
Читатель
нет( может дело в phpmyadmin ?
Ответ для пользователя: Алексей
Алексей, 30 Июля 2015 г. 19:59 пишет:
Автор
на вашем скриншоте видно, что коракозябры именно из БД.
Ответ для пользователя: Влад
Вася, 04 Октября 2015 г. 23:54 пишет:
Гость

Привет автор. Ты мудак, и вот 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]?> использовал

Алексей, 05 Октября 2015 г. 00:15 пишет:
Автор
Жаль, что Вы высказываетесь в такой грубой форме, но критика вполне уместная. Да mysql устарел, про file_get_contents не слышал и подход в корне неверный.
Ответ для пользователя: Вася
Саня, 21 Ноября 2015 г. 22:28 пишет:
Гость
Как переделать вывод циклом массива из MySQL в MySQLi ???
Саня, 21 Ноября 2015 г. 22:40 пишет:
Гость
Уже не нужно, сам поплясал с бубном и разобрался
Ответ для пользователя: Саня
Павел, 10 Января 2016 г. 22:43 пишет:
Гость
Здравствуйте, Алексей. Какое-то непонятное условие в цикле do while. Как понимать условие while($myrow_index = mysql_fetch_array($result_index)); Весь код склеивается в переменную $news, как она соизмеряется с вышеприведенным условием.
Алексей, 11 Января 2016 г. 10:39 пишет:
Автор
Вы не понимаете как работает условие?
while($myrow_index = mysql_fetch_array($result_index));
Ответ для пользователя: Павел
Павел, 11 Января 2016 г. 11:44 пишет:
Гость

Да, непонятно как работает это услове.В разделе : Часть 2 - Получаем начальные навыки php, уроки php вы приводите пример цикла do while.
Пример:

<?php
$a=0;
do {
    $a = $a + 1;
    echo $a . "";
}
while($a<100);
?>

Тут все ясно, цикл повторяется пока $a меньше 100. В модуле news.php в качестве условия цикла приводится присвоение переменной $myrow_index значения mysql_fetch_array($htpekmn_index)); Конечным результатом цикла будет значение в переменной $news — это строка, как она соотносится с условием?

Алексей, 11 Января 2016 г. 12:12 пишет:
Автор
это строка, как она соотносится с условием?
Никак. Цикл будет продолжаться пока переменная $myrow_index принимает значение отличное от FALSE (ну то есть все что угодно, но только не false).
Функция mysql_fetch_array возвращает (из ресурса $result_index который содержит ряды выборки из БД) ассоциативный и/или численный массив. Как только ряды выборки заканчиваются, функция выдает FALSE, что приводит к остановке цикла.
Ответ для пользователя: Павел
Павел, 11 Января 2016 г. 15:11 пишет:
Гость
Алексей, правильно я вас понимаю, что если в базе данных в таблице blog только один пост/ одна запись/ , то цикл do while состоится один только раз при замене [_text], [_title], [_id], [_author], [_date_b] на $text[0], $myrow_index[title], $myrow_index[id], $myrow_index[author], $myrow_index[date_b]?
Алексей, 11 Января 2016 г. 15:15 пишет:
Автор
Да, будет произведена только одна (стартовая) итерация (один шаг) цикла
Ответ для пользователя: Павел
Алекс, 04 Февраля 2016 г. 20:55 пишет:
Читатель
"Индификатор", серьёзно? =)
Алексей, 04 Февраля 2016 г. 21:11 пишет:
Автор
я что-то не понял шутку...
Ответ для пользователя: Алекс
Юрий, 15 Апреля 2016 г. 21:08 пишет:
Гость

У меня к вам вопрос:
А можно заменить:

//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)
$nameDB = "blog";//Название БД
$nameSERVER = "localhost";//Сервер
$nameUSER = "root";//Имя пользователя БД
$passUSER = "";//Пароль пользователя БД
mysql_select_db($nameDB, mysql_connect($nameSERVER,$nameUSER,$passUSER));
//ПОДКЛЮЧЕНИЕ К БАЗЕ ДАННЫХ (БД)

на:

include("config.php")

а в файле конфиг прописать все процедуры подключения?
просто я новичок в этом деле а везде встречал именно файл конфигурации

Алексей, 16 Апреля 2016 г. 10:28 пишет:
Автор
Да, можно. Я бы даже сказал нужно
Ответ для пользователя: Юрий
Алексей, 05 Февраля 2017 г. 23:36 пишет:
Гость
У меня вот какой вопрос: а как мне сделать так, чтобы вывести над всеми новостями какую-то фразу или предложение один раз? Просто я попытался поместить фразу перед самим циклом и в итоге она у меня просто выводится в верхнем левом углу, словно вовсе не попадает в переменную $txt.