Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> СУБД MySQL, [ ликбез ] 
V
    Опции темы
MoLeX
Дата 28.12.2007, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 7
Всего: 140



Если тема не актуально, крива написана и т.д. то лучше сразу удалите)

Учимся работать с СУБД MySQL или ликбез безграмотности


Что такое СУБД:
      Система управления базами данных — специализированная программа, предназначенная для манипулирования базой данных. Для создания и управления информационной системой СУБД необходима в той же степени, как для разработки программы на алгоритмическом языке необходим транслятор.

Основные функции СУБД:
      •управление данными во внешней памяти (на дисках);
      •управление данными в оперативной памяти;
      •журнализация изменений и восстановление базы данных после сбоев;
      •поддержка языков БД (язык определения данных, язык манипулирования данными).

Компоненты современной СУБД:
      •ядро, которое отвечает за управление данными во внешней и оперативной памяти и журнализацию;
      •процессор языка базы данных, обеспечивающий оптимизацию запросов на извлечение и изменение данных, и создание, как правило, машинно-независимого исполняемого внутреннего кода;
      •подсистему поддержки времени исполнения, которая интерпретирует программы манипуляции данными, создающие пользовательский интерфейс с СУБД;
      •а также сервисные программы (внешние утилиты), обеспечивающие ряд дополнительных возможностей по обслуживанию информационной системы.

Классификация СУБД:
По модели данных:
      •Сетевые;
      •Иерархические;
      •Реляционные;
      •Объектно-реляционные;
      •Объектно-ориентированные.

По способу доступа к БД:
      •Файл-серверные (Примеры: Microsoft Access);
      •Клиент-серверные (Примеры: MySQL, MS SQL Server, Interbase/Firebird);
      •Встраиваемые (Примеры: SQLite, BerkeleyDB).

      MySQL возникла, как попытка применить mSQL к собственным разработкам компании: таблицам, для которых использовались ISAM — подпрограммы низкого уровня. В результате был выработан новый SQL-интерфейс, но API-интерфейс остался в наследство от mSQL. Откуда происходит название «MySQL» — доподлинно не известно. Разработчики дают два варианта: либо потому, что практически все наработки компании начинались с префикса My, либо в честь девочки по имени My, дочери Майкла Монти Видениуса, одного из разработчиков системы. 
      Она портирована на большое количество платформ: AIX, BSDi, FreeBSD, HP-UX, GNU/Linux, Mac OS X, NetBSD, OpenBSD, OS/2 Warp, SGI IRIX, Solaris, SunOS, SCO OpenServer, SCO UnixWare, Tru64, Windows 95, Windows 98, Windows NT, Windows 2000, Windows XP и прочим версиям Microsoft Windows.
      Имеет API для языков C, C++, Эйфель, Java, Лисп, Perl, PHP, Python, Ruby, Smalltalk и Tcl, библиотеки для языков платформы .NET, а также обеспечивает поддержку для ODBC посредством ODBC-драйвера MyODBC.
      На этом объяснения, что такое СУБД MySQL заканчивается и переходим к практической части. Для примера возьмем и напишем небольшой новостной движок, с помощью которого мы и поймем, как PHP взаимодействует с MySQL. 


Раздел 1. Составляем sql-запрос. 
      В начале надо определиться, что будем отображать в новостях: 
            1 – Заголовок новости (или ее название),
            2 – Сама новость, 
            3 – Количество людей просмотревших новость,
            4 – Дата добавления.
      В итоге получаем вот такой sql – запрос:
Код

CREATE TABLE News 
(
       id int(11) NOT NULL auto_increment,
       name tinytext NOT NULL,
       text text NOT NULL,
       views int(11) NOT NULL,
       datew date NOT NULL default '0000-00-00',
       PRIMARY KEY (id) 
) ENGINE=MyISAM DEFAULT CHARSET=cp1251; 


