СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до 11.05.2025

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Разработка кода ИС Практическая работа №23

Категория: Информатика

Нажмите, чтобы узнать подробности

Просмотр содержимого документа
«Разработка кода ИС Практическая работа №23»

Практическое занятие № 23

Тема: «Создание элементов управления. Удаление и добавление данных.»



Краткие теоретические основания выполнения задания

Добавление данных в MySQLi

Для добавления данных в MySQL применяется команда INSERT:

INSERT INTO название_таблицы (столбец1, столбец2, столбецN) VALUES ( значение1, значение2, значениеN)

Объектно-ориентированный подход

$conn = new mysqli("localhost", "root", "mypassword", "testdb2");

if($conn-connect_error){

    die("Ошибка: " . $conn-connect_error);

}

$sql = "INSERT INTO Users (name, age) VALUES ('Tom', 37)";

if($conn-query($sql)){

    echo "Данные успешно добавлены";

} else{

    echo "Ошибка: " . $conn-error;

}

$conn-close();

?



Множественное добавление:

$conn = new mysqli("localhost", "root", "mypassword", "testdb2");

if($conn-connect_error){

    die("Ошибка: " . $conn-connect_error);

}

$sql = "INSERT INTO Users (name, age) VALUES

            ('Sam', 41),

            ('Bob', 29),

            ('Alice', 32)";

if($conn-query($sql)){

    echo "Данные успешно добавлены";

} else{

    echo "Ошибка: " . $conn-error;

}

$conn-close();

?



Процедурный подход

$conn = mysqli_connect("localhost", "root", "mypassword", "testdb3");

if (!$conn) {

  die("Ошибка: " . mysqli_connect_error());

}

$sql = "INSERT INTO Users (name, age) VALUES ('Tom', 37)";

if(mysqli_query($conn, $sql)){

    echo "Данные успешно добавлены";

} else{

    echo "Ошибка: " . mysqli_error($conn);

}

mysqli_close($conn);

?


Множественное добавление:

$conn = mysqli_connect("localhost", "root", "mypassword", "testdb3");

if (!$conn) {

  die("Ошибка: " . mysqli_connect_error());

}

$sql = "INSERT INTO Users (name, age) VALUES

            ('Sam', 41),

            ('Bob', 29),

            ('Alice', 32)";

if(mysqli_query($conn, $sql)){

    echo "Данные успешно добавлены";

} else{

    echo "Ошибка: " . mysqli_error($conn);

}

mysqli_close($conn);

?


Добавление данных из формы HTML

В большинстве случаев добавляемые данные будут приходить из вне, например, присылаться в запросе пользователя. Рассмотрим добавление данных, отправленных из формы HTML. Для этого определим веб-страницу form.html, на которой определим следующий код:

DOCTYPE html

html

head

titleMETANIT.COMtitle

meta charset="utf-8" /

head

body

h3Добавление пользователяh3

form action="create.php" method="post"

    pИмя:

    input type="text" name="username" /p

    pВозраст:

    input type="number" name="userage" /p

    input type="submit" value="Добавить"

form

body

html


Здесь определены два поля ввода. И по нажатию на кнопку их данные в запросе POST будут уходить скрипту create.php. Теперь определим сам скрипт create.php.


Объектно-ориентированный подход

if (isset($_POST["username"]) && isset($_POST["userage"])) {

     

    $conn = new mysqli("localhost", "root", "mypassword", "testdb2");

    if($conn-connect_error){

        die("Ошибка: " . $conn-connect_error);

    }

    $name = $conn-real_escape_string($_POST["username"]);

    $age = $conn-real_escape_string($_POST["userage"]);

    $sql = "INSERT INTO Users (name, age) VALUES ('$name', $age)";

    if($conn-query($sql)){

        echo "Данные успешно добавлены";

    } else{

        echo "Ошибка: " . $conn-error;

    }

    $conn-close();

}

?


