Версия для печати. Взято с сайта phpsql.ru

На главную   Назад   Вперед

Пишем админку

Админка - это 70% сайта.

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

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

Перейдем к коду.

1. Файл connect.php - подключение к базе данных (будет подключаться из сайта и админки)

<?php
  $DBASE = mysql_connect("localhost","login", "password") or die("Could not connect: " . mysql_error());
  mysql_select_db("basename") or die("Could not select database");
  mysql_query("SET NAMES cp1251");
?>

Вместо "login" "password" пишем логин и пароль подключения к базе данных.
Их должны дать на хостинге, где хостится Ваш сайт либо для денвера это "root" и "".

"basename" имя базы - опять же дает хостер или для денвера заходим на
localhost/Tools/phpMyAdmin/ и под Create new database набираем любое имя для базы данных и нажимаем Create. Его и заносим вместо basename.


2. Файл install.php - создаем структуру базы данных blog с текстовыми полями tema и text (вызывается один раз вначале)

<?php
require "connect.php";
//mysql_query("DROP TABLE blog");

mysql_query("
CREATE TABLE blog (
  id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT NOT NULL,
  tema VARCHAR(255),
  text TEXT,  
  date TIMESTAMP,
  INDEX (tema)
) DEFAULT CHARSET=cp1251;" 
);
echo mysql_error();
?>
<br> Готово!

id здесь - уникальный идентификатор-ключ, номер записи: 1,2,3,... Добавляйте во все базы данных без раздумий.
tema символьное поле до 255 символов
text текстовое поле
date типа timestamp само заполняет дату и время редактирования записи, что бывает полезно.
INDEX(tema) создает индекс для данного поля для ускорения поиска.
cp1251 кодировка базы данных, может быть и utf8.


3. Создаем базу данных выполнив предыдущий файл
http://наш сайт/install.php
где наш сайт - это или домен сайта или папка где он лежит если работаем в денвере.

Написали Готово! - все отлично, если пишет ошибки, правим и разбираемся в чем дело.


4. Файл admin.php - сама админка. Начало.

<?php
if($_COOKIE["pass"]!=="password"){ 
  sleep(1);
  if(isset($_POST["pass"])){
    setcookie("pass",$_POST["pass"], time()+3600*24*14);
    die("Обновите страницу");
  }
?>
<html><head><title>Админка</title></head><body>
<form method="post">
<input type="password" name="pass" value="">
<input type="submit" name="submit" value="Пароль">
</form></body></html>
<?php
  exit();
}
?>

Заместо "password" набираете свой пароль.
Получив сообщение "Обновите страницу" нажмите на браузере кнопку "Обновить текущую страницу" или F5.

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


5. Ниже сделаем поиск по теме статьи и форму для редактирования записей.
Продолжим заполнять файл admin.php

<br>
<form method="post">
<input type="text" name="find" value="">
<input type="submit" name="search" value="Поиск">
</form>

<?php
require "connect.php";

if(isset($_POST["search"])){
  $search=trim($_POST["find"]);
  $query = "SELECT * FROM blog WHERE tema LIKE `%$search%` ORDER by id DESC";
  $result = mysql_query($query);
  echo `<table>`;
  while($row = mysql_fetch_array($result)){
    echo `<tr><td><a href="?id=`,$row[`id`],`">`,$row[`id`],`</a></td><td>`,$row[`tema`],
      `</td><td>`,$row[`text`],`</td></tr>`;
  }
  exit();
}
// А это форма редактирования записи

echo<<<HERE
<form method="post"><table border="0">
<tr><td>id</td><td>$row[id]</td></tr>
<tr><td>Заголовок</td><td><input type="text" size=32 name="tema" value=`$row[tema]`></td></tr>
<tr><td>Статья</td><td><textarea name="text" cols=80 rows=2>$row[text]</textarea></td></tr>
<input type="hidden" name="id" value=`$_GET[id]`>
<tr><td></td><td>
HERE;

if(!empty($_GET[`id`])){
  echo ` <input type="submit" name="edit" value="Сохранить">`;
  echo ` <input type="submit" name="delete" value="Удалить">`;
}else{
  echo `<input type="submit"name="insert" value="Добавить">`;
}
echo `</tr></table></form>`;
?>

Пояснения:
В строке $query = "SELECT * FROM blog WHERE tema LIKE `%$search%` ORDER by id DESC";
ищем все записи где тема включает символы введенные через поиск
Сортировка здесь задана по уменьшению id просто для примера.
Если нужно ограничить число записей, то в конце запроса добавляем "LIMIT 0,20" - 20 записей начиная с нулевой, цифры любые.
$result = mysql_query($query); - здесь выполняется сам запрос.
while($row = mysql_fetch_array($result)){ - пока найдены записи цикл. Если не найдены, то в цикл не попадаем.
$row[`id`] - поле id из записи row, полученой строчкой выше. В нашей базе можно обращаться еще к $row[`tema`] и $row[`text`]. Название поля берется в одиночную кавычку, можно в двойную.
echo - оператор вывода, как print в бейсике. Отображает строки, а для переменных их значения.
echo<<<HERE разновидность оператора вывода. Выводит все от него и до строки HERE ниже в блоке.
$_POST - массив переменных, переданных с формы методом post
$_GET - массив переменных, полученных при переходах на страницу вида http://имя сайта/?id=5
имеем соответственно $_GET[`id`]=5


6. Осталось добавить в код сами действия:
Их добавляем в admin.php ПЕРЕД строкой echo<<<HERE

<?php
if(!empty($_GET[`id`])){  
  $query="SELECT * FROM blog WHERE id=$_GET[id]";
  $result = mysql_query($query);
  $row = mysql_fetch_array($result);
}
// Добавление
if(isset($_POST[`insert`])){
  $query="INSERT INTO blog (tema,text) VALUES (`$_POST[tema]`,`$_POST[text]`)";
  mysql_query($query);
}
//Корректировка
if(isset($_POST[`edit`])){
  $query="UPDATE blog SET tema=`$_POST[tema]`,text=`$_POST[text]`  WHERE id=`$_POST[id]`";
  $result = mysql_query($query);
  unset($row);  
}
/Удаление
if(isset($_POST[`delete`])){
  $query="DELETE FROM text WHERE id=`$_POST[id]`";
  mysql_query($query);
  unset($row);
}
?>


7. Запускаем админку командой http://имя сайта/admin.php
Исправляем ошибки. Наслаждаемся :)


ВНИМАНИЕ! ВСЕ СИМВОЛЫ ` в коде МЕНЯЕМ на символ одиночной кавычки '

 
Предыдущая   На главную   Следующая