CREATE TABLE определяет структуру таблицы в базе данных. Этим оператором создаются все 
       таблицы MySQL. Предложение состоит из имени таблицы, за которым идет любое количество 
       определений полей. Синтаксис определения полей включает в себя имя поля, за ним его тип, за 
       ним любой модификатор (например: name text NOT NULL). 
id уникальный номер новости (для удобства последующей работы).
name поле для название новости (пример: Первая новость на сайте и т.д.).
text текст новости.
views количество людей просмотревших новость.
datew дата добавления новости.

int(11) – атрибут указывает, что значение данного поля будет не больше 11 знаков (есть 
       сомнения что у вас будет больше 10 в 11 степени новостей); 
tinytext – текстовое поле (нечувствительно к регистру) с максимальной длиной в 255 символов;
text – текстовое поле с максимальной длиной в 64 Кбайт текста;
date – значение даты, которое хранит год, месяц и день. Значения всегда выводятся в 
       формате 'YYYY-MM-DD', но могут быть введены в любом из следующих форматов: 'YY-MM-DD', 
       'YYYY-MM-DD', 'YYMMDD' или 'YYYYMMDDHHMMSS';
NOT NULL –атрибут гарантирует, что каждая запись в столбце будет иметь какое-либо,
       отличное от NULL, значение. Попытка вставить в такое поле значение NULL вызовет ошибку;  
auto_increment – атрибут позволяет автоматически обновлять числовое поле. Это удобно для
       создания уникальных идентификаторов для записей в таблице. Данные могут быть записаны и
       прочитаны из такого поля, как из обычного, но при вводе значения NULL или 0 существующее
       значение автоматически увеличивается на единицу;
PRIMARY KEY (id) – атрибут автоматически делает поле первичным ключом таблицы;
ENGINE=MyISAM – стандарт таблицы;
CHARSET=cp1251 – в какой кодировке создаем таблицу.
Ну что же теперь ползем в phpmyadmin, создаем новую БД (надеюсь знаете как) и выполняем sql-запрос.


Раздел 2. PHP-код. 
       На сервере создаем 2-ва файла – index.php и config.php
config.php
Код

<?php
          $db_host  = "адрес_хоста";
          $db_name  = "название_БД";
          $db_uname = "имя_пользователя";
          $db_pass  = "пароль_пользователя";
?>


А на счет index.php надо подумать:
       2.1. Пишем html-код движка (даже комментировать не буду что вы должны там написать)
       2.2. Инклюдим файл с настройками доступа к БД, осуществляем подключение и сразу даем знать в какой кодировке хотим работать. 
       2.3. С помощью управляющего оператора SWITCH создаем будущую навигацию.
              2.3.1. Если пользователь находится на главной странице, то формируем запрос для вывода данных в последующем порядке 9,8,7 и т.д. затем узнаем, сколько записей в БД (это нам пригодится для цикла) и циклом for выводим дату, название и количество человек, которые просмотрели новость. Если же пользователь смотрит какую-то конкретную новость, то с помощью update обновляем поле views (увеличиваем его значение на 1) и выводим ему текстовый массив определенной новости.
              2.3.2. Для добавление новости создаем форму с двумя полями (одно input другое textarea). После заполнения полей и нажатия на кнопку получаем значение полей через метод POST и формируем запрос к БД с помощью INSERT INTO.
              2.3.3. С помощью выпадающего списка выводим весь перечень новостей, после выбора одной новости делаем запрос к БД на вывод полей и отображаем их в форме. Сохраняем (апдейтим) с помощью UPDATE.
              2.3.4. То же самое что и 2.3.3. только делаем удаление новости (DELETE)

Вот в принципе и все. В исходнике специально не обращал внимание на безопасность (делал для того чтобы какой-нибудь гуру не воспользовался Ctrl+C & Ctrl+V).

Приблизительно должно получится так (а может быть еще и лучше):
Код