Здесь мы проверяем, пришли ли с сервера данные в POST-запросе, которые имеют ключи "username" и "userage":

if (isset($_POST["username"]) && isset($_POST["userage"])) {

   

    ...

}

Если эти данные имеются, то есть был отправлен post-запрос с данными на добавление, то мы получаем эти данные в переменные и добавляем их в бд. Но перед добавлением к этим данным применяется метод $conn-real_escape_string(), которая принимает сохраняемое значение и экранирует в нем спецсимволы, что позволяет защитить от SQL-инъекций.


В итоге после ввода данных и нажатия на кнопку данные в запросе POST уйдут скрипту create.php, который сохранит их в базу данных.


Процедурный подход

if (isset($_POST["username"]) && isset($_POST["userage"])) {

     

    $conn = mysqli_connect("localhost", "root", "mypassword", "testdb3");

    if (!$conn) {

      die("Ошибка: " . mysqli_connect_error());

    }

    $name = mysqli_real_escape_string($conn, $_POST["username"]);

    $age = mysqli_real_escape_string($conn, $_POST["userage"]);

    $sql = "INSERT INTO Users (name, age) VALUES ('$name', $age)";

        if(mysqli_query($conn, $sql)){

        echo "Данные успешно добавлены";

    } else{

        echo "Ошибка: " . mysqli_error($conn);

    }

    mysqli_close($conn);

}

?


Здесь применяется функция mysqli_real_escape_string(). Она служит для экранизации символов в строке, которая потом используется в запросе SQL. В качестве параметров она принимает объект подключения и строку, которую надо экранировать.


Получение данных в MySQLi


Для получения данных в MySQL применяется команда SELECT. Например, получение всех данных из таблицы Users:


SELECT * FROM Users

Рассмотрим получение данных на примере таблицы Users, созданной в прошлых, которая имеет следующее определение:


CREATE TABLE Users (id INTEGER AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), age INTEGER)


Объектно-ориентированный стиль


При выполнении команды SELECT метод query() объекта mysqli возвращает набор полученных строк, который мы можем перебрать с помощью цикла. Например, перебор с помощью цикла foreach:

$sql = "SELECT * FROM Users";

if($result = $conn-query($sql)){

    foreach($result as $row){

         

        $userid = $row["id"];

        $username = $row["name"];

        $userage = $row["age"];

    }

}


Здесь $result представляет набор строк. Каждый его элемент, который передается в переменную $row, хранит данные отдельной строки в виде ассоциативного массива, где ключи элементов - названия столбцов.


Вместо цикла foreach также можно использовать другие виды циклов. Например, применение цикла while:

$sql = "SELECT * FROM Users";

if($result = $conn-query($sql)){

    while($row = $result-fetch_array()){

         

        $userid = $row["id"];

        $username = $row["name"];

        $userage = $row["age"];

    }

}


В данном случае метод $result-fetch_array() выбирает текущую строку из набора в переменную $row и переходит к следующей. Когда строк не останется, метод возвратит false, и произойдет выход из цикда. Полученное значени $row опять же представляет строку в виде ассоциативного массива.


После окончания работы с полученным набором строк мы можем очистить отведенную для него память с помощью метода free():

$result-free();

Теперь посмотрим на примере. Определим скрипт index.php, которая будет выводить значения из таблицы Users:


DOCTYPE html

html

head

titleMETANIT.COMtitle

meta charset="utf-8" /

head

body

h2Список пользователейh2

$conn = new mysqli("localhost", "root", "mypassword", "testdb2");

if($conn-connect_error){

    die("Ошибка: " . $conn-connect_error);

}

$sql = "SELECT * FROM Users";

if($result = $conn-query($sql)){

    $rowsCount = $result-num_rows; // количество полученных строк

    echo "

Получено объектов: $rowsCount

";

    echo "

";

    foreach($result as $row){

        echo "

";

            echo "

";

            echo "

";

            echo "

";

        echo "

";

    }

    echo "

IdИмяВозраст
" . $row["id"] . " " . $row["name"] . " " . $row["age"] . "
";

    $result-free();

} else{

    echo "Ошибка: " . $conn-error;

}

