ФорумПрограммированиеPHP для идиотов → Управление новостями - заголовок новости и текст новости

Управление новостями - заголовок новости и текст новости

  • ak1981

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 1 ноября 2009 г. 14:26

    Может кто подскажет какие варианты есть для вывода полного текста новости при щелчке на заголовке.Вот скрипт:



    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

    <html>
    <head>
    <title>Система управления новостями</title>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <link href="style.css" rel="stylesheet" type=text/css>
    </head>

    <!– background="fon.gif" –>
    <body bgcolor="#ffffff" topmargin="0" leftmargin="0" marginwidth="0" marginheight="0" bottommargin="0" rightmargin="0">

    <?php
    $conn = mysql_connect("localhost", "newsadmin", "newsadmin") or die(mysql_error());
    $db = mysql_select_db("news",$conn) or die(mysql_error());
    mysql_query(" SET CHARSET cp1251 ");

    $nums = 10;

    if (isset($_GET['page'])) { $page = intval($_GET['page']); }
    else { $page = 1; }

    $query = "SELECT COUNT(*) AS counter FROM news";
    $sql = mysql_query($query,$conn) or die(mysql_error());
    $row = mysql_fetch_assoc($sql);

    $elements = $row['counter'];

    $pages = ceil($elements/$nums);

    if ($page < 1) { $page = 1; }
    elseif ($page > $pages) { $page = $pages; }

    $start = ($page-1)*$nums;

    // если в таблице нет записей
    if ($start < 0) $start = 0;

    $query = "SELECT * FROM news ORDER BY hotnews DESC,date DESC LIMIT {$start}, {$nums}";
    $sql = mysql_query($query,$conn) or die(mysql_error());

    echo"<table name='outer' height='100%' width='100%' border='0' cellspacing='0' cellpadding='10'>";
    echo"<tr height='40px'><td colspan='3' ></td><tr/>";
    echo"<tr>";
    echo"<td width='10%' align='left'></td>";
    echo"<td width='80%' align='left' valign='top'>";

    echo"<table name='inner_text' width='100%' height='80%' border='0' cellspacing='0' cellpadding='5'>";
    echo"<tr>";
    echo"<td width='100%' height='50' align='left' class= 'navigation'>
    <a href='index.php'>Новости</a>
    <a href='index.php'>Настройки</a>
    </td>";
    echo"</tr>";
    $fulltext = 0;
    $info = '';
    while ($row = mysql_fetch_assoc($sql))
    {
    // выводим новости из базы
    $id = $row['id'];
    $daten = $row['date'];
    $head = $row['head'];
    $text = $row['text'];
    $image = $row['image'];
    $hotnews = $row['hotnews'];
    echo"<tr>";
    $info = "<td width='100%' align='left' class= 'fonts' valign='top'>";
    if ($hotnews == 1 ) { $info .= "<tc1>$daten:&nbsp;&nbsp;</tc1>"
    . $head . "<a href='readnews.php'>&nbsp;читать</a></td>";
    }
    elseif ($hotnews == 0 ) { $info .= "<tc>$daten:&nbsp;&nbsp;</tc>"
    . $head . "<a href='readnews.php'>&nbsp;читать</a></td>";
    }
    //if (isset($_GET['fulltext']) AND $fulltext == 0){ $info .= "<br><text>$text</text>"; }
    echo $info;
    echo"</tr>";
    }
    echo"</table>";
    echo"<table name='inner_pages' width='100%' height='20%' border='0' cellspacing='0' cellpadding='5'>";
    echo"<tr>";
    echo"<td width='100%' height='80%' align='left' valign='bottom' class= 'navigation'>";
    echo"<pg>Страницы:&nbsp;</pg>";
    // выводим количество страниц
    for ($i=1; $i<=$pages; $i++)
    {
    if ($i != $page) { echo " <a href='?page=" . $i . "'>" . $i . "</a> "; }
    // выбранная страница
    //else { echo " <b>" . $i . "</b> "; }
    else { echo " <span>" . $i . "</span> "; }
    }
    echo"</td>";
    echo"</tr>";
    echo"<tr>";
    echo"<td height='20%' class= 'fonts' align='left' valign='bottom'>
    <copyright>Мини-система управления новостями</copyright>
    </td>";
    echo"</tr>";
    echo"</table>";

    echo"</td>";
    echo"<td width='10%' align='left'></td>";
    echo"</tr>";
    echo"<tr height='20px'><td colspan='3'></td><tr/>";
    echo"</table>";

    ?>

    </body>
    </html>


  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 1 ноября 2009 г. 14:34, спустя 7 минут 44 секунды

    в смысле?
  • ak1981

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 1 ноября 2009 г. 14:46, спустя 12 минут 2 секунды

    я из базы получаю заголовки новостей ($row['head']),вывожу их все (с разбиением по страницам) и нужно при щелчке на конкретный заголовок новости выводить полный текст этой новости ($row['text']).желательно на этой же странице.какие варианты есть это сделать - ?
    Спустя 295 сек.
    я наверное не очень четко ставлю вопрос - но блин что-то я не догоняю как его правильно сформулировать,примерно понимаю что надо использовать наверное get и post или что др. но как конкретно - хз.
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 1 ноября 2009 г. 14:48, спустя 1 минуту 54 секунды

    а зачем выводить их на этой же странице ?

    п.с. А вариантов много… все зависит от того, что тебе нужно + от того, какую структуру хочется/можно получить согласно задумки автора.
    п.с.2 Такой кусок ненужного кода ни я ни кто другой смотреть не будет, так как и без тебя насмотреться успевают. Если есть конкретные вопросы по конкретному куску кода или конкретной задаче, то да вопрос - поможем. А в куске говна искать изюминку никто не хочет :)
    Спустя 71 сек.
    ak1981, передавай ГЕТом АйДишку выбранной/кликнутой новости, и при построении страницы выбирай из базы всю информацию именно по этой новости.
  • ak1981

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 1 ноября 2009 г. 14:56, спустя 7 минут 42 секунды

    я первый пост на форуме запостил :) такой кусок кода у вас считается большим ? просто на будущее знать,может ещё надо будет что запостить.
  • ak1981

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 1 ноября 2009 г. 15:07, спустя 11 минут 39 секунд

    ak1981, передавай ГЕТом АйДишку выбранной/кликнутой новости, и при построении страницы выбирай из базы всю информацию именно по этой новости.

    если так делать - то видимо будет на странице только вся инфа по новости с переданной айдишкой т.е. одна новость на странице (по крайней мере я так себе это представляю),а хотелось бы чтобы отстался список заголовков новостей и "развернутая" новость по которой кликнули - ну типа как бывает например список сайтов по категориям,возле названия категории + и когда по нему кликаешь - выводятся подкатегории.
  • ak1981

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 1 ноября 2009 г. 15:38, спустя 30 минут 15 секунд

    п.с.2 Такой кусок ненужного кода ни я ни кто другой смотреть не будет…

    конкретный кусок кода:



    $query = "SELECT * FROM news ORDER BY hotnews DESC,date DESC LIMIT {$start}, {$nums}";

    $info = "<td width='100%' align='left' class= 'fonts' valign='top'>";
    if ($hotnews == 1 ) { $info .= "<tc1>$daten:&nbsp;&nbsp;</tc1>" . $head . "<a href='readnews.php'>&nbsp;читать</a></td>"; }
    elseif ($hotnews == 0 ) { $info .= "<tc>$daten:&nbsp;&nbsp;</tc>" . $head . "<a href='readnews.php'>&nbsp;читать</a></td>"; }
    echo $info;


    это я пробовал сделать с выводом текста новости на другой странице href='readnews.php'.там практически идентичный скрипт,за исключением:



    $query = "SELECT * FROM news WHERE id = 29";

    $info = "<td width='100%' align='left' class= 'fonts' valign='top'>";
    if ($hotnews == 1 ) { $info .= "<tc1>$daten:</tc1> <a1>" . $head . "</a1>"; }
    elseif ($hotnews == 0 ) { $info .= "<tc>$daten:</tc> <a1>" . $head . "</a1>"; }
    $info .= "<br><text>$text</text></td>";
    echo $info;


    вот в этот запрос получается мне и надо передать id с помощью ГЕТа - не знаю как.и есчё получается что у меня будет два практически одинаковых скрипта,
    вот и вопрос как это все сделать в одном скрипте если возможно.
  • smv

    Сообщения: 236 Репутация: N Группа: Кто попало

    Spritz 1 ноября 2009 г. 23:55, спустя 8 часов 16 минут 52 секунды

    Вывод новостей мне тоже кажется надо делать через переменную GET. А вот что бы они выводились все на одной страницы и другие категории тоже оставалсись, то как мне кажется есть два варианта.

    1. Выводиш новость на новой странице. Но и на туже новую страницу заосвываеш заголовки других новостей… Точно также пишеш запрос в БД и вставляеш.

    2. Вариант с развертыванием… тут новости будеш выводить в таблице.

    Примерно вот так.

    Запрос на вывод новостей:

    $query = "SELECT * FROM news";
    $result = mysql_query($query);


    А табличку с новостями будеш выводить так:

    while ($row = mysql_fetch_array($result))
    {  
    Здесь таблица.

    При щелчке по ссылке "Подробнее" будет передаваться переменная read.

    If ($_GET['read']== какой нибудь уникальный идентификатор, например тот же id){
    Делаем проверку
    Выводим полный текст новости
    }

    }



    Вот так можно попробовать… Идея в этом мне кажется есть… подумаеш, может что нибудь придумаеш
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 2 ноября 2009 г. 0:02, спустя 7 минут 10 секунд


    ak1981, передавай ГЕТом АйДишку выбранной/кликнутой новости, и при построении страницы выбирай из базы всю информацию именно по этой новости.

    если так делать - то видимо будет на странице только вся инфа по новости с переданной айдишкой т.е. одна новость на странице (по крайней мере я так себе это представляю),а хотелось бы чтобы отстался список заголовков новостей и "развернутая" новость по которой кликнули - ну типа как бывает например список сайтов по категориям,возле названия категории + и когда по нему кликаешь - выводятся подкатегории.

    примеры ajax сто раз уже расписывалось… если включишь мозг и прочитаешь , то это то что тебе нужно )
    PS если грубо извиняюсь заранее… всю ночь не спал )))) бывает )
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 2 ноября 2009 г. 14:14, спустя 14 часов 12 минут 21 секунду

    Если Аякс, то тут не ко мне. А вот если просто среди списка сделать отображение полной новости, то элементарно - запросом вытаскиваешь все заголовки и АйДишки новостей (как обічно) + вторым запросом тут же тащишь инфу о полной новости. И когда в цикле выводишь заголовки, то делаешь проверку на АйДи выводимого заголовка (новости) и того АйДи, который у тебя в ГЕТе будет (требуемая к полному отображению новость): если совпали, то выводить в данной итерации цикла все данные об этой новости (получается полную новость), а далее (в последующих итерациях) просто выводишь оставшиеся заголовки новостей.

    $query = "SELECT * FROM news ORDER BY hotnews DESC,date DESC LIMIT {$start}, {$nums}";

    Если ты так делаешь, то:
    1. Тогда не нужно делать второй запрос, так как полные данные о новости уже "вытянуты" этим запросом
    2. Это неправильно: нужно выбирать только те данные, которые тебе таки нужны для построения списка заголовков-ссылок, а именно: id (каждой из выбраных новостей), title (заголовок новости), short_text (возможно короткий текст тоже нужен). Но ВСЕ данные обо ВСЕХ новостях тянуть НЕ нужно. Для этого таки лучше два запроса делать.
    Итого, в твоем случае нужно сделать примерно так:

    $query = "SELECT id, title, short_text FROM news ORDER BY hotnews DESC,date DESC LIMIT {$start}, {$nums}";
    $query2 = "SELECT full_text FROM news WHERE id=$_GET['id'];

    Далее пробуй сам. Скажешь что понял, что получилось, чего не получилось.
  • ak1981

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 2 ноября 2009 г. 17:03, спустя 2 часа 48 минут 29 секунд



    Вот так можно попробовать… Идея в этом мне кажется есть… подумаеш, может что нибудь придумаеш


    я что-то похожее пробовал делать - чегой-то не получилось :)
    Спустя 173 сек.

    примеры ajax сто раз уже расписывалось… если включишь мозг и прочитаешь , то это то что тебе нужно )

    да я про ajax и всякие другие js догадывался что их здесь можно прицепить,но т.к. с ними не дружу то и не буду пока юзать
    Спустя 98 сек.

    PS … всю ночь не спал )))) бывает )

    судя по твоей аватаре ты боишься замерзнуть :)
  • ak1981

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 2 ноября 2009 г. 17:12, спустя 9 минут 40 секунд


    … Но ВСЕ данные обо ВСЕХ новостях тянуть НЕ нужно. Для этого таки лучше два запроса делать.

    согласен что лишнее тянут не надо,но в таблице только 5 полей - и тянуть то нечего,кроме что BLOB поля с картинкой,его наверно не стоит тянуть
  • ak1981

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 2 ноября 2009 г. 17:38, спустя 25 минут 53 секунды


    … И когда в цикле выводишь заголовки, то делаешь проверку на АйДи выводимого заголовка (новости) и того АйДи, который у тебя в ГЕТе будет (требуемая к полному отображению новость): если совпали, то выводить в данной итерации цикла все данные об этой новости (получается полную новость), а далее (в последующих итерациях) просто выводишь оставшиеся заголовки новостей.

    я в принципе то получаю уже что нужно (список заголовков новостей и одну с полным текстом новости по нужному АйДи),но только подставляя АйДи "вручную".не понимаю принципа работы всех этих глобальных переменных - и проблема передать нужный АйДи чтобы его потом проверять.сейчас у меня 2 скрипта - index.php и readnews.php. в index.php я вывожу список заголовков новостей и потом при клике на читать нужного заголовка
    ("<a href='readnews.php?page=".$page."&id_read=".$id_read."'>&nbsp;читать</a> ) перехожу в readnews.php.собственно если я загоню нужный АйДи в $id_read то вопрос будет исчерпан.я вот чего не догоняю:
    1. я в цикле прохожу по всем записям таблицы (в index.php) - ГЕТ на каждой итерации будет меняться в соответствии с текущей записью и при выходе из цикла будет содержать значения последней прочитанной записи или в ГЕТе будет массив со всеми записями ?
    2. когда перехожу по ссылке в readnews.php - в ГЕТе будут значения установленные в index.php или будут пустые переменные ?
  • ak1981

    Сообщения: 10 Репутация: N Группа: Кто попало

    Spritz 7 ноября 2009 г. 13:25, спустя 4 дня 19 часов 46 минут

    спасибо
    ,
    ,
    за помощь.сделал что хотел (айдишник ГЕТом передаю),единстсвенное что получилось 2 скрипта (наверняка можно все в один запыхнуть),но пока сойдет.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!