<html>
<head>
<title>Пробный новостной движок</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<style type="text/css">
body, td, select, input, textarea {font-family: Georgia; font-size: 12px;}
small {font-family: tahoma, arial, helvetica, sans serif; font-size: 11px;}
A:link          {COLOR: #00A050; TEXT-DECORATION: underline; font-size: 12px;}
A:active        {COLOR: #00A050; TEXT-DECORATION: underline; font-size: 12px;}
A:visited       {COLOR: #00A050; TEXT-DECORATION: underline; font-size: 12px;}
A:hover         {COLOR: #000000; TEXT-DECORATION: underline; font-size: 12px;}
</style>
</head>
<body>
<center>
[<b><a href="index.php">Новости</a></b> ] 
[ <b><a href="index.php?page=add">Добавить</a></b> ] 
[ <b><a href="index.php?page=editor">Редактировать</a></b> ]
[ <b><a href="index.php?page=delete">Удалить</a></b> ]
<br /><br />

<?php
include "./config.php";    //    подключаем конфиг с доступом к БД

//    Осуществляем подключение к БД + даем знать MySQL'у в какой кодировке мы хотим работать
    mysql_connect($db_host, $db_uname, $db_pass) or die("Не могу соедениться с MySQL сервером!");
    mysql_select_db($db_name) or die("Базы данных не существует!");
    mysql_query ("set character_set_client='cp1251'");
    mysql_query ("set character_set_results='cp1251'");
    mysql_query ("set collation_connection='cp1251_general_ci'");

    
switch($_GET['page'])
{
//    блок вывода новостей.        
    default:    
        if ((empty($id))||($id=='')) 
        {
            $sql = "Select * from `news` ORDER BY `id` DESC";
        } 
        else 
        {
            $sql = "update `news` set views=views+1 WHERE `id`='".$id."'";
            mysql_query($sql);
            $sql = "Select * from `news` WHERE `id`='".$id."'";
        }
        $result = mysql_query($sql);
        $z = mysql_numrows($result);
    
        for ($i=0; $i<$z; $i++) 
        {
            $id_n = mysql_result($result, $i, 'id');
            $name = mysql_result($result, $i, 'name');
            $text = mysql_result($result, $i, 'text');
            $datew = strftime("%d.%m.%Y", strtotime(mysql_result($result, $i, 'datew')));
            $viewz = mysql_result($result, $i, 'views');        
            if (!empty($text) and (empty($id))||($id==''))
            echo "<p align=\"justify\" style=\"margin-left: 200px\"><small><b>".$datew."</b></small>
                     <br>&nbsp;&nbsp;&nbsp;<a href=\"index.php?id=".$id_n."\">".$name."</a>
                     &nbsp;<small>Просмотров: ".$viewz."</small>";
            
            if (((!empty($id))||($id!=''))and($text!=''))
            {
                echo "<hr color=\"teal\" noshade size=\"1\">
                      <p style=\"margin-left: 100px; margin-right: 50px;\">".$text."</p>";
            }
        }
    break;

    

//    блок для добавление новостей.
    case "add":
        //формируем форму для добавления новостей
        echo "<form action=\"index.php?page=add&ok\" method=\"post\">\n".
             "<input type=\"text\" name=\"newsname\" size=\"71\" />\n".
             "<br/><textarea cols=\"70\" rows=\"10\" name=\"newstext\"></textarea>\n".
             "<br/><input type=\"submit\" value=\"  ОК  \" name=\"ok\" /></form>\n";
        
        //производим запись в базу
        if(isset($ok))
        {
            $add = "INSERT INTO `News` (`id`, `name`, `text`, `views`, `datew`) VALUES ('', '".$_POST['newsname']."', '". $_POST['newstext']."', 1, '".date("Y-m-d")."')";
            $result = mysql_query($add) or die("Произошла ошибка при добавление новости");
        }
    break;    
    
    
    
//    блок отвечающий за редактирование существующих новостей.    
    case "editor":
        $sql = "Select * from `news` ORDER BY `id` DESC";
        mysql_query($sql);
        $result = mysql_query($sql);
        $z = mysql_numrows($result);
        echo "<form action=\"index.php?page=editor&ok\" method=\"post\">\n<select name=\"newseditor\">";
        for ($i=0; $i<$z; $i++) 
        {
            echo "<option value=\"".mysql_result($result, $i, 'id')."\">".mysql_result($result, $i, 'name')."</option>";
        }        
        echo "</select><br/><input type=\"submit\" value=\"  показать  \" name=\"ok\" /></form>\n";
        
        //выбираем запись из базы
        if(isset($ok))
        {
            $sql = mysql_query("Select * from `news` WHERE id = '".$_POST['newseditor']."'");
            while ($result = mysql_fetch_array($sql)) 
            {    
                $name = "".$result['name']."";
                $text = "".$result['text']."";
            }
            echo "<form action=\"index.php?page=editor&update\" method=\"post\">\n".
                "<input type=\"hidden\" name=\"newsid\" value=\"".$_POST['newseditor']."\">".
                "<input type=\"text\" name=\"newsname\" size=\"71\" value=\"".$name."\"/>\n".
                "<br/><textarea cols=\"70\" rows=\"10\" name=\"newstext\">".$text."</textarea>\n".
                "<br/><input type=\"submit\" value=\"  Editor  \" name=\"ok\" /></form>\n";
        }

        //производим update базы
        if(isset($update))
        {
            $sql = "UPDATE News SET name = '".$_POST['newsname']."', text = '".$_POST['newstext']."' WHERE id = '".$_POST['newsid']."'";
            $result = mysql_query($sql) or die("Произошла ошибка при обновлении новости");
            echo "<meta http-equiv=\"refresh\" content=\"0; URL=index.php?page=editor\"> \n";
        }        
    break;    
    
    
    
//    блок отвечающий за удаление существующих новостей.    
    case "delete":
        $sql = "Select * from `news` ORDER BY `id` DESC";
        mysql_query($sql);
        $result = mysql_query($sql);
        $z = mysql_numrows($result);
        echo "<form action=\"index.php?page=delete&ok\" method=\"post\">\n<select name=\"newsdelete\">";
        for ($i=0; $i<$z; $i++) 
        {
            echo "<option value=\"".mysql_result($result, $i, 'id')."\">".mysql_result($result, $i, 'name')."</option>";
        }        
        echo "</select><br/><input type=\"submit\" value=\"  Delete  \" name=\"ok\" /></form>\n";
        
        //удаляем запись из базы
        if(isset($ok))
        {
            $delete = "DELETE FROM `News` WHERE id = '".$_POST['newsdelete']."'";
            $result = mysql_query($delete) or die("Произошла ошибка при удаление новости");
            echo "<meta http-equiv=\"refresh\" content=\"0; URL=index.php?page=delete\"> \n";
        }        
    break;    
}
?>




P.S. В процессе написания были использованы следующие ресурсы: http://ru.wikipedia.orghttp://www.mysql.ru. Так же спасибо Astraller’у за консультацию. 
сильно строго не судите, это моя первая поптыка написания дока


Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  news.rar 2,52 Kb


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
XOTABIH
Дата 28.12.2007, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.12.2007

Репутация: нет
Всего: нет



MoLeX-от имени своего так скажем учителя который меня научил как обращаться с базой данных я сделал свою бд: и описываю пример своей базы данных и составляющие её типы таблицы:

Код

CREATE TABLE `user` (
id int(11) NOT NULL auto_increment,
Name text NOT NULL,
Mail text NOT NULL,
Login TEXT NOT NULL,
Password TEXT NOT NOT NULL,
dates int(12) NOT NULL,
PRIMARY KEY  (id) 
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;


вот можете ещё создать мою базу тоесть этоп пример того что сделано мной и то как научился создавать бд.

Соствляющие типы бд таблицы:
Код

TEXT
date

и.т.д.
Я их все описывать небуду потому как список большой.
PM MAIL   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0805 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.