Создаем простой сайт на php

Discussion in 'Статьи' started by banned, 20 Mar 2007.

  1. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Как создать простой сайт на php с использованием MySql базы данных?!
    Я расскажу вам :)

    Итак начнем...........

    Начало

    Для начала найдем хостинг с php и mysql (Лучше локалхост:) )

    Двигаемся дальше...........

    Создание БД

    Заходим в mysql...............Создаем бд с именем 'site'
    Пишем sql код:
    Code:
    CREATE TABLE `users` (
      `id` int(11) NOT NULL auto_increment,
      `name` varchar(30) collate utf8_unicode_ci NOT NULL,
      `pass` tinytext collate utf8_unicode_ci NOT NULL,
      `email` tinytext collate utf8_unicode_ci NOT NULL,
      `icq` int(9) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
    
    config.php

    Создаём файл config.php - здесь поместим код соединения к бд, логин, таблицу, пасс и прочее

    Например:
    PHP:
    <?php
      
    // Адрес сервера MySQL
      
    $dbhost "localhost";
      
    // Имя пользователя базы данных
      
    $dbuser "root";
      
    // и его пароль
      
    $dbpass "password";
      
    // Имя базы данных, на хостинге или локальной машине
      
    $dbname "site";

      
    $db = @mysql_connect($dbhost$dbuser$dbpass);
      if (!
    $db) {
        exit (
    "<P>Сервер базы данных не доступен</P>" );
      }
      if (!@
    mysql_select_db($dbname$db)) {
        exit( 
    "<P>База данных $dbname не доступна</P>" );
      }
    ?>
     
    #1 banned, 20 Mar 2007
    Last edited: 20 Mar 2007
  2. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    index.php

    Теперь создаём главную страницу сайта, а именно index.php.....

    PHP:
    <?php
    //Начинаем сессию
    session_start();
    ?>
    <html>
    <head><title>Главная страница</title></head>
    <body>
    <?php
    if(!session_is_registered('name')) {
    echo 
    "<a href='./register.php' title='Регистрация'>Регистрация</a><br /><hr />
    <a href='./enter.php' title='Войти'>Войти</a><br /><hr />"
    ;
    } else {
    echo 
    "Привет $_SESSION['name'] <br /><br /><a href='./enter.php?do=logout' title='Выход'>Выход</a><br /><hr />";
    }
    <
    a href='./users.php' title='Зарегистрированные пользователи'>Зарегистрированные пользователи</a><br />
    </
    body>
    </
    html>

    register.php

    Создаем страницу регистрации.....

    Давайте сделаем обязательные поля :
    name, pass, email
    и простое поле icq .......

    PHP:
    <html>
    <head><title>Регистрация</title></head>
    <body>
    <form method="post">
    <table>
    <tr><td>Имя*:</td></tr>
    <tr><td><input type="text" name="name" /></td></tr>
    <tr><td>Пароль*:<br /><input type="password" name="pass" /></td><td style="width: 20;">&nbsp;</td>
    <td>Повторите пароль*:<br /><input type="password" name="repass" /></td></tr>
    <tr><td>E-mail*:</td></tr>
    <tr><td><input type="text" name="email" /></td></tr>
    <tr><td>Icq:</td></tr>
    <tr><td><input type=text name="icq" maxlength="9" /></td></tr>
    <tr><td><input type="submit" title="Регистрация" name="reg" value="Регистрация" /></td></tr>
    </table>
    </form>
    <?php
    if($reg) {
    //Защищаемся от скули
    if (!get_magic_quotes_gpc()) {
          
    $_POST['name'] = mysql_escape_string($_POST['name']);
          
    $_POST['pass'] = mysql_escape_string($_POST['pass']);
          
    $_POST['repass'] = mysql_escape_string($_POST['repass']);
          
    $_POST['email'] = mysql_escape_string($_POST['email']);
          
    $_POST['icq'] = mysql_escape_string($_POST['icq']);
        } 
    // Проверяем, правильно ли заполнены обязательные поля
        
    if(empty($_POST['name']) && !isset($_POST['name']))
          exit (
    "Заполните поле 'Имя' ");
          if(empty(
    $_POST['pass']) && !isset($_POST['pass']))
          exit(
    "Заполните поле 'Пароль' ");
         if(empty(
    $_POST['repass']) && !isset($_POST['repass']))
          exit(
    "Заполните поле 'Повторите пароль' ");
          if(
    $_POST['pass'] != $_POST['repass'])
          exit(
    "Пароли не совпадают");
    //Проверяем введеные данные в форму
    if($_POST['icq']) {
      if(!
    is_numeric($_POST['icq']))
        exit(
    "ICQ состоит из цифр :)");
       if( 
    strlen($_POST['icq']) < || strlen($_POST['icq']) > 9)
        exit(
    "Поле 'ICQ' должно содержать от 5 до 9 символов");
    }
    // Проверяем email на соответствие
    if($_POST['email']) {
        if(!
    preg_match("|^[-0-9a-z_]+@[-0-9a-z_]+\.[a-z]{2,6}$|i"$_POST['email']))
          exit(
    "E-mail должен быть в формате '[email protected]' ");
    }
    //==========================================================================//
    // Устанавливаем соединение с базой данных
      
    require_once("config.php");
     
    // Проверяем, не было ли переданное имя зарегистрировано ранее
      
    $query "SELECT COUNT(*) FROM `users` WHERE name = '$_POST[name]'";
      
    $result mysql_query($query);
      if(!
    $result)  exit("Ошибка - ".mysql_error());
      if(
    mysql_num_rows($result) > 0) exit("Такое имя уже есть");
    //Выполняем sql запрос на регистрацию юзера
    $_POST['pass'] = md5($_POST['pass']);
      
    $query "INSERT INTO users VALUES(NULL, '$_POST[name]', '$_POST[pass]', '$_POST[email]', '$_POST[icq]')";
    //Если регистрация прошла успешно, то перенаправляем на главную страницу
    if(mysql_query($query)) {
        echo 
    "Регистрация успешно завершена";
        
    header("Location: index.php");
      } else {
          exit(
    "Ошибка при добавлении данных - ".mysql_error());
      }
    }
     
    #2 banned, 20 Mar 2007
    Last edited: 21 Mar 2007
  3. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    enter.php

    В этом файле разместим код авторизации пользователя
    PHP:
    <?php
    session_start
    ();
    ?>
    <form method='post'>
        Имя : <br /><input type='text' name='name' value='$_SESSION[name]' /><br /><br />
        Пароль : <br /><input type='password' name='password' value='$_SESSION[password]' /><br /><br />
        <input type='submit' value='Войти' title='Войти' />
    </form>
    <?php
    //Если поля не пустые, производим попытку входа
       
    if($_POST['name'] && $_POST['password']) {
        
    // Устанавливаем соединение с базой данных
        
    require_once("config.php");
    //Защищаемся от скули )
    if (!get_magic_quotes_gpc()) {
        
    $_POST['name'] = mysql_escape_string($_POST['name']);
        
    $_POST['password'] = mysql_escape_string($_POST['password']);
    } else {
        
    $_POST['name'] = addslashes($_POST['name']);
        
    $_POST['password'] = addslashes($_POST['password']);
    }
    //Заходим
        
    $_POST['password'] = md5($_POST['password']);
        
    $query "SELECT COUNT(*) FROM users WHERE name = '$_POST[name]' AND pass = '$_POST[password]'";
        
    $autnme mysql_query($query);
        if(!
    $autnme)  exit("Ошибка");
        
    // Получаем число записей
        
    if(mysql_result($autnme0) > 0)
        
    define("TOTAL"1);
        }
     if(
    defined("TOTAL"))  {
        
    $_SESSION['name'] = $_POST['name'];
        
    $_SESSION['password'] = $_POST['password'];
      }
    // Если посетитель "вошел" - перенаправляем его
      
    if(isset($_SESSION['name']) && isset($_SESSION['password'])) {
          
    header("Location: ../index.php");
      } else {
        echo(
    "Неверный пароль");
            
    header("Location: ../index.php");
        }
    //Если юзер выходит -  удаляем сессию
    if($_GET['do'] == 'logout'){
        
    session_destroy();
        
    header("Location: ../index.php");
    }
    users.php

    Создаем файл users.php, где будут выводиться уже зарегистрированные пользователи...
    PHP:
    <html>
    <
    head><title>Пользователи</title></head>
    <
    body>
    // Устанавливаем соединение с базой данных
      
    require_once("config.php");
    $query "SELECT * FROM `users` ORDER BY `id` ASC";
    $result mysql_query($query);
    echo 
    "<table style='border: 0px;'><tr>
    <td style='width: 100px; text-align: center;' class='td'>Имя</td>
    <td style='width: 100px; text-align: center;' class='td'>ICQ</td>
    <td style='width: 150px; text-align: center;' class='td'>E-mail</td></tr>"
    ;

    while(
    $row mysql_fetch_assoc($result)) {
              echo 
    "<tr><td class='td' style='width: 100px;'>&nbsp;<font style='font-weight: bold;'>$row[name]</font></td>";
              if(
    $row['icq'] != '0'){
                 echo 
    "<td style='text-align: center;' class='td'><a href='http://www.icq.com/$row[icq]' target='_blank' title='Icq $row[name]  $row[icq]'><font style='color: green; font-weight: bold;'>$row[icq]</font></a></td>";
             } else {
             echo 
    "<td style='text-align: center;' class='td'><font style='color: red; font-weight: bold;'>---</font></td>";
             }
             echo 
    "<td style='text-align: left;' class='td'><a href='mailto:$row[email]' title='Отправить e-mail  $row[name]'>$row[email]</a></td>";
    }
    echo 
    "</table>";
    Ну что же.......To be continued
     
    #3 banned, 20 Mar 2007
    Last edited: 21 Mar 2007
  4. Talisman

    Talisman Elder - Старейшина

    Joined:
    22 Apr 2006
    Messages:
    400
    Likes Received:
    151
    Reputations:
    80
    $query = "SELECT COUNT(*) FROM users WHERE name = '$_POST[name]' AND pass = '$_POST[password]'"; инъекция
     
  5. Talisman

    Talisman Elder - Старейшина

    Joined:
    22 Apr 2006
    Messages:
    400
    Likes Received:
    151
    Reputations:
    80
    ЗЫ код до боли знаком.. щас посмотрю....
     
  6. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Если есть дырки, пишите сразу как заковырять...
    Спасибо)
     
  7. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,547
    Likes Received:
    1,398
    Reputations:
    612
    хм, не проще ли or die("<P>Сервер базы данных не доступен</P>")?

    не понимаю зачем использовать empty, когда можно и без него.
    PHP:
     if($_POST['name'] && $_POST['password']) 
    зачем? header("Location: ..") быстрее и проще.

    PHP:
    if(mysql_result($autnme0) > 0)
        
    define("TOTAL"1);
        }
     if(
    defined("TOTAL"))  {
        
    $_SESSION['name'] = $_POST['name'];
        
    $_SESSION['password'] = $_POST['password'];
      } 
    боже... а mysql_num_rows на что?
    PHP:
    if(mysql_num_rows($result){
        
    //
    }
    PHP:
    $numrows mysql_num_rows($result); 
    хм... а не проще ли
    PHP:
    while($row mysql_fetch_assoc($result)){
        
    //
    }

    а вообще я не вижу в статье смысла.. если кто знает пхп, для него это сделать не проблема. а те, кто его недостаточно знает и с этой статьей мало что сможет сделать)
    +8
     
  8. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,547
    Likes Received:
    1,398
    Reputations:
    612
    просто это автоматом надо делать, все данные которые идут в БД делать в mysql_escape_string()
     
    1 person likes this.
  9. Talisman

    Talisman Elder - Старейшина

    Joined:
    22 Apr 2006
    Messages:
    400
    Likes Received:
    151
    Reputations:
    80
    да) нашол сорец) ISBN 5-94157-837-7
    "Головоломк на пшп для хакера", Максим Кузнецов, Игорь Симдянов.
    2 nerezus у них бред пожестче, чем у фленова))) учат уходить от инъекций, и в своем коде дают их 10-20 :)))
    ЗЫ плюс заработал, т.к. хотябы переработал их сорец)
     
  10. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,547
    Likes Received:
    1,398
    Reputations:
    612
    Вообще, я хоть и не профи в пхп, но даже для меня код извращенский.
     
    1 person likes this.
  11. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    GreenBear, спасибо, приду домой, исправлю и приму к сердцу ваши советы))
     
  12. Sn@k3

    Sn@k3 Elder - Старейшина

    Joined:
    13 Apr 2006
    Messages:
    1,000
    Likes Received:
    438
    Reputations:
    90
    " Создаем простой сайт на php " и тут же в глаза бросается код мускуля))
     
  13. x-treem

    x-treem Elder - Старейшина

    Joined:
    8 Nov 2006
    Messages:
    130
    Likes Received:
    16
    Reputations:
    0
    боян... зачем учить делать сайт если есть много учебников по php.

    так - же море цмс-ок, в которых по шагам расписано как их установить.

    сугубо мое личное мнение
     
  14. gormet

    gormet Elder - Старейшина

    Joined:
    31 Jan 2007
    Messages:
    38
    Likes Received:
    24
    Reputations:
    23
    хоть я тоже только учусь кодингу на ПХП но знаю - самая лучшая ЦМС-ка - это самописная! :p
     
  15. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,547
    Likes Received:
    1,398
    Reputations:
    612
    а те из ниоткуда взялись ? статья нормальная для общего ознакомления как, но код идет скорее во вред =\
     
  16. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Первый пост обновлен, исправлены баги и переделан код пкрасивее )))
    Спасибо зеленому медвежонку :)
     
  17. KPOT_f!nd

    KPOT_f!nd положенец общага

    Joined:
    25 Aug 2006
    Messages:
    1,074
    Likes Received:
    502
    Reputations:
    65
    насчет кодов =\ Каждый пишит сам и сам делает ошибки =\ тебе не надо было расписывать php-код, а так поверхностоно описать скрипт, а не полность выкладывать =\
     
    #17 KPOT_f!nd, 21 Mar 2007
    Last edited: 21 Mar 2007
  18. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Когда я учил пхп, я очень хотел найти хорошее объяснение тому что пишут....
    Вот для таких как я был , я и написал))
     
  19. blaga

    blaga Elder - Старейшина

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    я что то не понял, а сайт то твой только и умеет что зарегать пользователя, а потом вывести список их? А где новости? статьи? Гостевая? На сайт тут явно НЕ тянет.
    И еще, у тебя поначалу совсем нет никакого плана, ничего нет. Чтобы понять что твой сайт умеет пришлось всю статью читать. А был бы план сразу все видно было бы... Короче, не очень твоя статья. Не понравилось.
     
  20. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Вроде как написано "To be continued" .........
    И вроде тема "простой сайт"...
    Посже напишу как сделать новости и комментарии.....