$conn-close();

?

body

html


Таким образом, при обращении к скрипту index.php браузер отобразит список данных, полученных из БД:

Дополнительно стоит отметить, что с помощью свойства $result-num_rows мы можем получить количество строк, извлеченных из БД.


Процедурный стиль

При процедурном стиле функция mysqli_query() при успешном выполнении команды SELECT возвращает набор строк, который можно перебрать с помощью цикла:

$sql = "SELECT * FROM Users";

if($result = mysqli_query($conn, $sql)){

    foreach($result as $row){

         

        $userid = $row["id"];

        $username = $row["name"];

        $userage = $row["age"];

    }

}


Как и при объектно-ориентированном подходе, полученные строки представляют ассоциативные массивы, где ключи элементов - названия столбцов.


Пример перебоа с помощью цикла while:

$sql = "SELECT * FROM Users";

if($result = mysqli_query($conn, $sql)){

    while($row = mysqli_fetch_array($result)){

         

        $userid = $row["id"];

        $username = $row["name"];

        $userage = $row["age"];

    }

}


Функция mysqli_fetch_array() выбирает текущую строку из набора в переменную $row и переходит к следующей. Когда строк не останется, метод возвратит false, и произойдет выход из цикла.


После окончания работы с полученным набором строк мы можем очистить отведенную для него память с помощью функции mysqli_free_result(), в которую передается полученный набор строк:

mysqli_free_result($result);


Полный пример:

DOCTYPE html

html

head

titleMETANIT.COMtitle

meta charset="utf-8" /

head

body

h2Список пользователейh2

$conn = mysqli_connect("localhost", "root", "mypassword", "testdb3");

if (!$conn) {

  die("Ошибка: " . mysqli_connect_error());

}

$sql = "SELECT * FROM Users";

if($result = mysqli_query($conn, $sql)){

     

    $rowsCount = mysqli_num_rows($result); // количество полученных строк

    echo "

Получено объектов: $rowsCount

";

    echo "

";

    foreach($result as $row){

        echo "

";

            echo "

";

            echo "

";

            echo "

";

        echo "

";

    }

    echo "

IdИмяВозраст
" . $row["id"] . " " . $row["name"] . " " . $row["age"] . "
";

    mysqli_free_result($result);

} else{

    echo "Ошибка: " . mysqli_error($conn);

}

mysqli_close($conn);

?

body

html


Удаление данных в MySQLi


Для удаления данных применяется sql-команда DELETE:


DELETE FROM Таблица

WHERE столбец = значение


Для удаления данных возьмем использованную в прошлых темах таблицу Users со следующим определением:

CREATE TABLE Users (id INTEGER AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), age INTEGER)


Объектно-ориентированный стиль


Вначале определим для вывода всех объектов из БД скрипт index.php:


DOCTYPE html

html

head

titleMETANIT.COMtitle

meta charset="utf-8" /

head

body

h2Список пользователейh2

$conn = new mysqli("localhost", "root", "mypassword", "testdb2");

if($conn-connect_error){

    die("Ошибка: " . $conn-connect_error);

}

$sql = "SELECT * FROM Users";

if($result = $conn-query($sql)){

    echo "

";

    foreach($result as $row){

        echo "

";

            echo "

";

            echo "

";

            echo "

";

        echo "

";

    }

    echo "

ИмяВозраст
" . $row["name"] . " " . $row["age"] . "

                        . $row["id"] . "' /

                        Удалить'

               

";

    $result-free();

} else{

    echo "Ошибка: " . $conn-error;

}

$conn-close();

?

body

html


В таблицы для каждой строки определена форма, которая посылает данные в POST-запросе скрипту delete.php. Чтобы передать в delete.php идентификатор удаляемого объекта, на форме определено скрытое поле для хранения id объекта.


