• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Вывод текста из базы даных.

  • Автор темы AurumZ
  • Дата начала
A

AurumZ

Есть проблемка: пишу новостную ленту при помощи PHP и MYSQL, и нужно вывести
в колонку последние новости. Одна новость включает в себя загаловок и сам текст новости.
Но требуется выводить не весь текст, а лишь небольшую часть, ограниченную Nным
колличеством символов. Подскажите чем можно воспользоваться?

P.S PHP только изучаю, и знаю не много, но решил написать небольшой движок
для сайта. Т.е с возможностью администрирования новостей и статей через
собственное меню, а так же авторизацией для пользователей.
 
A

AurumZ

Разобрался, надо использовать, например - substr($row['anews'],0,50) ... в этом случае
будет выводиться 50 символов от общего массива.
Но есть еще проблема:
когда использую вот этот цикл (чуть ниже), например для вывода загаловка,
то чтобы вывести скажем atitle я не могу поставить echo $row['atitle'] иначе выдает ошибку
типа: Notice: Undefined index: atitle ... но поставив $row[1] все выводит отлично, логики в этом никакой не вижу, так как atitle располагается в бд ни как не 1, а 3тьей, да и вообще, попытка вывести
скажем atext тоже ни к чему не приводит, даже если перебрать все цифры от 1
до 4(это колличество строк в бд, а именно - id_articles , atext, atitle, adate ).
Кто знает, в чем тут проблема?

цикл вывода загаловка:
while($row=mysql_fetch_row($result))
{
echo $row[1]
}


а вот часть кода:
$server = 'localhost';
$user = 'root';
$pass = '';
$db = 'cms';
mysql_connect($server, $user, $pass) or die('<b>Нет коннекта с бд.</b>');
mysql_select_db($db);
$request= "SELECT atext,atitle,adate FROM articles ORDER BY adate DESC LIMIT 5";
$result=mysql_query($request);
while($row=mysql_fetch_row($result))
{
echo "<tr>
<td height=\"25\">".$row[1]."<br></td>
</tr>";
}
 
A

Artexoid

1. По поводу вывода небольшой части текста.
Такой вид 'substr($row['anews'],0,50)' обрезания плох тем, что когда он обрежет текст, в конце останется кусок слова :(. Это некрасиво. Я решал эту проблему просто, брал и обрезал например не ровно 50 символов, а 50 + количество символов до первого (после 50-ти символов) пробела и у меня не оставалось никаких "ошметок". Но тут возникает другая проблема, если в том же тексте (который мы режим) всунуты html теги, возможно такое что скрипт порежет текст постеди тега (ему ведь всё равно какой пробел он нашёл) и получиться что-то такое: ...выдоила 500 коров и заработала <b>заработала (а тут скрипт обрезал). Получается что весь последующий текст будет под воздействием <b>. Вообще косяк :rolleyes:!

Поэтому я придумал еще один способ. По моему вообще очень удобно. Значит ввёл тег (например ) который вставляется в текст, т.е. некий индикатор короткого сообщения в тексте.

Пример:
Сегодня доярка выдоила 500 коров и <b>заработала 1000р</b>. Жители деревни были поражены усердию доярки ... (далее текст статьи).

Потом сделал обработчик тега. При полном выводе новости (при выводи всего текста) просто берём и вырезаем тег из текста перед выводом, при выводе "коротко" новости, выводим текст до тега. А в админке естественно выводим текст в оригинальном виде вместе с тегом :).

2. Вывод полей
Чтобы выводить так как вам нужно, воспользуйтесь не 'mysql_fetch_row', а 'mysql_fetch_array':
Код:
while($result_array=mysql_fetch_array($result));
{
echo $result_array['Имя поля'];
}
Еще можно например объекты использовать:
Код:
while($result_object=mysql_fetch_object($result));
{
echo $result_object->Имя_поля;
}
 
A

AurumD

Artexoid, спасибо, надо тоже попробывать такой метод обрезки, вот только мне кажется посетители не сильно на такие вещи внимание обращают :) А насчет вывода полей я тоже вчера допер)
Вначале на статью одну опирался вот - , и там ошибка в коде: вместо mysql_fetch_row, вот этот стоит mysql_fetch_array :) А может
специально такую обшибку сделали, чтобы люди думали :)
 
A

Artexoid

Для: AurumD

Почему. там правильно :). Наоборот, "mysql_fetch_row" - неудобная штука, чтобы создать массив из одной записи и ключами полей были именя полей, "mysql_fetch_array" использовать и нужно :) . С той статье именно так и сделано :) .
 
A

AurumD

А у меня не работает с mysql_fetch_array и mysql_fetch_row, когда в массиве например: $row['atitle'] , но работает, когда $row[1] ...
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!