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

Тема в разделе "PHP программирование", создана пользователем AurumZ, 29 апр 2007.

  1. AurumZ

    AurumZ Гость

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

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

    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>";
    }
     
  3. Artexoid

    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':
    Код (Text):
    while($result_array=mysql_fetch_array($result));
    {
    echo $result_array['Имя поля'];
    }
    Еще можно например объекты использовать:
    Код (Text):
    while($result_object=mysql_fetch_object($result));
    {
    echo $result_object->Имя_поля;
    }
     
  4. AurumD

    AurumD Гость

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

    Artexoid Гость

    Для: AurumD

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

    AurumD Гость

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

Поделиться этой страницей