ФорумПрограммированиеПыхнуть хотите?F.A.Q. → Cвоя новостная лента на PHP + mysql

Cвоя новостная лента на PHP + mysql

  • nwuno

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

    Spritz 14 ноября 2007 г. 4:21

    Автор: Darkmaster
    Взято с: http://www.pcnext.ru/


    Что объединяет все информационные сайты? Что обязательно присутствует на главной странице? Если вы подумали о новостях, то оказались правы! Сегодня мы с вами разберемся как раз в том, как сделать собственную новостную ленту с админкой и защитой на php. Заранее скажу, что дело это совсем не сложное, но и не двухминутное, так что запаситесь всем, что вам нужно (пивом, колой, соком, чипсами…) и вперед! Для начала продумаем структуру новостной ленты. Безусловно, мы будем использовать mysql, а как же без него! В mysql-базе, которую назовем mynews, будут храниться данные. Какие? Cейчас объясню. Разместим в базе mynews таблицу под названием news. А в таблице - вот что:

    News_id - MediumInt длина 9 AutoIncrement, это будет primary key.
    Ntext - текст новости, тип Text.
    Ntitle - заголовок новости, тип varchar, длина 255
    Ndate - это дата, varchar, длина 255
    Nuser - а это имя автора новости, varchar, длина 255.

    Как все это создать? Почитайте предыдущие тексты на этом сайте, там есть вся необходимая информация. А от себя могу посоветовать отличную, очень удобную программу Mysql-Front, в которой все таблицы создаются визуально. Но идем дальше. Теперь разберемся в том, какие скрипты нужно написать. Я предлагаю написать следующие: admin.php, сreatenews.php (этот скрипт и будет создавать новость), tnews.php (будет отображать новость). Можно было написать скрипт и для удаления новостей, но это вы сможете сделать и сами после выполнения упражнения. Итак, начнем. Для начала напишем скрипт createnews.php. В нем пока будет мало понятного, но все станет на свои места после того, как вы посмотрите на листинг admin.php.

    Листинг 1. Createnews.php

    <?
    $server="localhost";
    $user="";
    $pass="";
    $DB="mynews";
    $ntitle=$title;
    $ntext=$newstext;
    $nuser=$user;
    $now = date(" H : i : s d - m - Y "); // дата будет выводиться в формате "время, дата"
    mysql_connect($server,$user,$pass) or die("Нет коннекта!");
    mysql_select_db($DB);
    mysql_query("Insert INTO news(ntitle,ntext,ndate,nuser) VALUES('".addslashes($ntitle)."','".addslashes($ntext)."','".addslashes($now)."',
    '".addslashes($nuser)."')");
    mysql_close();
    echo "Новость добавлена!";
    ?>


    '". addslashes ($ ntitle )."' // эта строка нужна для того, чтобы в заголовке правильно отображались кавычки. 


    Как видите, вместо mysql-даты используется varchar, так проще. Теперь, чтобы все в рассмотренном скрипте встало на свои места, нужно написать админку. Напишем.

    Листинг 2. Admin.php

    <html>
    <head>
    <title>Добавление новостей</title>
    </head>
    <body>
    <h3>Добавление новостей</h3>
    <form action="createnews.php" method="POST">
    Заголовок новости: <input type="text" Size=70 name="title"><br>
    Ваше имя: <input type="text" Size=50 name"user"><br>
    Текст <textarea name="newstext" cols=60 rows=6>
    </textarea>
    <br><br>
    <CENTER>
    <input type="Submit" Value="Ok">
    <input type="reset" Value=" Очистить ">
    </CENTER>
    </form>
    </body>
    </html>


    Очевидно, используется простая html форма. Так зачем же создавать php-скрипт? Затем, что мы совершенно не подумали о безопасности. Безопасность админки можно обеспечить, запретив доступ случайным пользователям, не знающим логин и пароль. Злоумышленник сможет узнать пароль только тогда (и не раньше), когда получит доступ к скрипту, т.е. к директории. Измените admin.php следующим образом:

    Листинг 3. Модифицированный admin.php

    <?
    $itog_usr = 'ваш логин';
    $itog_pass = 'ваш пароль';
    $_GET[$usr];
    $_GET[$pass];
    if (($usr != '') and ($pass != '')):
    {
    if (($usr != $itog_usr) or ($pass != $itog_pass)):
    {
    die("Неверное имя пользователя или пароль");
    }
    else:
    {
    echo "Авторизация прошла удачно";
    ?>
    <html>
    <head>
    <title>Добавление новостей</title>
    </head>
    <body>
    <h3>Добавление новостей</h3>
    <form action="createnews.php" method="POST">
    Заголовок новости: <input type="text" Size=70 name="title"><br>
    Ваше имя: <input type="text" Size=50 name"user"><br>
    Текст <textarea name="newstext" cols=60 rows=6>
    </textarea>
    <br><br>
    <CENTER>
    <input type="Submit" Value="Ok">
    <input type="reset" Value=" Очистить ">
    </CENTER>
    </form>
    </body>
    </html>
    <?
    }
    endif;
    }
    else:
    {
    echo "<form method='post'>
    Login:<br>
    <input type='text' name='usr' value=''><br>
    Password:<br>
    <input type='password' name='pass' value=''><br>
    <input type='submit' value='LogIN'>
    </form>";
    }
    endif;
    ?>


    Давайте разберемся в написанном скрипте. В самом начале двум переменным присваиваются текущие логин и пароль, затем осуществляется проверка введенных. Если введенные данные содержат " (пусто), или не равны тем, что хранятся в переменных, выводится печальная для ][акера надпись "Неверное имя пользователя или пароль". В противном случае выводится "Авторизация прошла успешно" и идет html -код. В самом конце описана форма ввода.

    С админкой все. Теперь переходим к скрипту, который будет выводить новостную ленту.

    Листинг 4. tnews.php:

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    </head>
    <?
    $server="localhost";
    $user="darkmaster";
    $pass="";
    $DB="mynews";
    mysql_connect($server,$user,$pass) or die("Нет коннекта!");
    mysql_select_db($DB);
    $request= "SELECT ntext, ntitle, ndate, nuser FROM news ORDER BY news_id DESC LIMIT 15";
    $result=mysql_query($request);
    while($row=mysql_fetch_array($result)){
    echo "<table align=center width=98% border=0 cellpadding=3 cellspacing=1 bgcolor=#FDFEFF>";
    echo "<tr><td bgcolor=#FFFFFF>".$row['ntitle']." Дата ".$row['ndate']." Aiaaaee ".$row['nuser']."</td></tr>";
    echo "<tr><td bgcolor=#FFFFFF>".$row['ntext']."</td></tr>";
    echo "<tr><td bgcolor=#F4F4F4> </td></tr></table><br>";
    }
    ?>


    На что здесь следует обратить внимание? Во-первых, на запрос

    $request = "SELECT ntext , ntitle , ndate , nuser FROM news ORDER BY ndate DESC LIMIT 15"; 


    Здесь написано вот что: выводить новости, отсортированные по дате, причем на странице показывать только 15 первых новостей. Функция mysql _ fetch _ array ($ result ) возвращает массив, который записывается в переменную $ row . Для тех, кто не знает, что такое & nbsp, говорю: это свободное пространство. Все, что осталось сделать - вставить tnews в некоторую готовую страничку, например вот так:

    include("./tnews.php")

    Вот и все, что я хотел рассказать.
  • AlexB

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

    Spritz 14 ноября 2007 г. 4:36, спустя 14 минут 40 секунд

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

    Все же для визуального проектирования БД я бы рекомендовал специально предназначенные средства: PowerDesigner(мой выбор) или ErWin. А в клиентах типа Mysql-Front выполнять уже готовый срипт для создания БД и отлаживать запросы.

    Что касается собственно Mysql-Front - то этот действительно замечательный продукт, к сожалению, закончил свое развитие из-за конфликтов с MySQL AB … так что с выходом новых версий mysql видимо придется переориентироваться на другие клиенты.
  • adw0rd

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

    Spritz 14 ноября 2007 г. 5:29, спустя 52 минуты 46 секунд

    и защитой на php.

    о как круто то :)

    Почитал чуть дальше… ну это статья совсем для малышей… думал мож что интересное увижу…

    *******************************************************
    P.S. Патрик это боян, я с тобой согласен :)
    adw/0
  • adw0rd

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

    Spritz 14 ноября 2007 г. 5:31, спустя 2 минуты 44 секунды

    Что касается собственно Mysql-Front - то этот действительно замечательный продукт, к сожалению, закончил свое развитие из-за конфликтов с MySQL AB … так что с выходом новых версий mysql видимо придется переориентироваться на другие клиенты.


    Тоже его юзал, сейчас юзаю продукты от MySQl AB… но в большинстве случаев удобнее через phpMyAdmin
    adw/0
  • AlexB

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

    Spritz 14 ноября 2007 г. 5:48, спустя 16 минут 56 секунд


    но в большинстве случаев удобнее через phpMyAdmin

    Гмммммммм … конечно о вкусах не спорят, но на мой взгляд это архи-неудобно по сравнению с mysql-front.
  • adw0rd

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

    Spritz 14 ноября 2007 г. 6:02, спустя 13 минут 58 секунд



    но в большинстве случаев удобнее через phpMyAdmin

    Гмммммммм … конечно о вкусах не спорят, но на мой взгляд это архи-неудобно по сравнению с mysql-front.


    ты прав, кому что :)
    adw/0
  • pasha

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

    Spritz 20 ноября 2007 г. 7:57, спустя 6 дней 1 час 54 минуты

    (\_/)
    (
    )
    E[:]|||[:]э
    ('')_('')
  • java

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

    Spritz 20 ноября 2007 г. 8:43, спустя 46 минут 13 секунд

    Разве здесь не размещают собственный материал?

    (\_/)
    (
    )
    E[:]|||[:]э
    ('')_('')

    флудерам окромя албанского и флуда писать нечего
  • md5

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

    Spritz 20 ноября 2007 г. 12:41, спустя 3 часа 58 минут 13 секунд

    Разве здесь не размещают собственный материал?

    именно
    лучшее пойдёт в основной раздел статей
    все умрут, а я изумруд
  • java

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

    Spritz 21 ноября 2007 г. 1:24, спустя 12 часов 43 минуты 11 секунд


    Разве здесь не размещают собственный материал?

    именно

    Тогда почему уважаемый автор с#издил материал бог знает откуда?
  • vasa_c

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

    Spritz 21 ноября 2007 г. 1:27, спустя 2 минуты 30 секунд

    Автор поставил ссылку
  • java

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

    Spritz 21 ноября 2007 г. 1:28, спустя 1 минуту 1 секунду


    Разве здесь не размещают собственный материал?

    именно

    Значит не чужой,а свой надо,но если так хочет выложить ,то усть кидает в готовые решения
  • md5

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

    Spritz 21 ноября 2007 г. 1:29, спустя 37 секунд

    уважаемый автор посчитал, что это может быть полезным
    скоро откроем основной раздел /articles/ и здесь будем только цензурить
    все умрут, а я изумруд
  • AlexB

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

    Spritz 28 ноября 2007 г. 1:26, спустя 6 дней 23 часа 57 минут


    Что касается собственно Mysql-Front - то этот действительно замечательный продукт, к сожалению, закончил свое развитие из-за конфликтов с MySQL AB … так что с выходом новых версий mysql видимо придется переориентироваться на другие клиенты.


    Сейчас мне подсказали, что HeidiSQL подозрительно на него похож … во всяком случае на скриншоте
    http://www.veign.com/blog/2007/10/top-15-mysql-managers-and-tools.html
    Попробую сейчас заюзать … если это действительно продолжение развития фронта, то это есть очень гут! )))

    ———————————————-

    Скачал. Увы, некоторых фич нету. :( Похоже это одна из веток. Будем следить за развитием.
  • adw0rd

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

    Spritz 28 ноября 2007 г. 4:48, спустя 3 часа 22 минуты 48 секунд



    Что касается собственно Mysql-Front - то этот действительно замечательный продукт, к сожалению, закончил свое развитие из-за конфликтов с MySQL AB … так что с выходом новых версий mysql видимо придется переориентироваться на другие клиенты.


    Сейчас мне подсказали, что HeidiSQL подозрительно на него похож … во всяком случае на скриншоте
    http://www.veign.com/blog/2007/10/top-15-mysql-managers-and-tools.html
    Попробую сейчас заюзать … если это действительно продолжение развития фронта, то это есть очень гут! )))

    ———————————————-

    Скачал. Увы, некоторых фич нету. :( Похоже это одна из веток. Будем следить за развитием.


    Скачал вчера SQL-front - это типа потомок Mysql-Front'a… Есть русский языковой интерфейс

    Из минусов, НЕ МОГУ ЗАКОНЕКТИТСЯ К БАЗЕ :)) И часто падает просто так, работает-работае, хуАЯКС и упал :))
    Там три типа коннекта: прямой, через либу от MySQL Administrator (MySQL AB) и через пхп-тунель (прилагается к дистрибу).
    У меня заработала только через тунель… не могу понять почему…
    MySQL Administrator (MySQL AB) - работает нормально, Mysql-Front 2.5 тоже нормально…

    P.S. 2 AlexB, спасибо за ссылку :)
    adw/0

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