Не пропусти главное событие года - Конференцию веб-разработчиков DevConf!
Москва, 21-22 июня.

Пример CRUD-приложения


Классическое приложение для работы с БД обычно называют CRUD - по первым буквам стандартных операций, Create, read, update and delete (Создание чтение обновление удаление).
Это как гамма в музыке - любое приложение состоит из этих базовых элементов.
В нашем случае это веб-страница, которая выводит список записей в БД в виде списка (R), позволяет добавлять в список новые записи (C),редактировать их (U) и удалять (D).

С помощью класса такое приложение реализуется буквально в несколько строчек. Также очень удобно то, что с помощью данного кода можно редактировать любые таблицы, меняя только переменные $table и $fields (ну и шаблоны, разумеется).

<?php  
include 'safemysql.class.php';

$db     = new SafeMysql();
$table  "users"
$fields = ['name''car''sex'];

if(
$_SERVER['REQUEST_METHOD']=='POST')
{
    
$data $db->filterArray($_POST$fields);
    if (isset(
$_POST['delete']))
    {
        
$db->query("DELETE FROM ?n WHERE id=?i"$table$_POST['delete']);
    } elseif (
$_POST['id']) { 
        
$db->query("UPDATE ?n SET ?u WHERE id = ?i"$table$data$_POST['id']);
    } else { 
        
$db->query("INSERT INTO ?n SET ?u"$table$data);
    } 
    
header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']);  
    exit;  
}

if (!isset(
$_GET['id']))
{
    
$LIST $db->getAll("SELECT * FROM ?n"$table);
    include 
'list.php';
} else {
    if (
$_GET['id'])
    {
        
$row $db->getRow("SELECT * FROM ?n WHERE id=?i"$table$_GET['id']);
    } else { 
        
$row['name'] = ''
        
$row['sex']  = ''
        
$row['car']  = ''
        
$row['id']   = 0
    } 
    include 
'form.php';
}

// эта функция не нужна для работы с БД, но нужна для примеров вывода
// поскольку вывод всегда должен быть экранирован
function e($str)
{
   return 
htmlspecialchars($strENT_QUOTES'utf-8');
}


плюс файлы шаблонов,

list.php
<a href="?id=0">Add item</a>
<table border=1>
    <tr>
        <td><b>Name</b></td>
        <td><b>Car</b></td>
        <td><b>Sex</b></td>
        <td><b>Action</b></td>
    </tr>
<?php foreach ($LIST as $row): ?>
    <tr>
        <td><?=e($row['name'])?></td>
        <td><?=e($row['car'])?></td>
        <td><?=e($row['sex'])?></td>
        <td><a href="?id=<?=e($row['id'])?>">Edit</a></td>
    </tr>
<?php endforeach ?>
</table>


и form.php
<form method="POST">
    Name: <input type="text" name="name" value="<?=e($row['name'])?>"><br>
    Car: <input type="text" name="car" value="<?=e($row['car'])?>"><br>
    Sex: <select name="sex">
        <option<?php if ($row['sex'] == 'male'):   ?> selected="selected"<?php endif ?>>male</option>
        <option<?php if ($row['sex'] == 'female'): ?> selected="selected"<?php endif ?>>female</option>
    </select>
    <input type="hidden" name="id" value="<?=e($row['id'])?>">
    <input type="submit"><br>
</form>
<a href="?">Return to the list</a>

<?php if ($row['id']): ?>
<form method="POST">
<input type="hidden" name="delete" value="<?=e($row['id'])?>">
<input type="submit" value="Delete"><br>
</form>
<? endif ?>