Link in progress
Обо мне
Первичный ключ и ALTER MySQL. Уроки PHP

Первичный ключ и ALTER MySQL. Уроки PHPПриветствую тебя, читатель и желающий учится новому!
Перед началом урока, мы вспомним о прошлых уроках, а точнее о заданиях, которые там были. Больше всего меня интересует задание внесение изменений по последним урокам у всех нашим файлам (add_mailer.php, dell_mailer.php, sender_mail.php). И в результате, вы должны были совместить файлы HTML в один файл PHP и удалить все файлы HTML. Если у кого-то что-то не получилось, вы можете задать свой вопрос в комментарии или скачать файлы в конце урока, пересмотреть и сравнить с вашими файлами. Сегодня у нас по курсу:
План:1. Уникальный идентификатор и первичный ключ MySQL;
2. ALTER – изменение таблицы;
3. Вывод списка всех подписчиков.

1.Уникальный идентификатор и первичный ключ MySQL.

Уникальный идентификатор базы данных – это в 99,99% составляющая любой базы данных.
Говоря простыми словами, это колонка, которая заполняется автоматически и имеет, как правило, числовое значение, которое всегда больше на один предыдущей запиши в таблице. Например, если у вас в таблице 81 запись, тогда следующая будет иметь 82 и так далее. Очень часто в кругах программистов эту колонку называют «первичный ключ».
Для того, что бы MySQL знал, в какую колонку автоматически добавить +1, нужно при ее создании указать атрибут AUTO_INCREMENT. Также не стоит забивать о атрибуте первичного ключа PRIMARY KEY, который обозначает, что в этой колонке НЕ МОЖЕТ быть одинаковых значений. Несколько советов о первичном ключе:
— данные в этой колонке не должны повторяться;
— в колонке первичного ключа всегда должны быть данные;
— при появлении новой записи, в колонке первичного ключа должно всегда присваиваться значение автоматически;
— первичный ключ – это первичный ключ и не более;
— не изменяете значение первичного ключа вручную.

2. ALTER – изменение таблицы.

А теперь перейдем непосредственно к практике. Представьте себе, что у вас появилось два или больше одинаковых E-mail и в результате рассылки будет отправлено на один E-mail одинаковые письма рассылки. Такое поведение отправляющего могут принять за СПАМ, а это не хорошо. Что бы избежать отправки рассылки на один и тот же E-mail адрес, нам нужно удостовериться, нет ли в базе данных одинаковых E-mail. Вы скажете, а почему не использовать страницу удаления подписчиков? Если мы ее используем, мы удалим ВСЕ E-mail который соответствует заданному параметру, а нам нужно удалить только те, которые нам не нужны. И так, нам нужно изменить нашу таблицу и добавить в нее колонку с первичным ключом. Заходим в SQL терминал базы данных (например через phpmyadmin) и выполним следующий код:

1
ALTER TABLE store_list ADD id INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY ( id )

После чего у нас должна появится еще одна колонка с именем id в БД, которая будет заполнена числами – идентификаторами каждой из записей. А теперь давайте разберем саму команду:
ALTER TABLE – изменить таблицу;
ADD id – добавить колонку id;
INT – формат данных в колонке;
NOT NULL – не может быть пустым;
AUTO_INCREMENT – уже было сказано выше;
FIRST – говорит о том, чтобы колонка должна быть первой, относительно остальных колонок;
ADD PRIMARY KEY ( id ) – говорит о том, что колонка id должна быть уникальной.

3. Вывод списка всех подписчиков.

Что бы удалить именно то, что нам нужно – мы можем вывести всех подписчиков в виде списка checkbox с привязкой по id. Первое что мы сделаем, это напишем SQL запрос, который будет извлекать данные из нашей БД:

1
2
$query = “SELECT * FROM store_list”;
$result = “$connect, $query”;

Теперь, когда у нам есть переменная $result с данным из БД, их нужно показать, вывести в окно браузера. Использовать команду echo не получится, почему? Читайте в этом уроке. Напишем HTML форму вместе с PHP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<form method="post" action="<?PHP $_SERVER['PHP_SELF']?>">
<?php
    //Подключаемся к БД
    $connect = mysqli_connect('hostname', 'login', 'pass', 'BDname', ) or die ('Нет подключения к базе данных');
    mysqli_query($connect, "SET CHARACTER SET 'utf8'");
   
    //Записываем запрос из БД в переменную
    $query = "SELECT * FROM store_list";
    $result = mysqli_query($connect, $query);
    while ($checkdell = mysqli_fetch_array($result)) {
        echo '<input type="checkbox" value="' . $checkdell['id'] . '" name="todelete[]">';
        echo $checkdell['first_name'];
        echo ' ' . $checkdell['last_name'];
        echo ' ' . $checkdell['email'];
        echo '<br />';
        };
    ?> 
        <div class="send">
            <input type="submit" id="send" value="Удалить" name="delete" />
        </div>

Первый вопрос посмотрев на этот вод «Что это такое и как оно работает?». Так, как это уже не первый и даже не второй урок, вы уже должны понимать работу while(). Больше тут ничего страшного нет. Кто забыл, что за зверь цикл while() – прочтите этот урок. Но все же, тут есть несколько нюансов, а именно:

1
echo '<input type="checkbox" value="' . $checkdell['id'] . '" name="todelete[]">';

Мы присваиваем значение кнопки первичным ключом ($checkdell[‘id’]), и удалять мы будем именно по значению первичного ключа, а как мы уже знаем – значение первичного ключа ВСЕГДА уникальное, это даст нам уверенность удаление именно того, что мы конкретно хотим удалить. todelete[] – квадратные скобки ведут за собой автоматическое создание элемента массива todelete со значением идентификатора выбранной записи. Это происходит в суперглобальном массиве $_POST, внутри которого и создается массив todelete, в котором сохраняются все выбранные значение атрибутов value. А у нас, значение value = значению первичного ключа каждой из записей в базе данных.

Теперь мы может вывести список всех подписчиков из БД. Осталось написать код, который будет удалять выбранных подписчиков, чем и займемся на следующем уроке, также мы познакомимся с новым циклом foreach(). Файлы урока будут добавлены в следующем уроке.

До скорой встречи, с уважением ProIN!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Max quality, min price, min time expenditure
Send me a message to: work@glogla.net
Portfolio