Обратите внимание, что в данном случае применяется не ссылка для удаления типа

a href="http://адрес_нашего_сайта/delete.php?id=1"Удалитьa


которая оправляет данные в GET-запросе, а именно форма, которая отправляет данные в POST-запросе. Почему? Подобные GET-запросы потенциально небезопасны. Допустим, нам пришло электронное письмо, в которое была внедрена картинка посредством тега:

img src="http://адрес_нашего_сайта/delete.php?id=1" /


В итоге при открытии письма 1-я запись в таблице может быть удалена. Уязвимость касается не только писем, но может проявляться и в других местах, но смысл один - GET-запрос к скрипту, который удаляет данные, несет потенциальную уязвимость.


Теперь определим сам скрипт delete.php, который будет выполнять удаление:

if(isset($_POST["id"]))

{

    $conn = new mysqli("localhost", "root", "mypassword", "testdb2");

    if($conn-connect_error){

        die("Ошибка: " . $conn-connect_error);

    }

    $userid = $conn-real_escape_string($_POST["id"]);

    $sql = "DELETE FROM Users WHERE id = '$userid'";

    if($conn-query($sql)){

         

        header("Location: index.php");

    }

    else{

        echo "Ошибка: " . $conn-error;

    }

    $conn-close();  

}

?


В данном случае скрипт получает через POST-запрос значение id и по этому идентификатору выполняет удаление. После чего происходит переадресация на скрипт index.php.


Процедурный стиль


Скрипт index.php:

DOCTYPE html

html

head

titleMETANIT.COMtitle

meta charset="utf-8" /

head

body

h2Список пользователейh2

$conn = mysqli_connect("localhost", "root", "mypassword", "testdb3");

if (!$conn) {

  die("Ошибка: " . mysqli_connect_error());

}

$sql = "SELECT * FROM Users";

if($result = mysqli_query($conn, $sql)){

    echo "

";

    foreach($result as $row){

        echo "

";

            echo "

";

            echo "

";

            echo "

";

        echo "

";

    }

    echo "

ИмяВозраст
" . $row["name"] . " " . $row["age"] . "

                        . $row["id"] . "' /

                        Удалить'

                   

";

mysqli_free_result($result);

} else{

    echo "Ошибка: " . mysqli_error($conn);

}

mysqli_close($conn);

?

body

html


Скрипт delete.php:

if(isset($_POST["id"]))

{

    $conn = mysqli_connect("localhost", "root", "mypassword", "testdb3");

    if (!$conn) {

      die("Ошибка: " . mysqli_connect_error());

    }

    $userid = mysqli_real_escape_string($conn, $_POST["id"]);

    $sql = "DELETE FROM Users WHERE id = '$userid'";

    if(mysqli_query($conn, $sql)){

         

        header("Location: index.php");

    } else{

        echo "Ошибка: " . mysqli_error($conn);

    }

    mysqli_close($conn);    

}

?







Порядок выполнения задания


  1. Изучите краткий теоретический материал к данному практическому занятию.

  2. Создайте базу данных и создайте форму-опрос в котором присутствуют поля: Тема сообщения, Фамилия, Имя, Отчество, Электронный ящик, Текст сообщения. Произведите подключение формы и БД.

  3. Реализуйте с помощью кнопок функцию добавления данных в БД и удаления данных из БД. Кнопку можно скачать в интернете, нарисовать в графическом редакторе, либо получить средствами CSS



Ресурсы и ссылки:

https://metanit.com/php/mysql/3.3.php

https://metanit.com/php/mysql/3.4.php

https://metanit.com/php/mysql/3.6.php



Скачать

Рекомендуем курсы ПК и ППК для учителей

Вебинар для учителей

Свидетельство об участии БЕСПЛАТНО!

Закрыть через 5 секунд
Комплекты для работы учителя