Цвет

SQL запросы в PHP

189₽ 249₽

Категории:

phpsqlhtml

Для взаимодействия с таблицами базы данный mySQL нужны SQL запросы, для того, чтобы взаимодействовать с ней на своем сайте / локальном сервере

Для локального сервера мы будем использовать уже полюбившийся нам XAMPP.

После установки, запустите XAMPP и включите первые 2 службы: Apache Server и SQL

Теперь заходим по адресу

http://localhost/phpmyadmin/

Здесь создайте новую базу данных

Назовём её

mysite

Создаём таблицу с названием test, 3 столбца

id, INT, Length 11, A_I
login, VARCHAR, Length 25
password, VARCHAR, Length 55

Не забудьте отметить A_I (Auto Increment) для столбца id, так при добавлении записей он будет повышаться на 1 автоматически.

Сейчас создаём новую папку по этому пути

xampp/htdocs/mysite.ru

Где mysite.ru - название вашего сайта

В этой папке создаем index.php и создаем базовую структуру HTML

<!DOCTYPE html>
   <head>
   </head>
   <body>
   </body>
</html>

В самом начале, перед строчкой

<!DOCTYPE html>

Подключимся к нашей базе данных mysite

<?php
mysqli_connect("localhost", "root", "", mysite)
or die("Error connecting to the database");
?>

У функции mysqli() 4 аргумента

1 - localhost, подключение к собственному серверу
2 - Пользователь root
3 - Пароль, пустой
4 - Имя базы данных, mysite

or die(); - вывод текста в случае ошибки.

И так, мы создадим несколько форм внутри тела body

Предварительно зададим стили в теге <head>

<head>
   <style>
     #container{
       margin: 150px 0 0 0;
       width: 100%;
     }
     .column{
       text-align: center;
       width: 25%;
       float: left;
     }
     .column > form > p > input{
       padding: 7px;
     }
   </style>
</head>

Теперь создадим 4 колонки с формами для демонстрации в блоке container

<div id="container">
   <div class="column">
     <h3>INSERT</h3>
     <form method="post" action="php_sql.php">
       <p><input name="insert_login" type="text" placeholder="Логин"></p>
       <p><input name="insert_password" type="password" placeholder="Пароль"></p>
       <p><input name="insert_btn" type="submit" value="Войти"></p>
     </form>
   </div>
   <div class="column">
     <h3>SELECT</h3>
     <form method="post" action="php_sql.php">
       <p><input name="select_btn" type="submit" value="Вывести"></p>
     </form>
</div>
   <div class="column">
     <h3>UPDATE</h3>
     <form method="post" action="php_sql.php">
       <p><input name="update_id" type="text" placeholder="id"></p>
       <p><input name="update_login" type="text" placeholder="Логин"></p>
       <p><input name="update_password" type="password" placeholder="Пароль"></p>
       <p><input name="update_btn" type="submit" value="Обновить"></p>
     </form>
   </div>
   <div class="column">
     <h3>DELETE</h3>
     <form method="post" action="php_sql.php">
       <p><input name="delete_login" type="text" placeholder="Логин"></p>
       <p><input name="delete_btn" type="submit" value="Удалить"></p>
     </form>
   </div>
</div>

Мы подготовили базу для отправки запросов. Осталось добавить запись в нашу таблицу /phpmyadmin

Выберите вашу базу данных, вашу таблицу (mysite) и нажмите

INSERT (вставить)

вверху страницы. Добавьте пару записей (не заполняя поле id, так как оно будет автоматически заполняться). Вот какие данные я вставлю

login: test1
password: p_test1
login: test2
password: p_test2

Теперь возвращаемся к нашему файлу и заходим в первую из четырёх форм

Запрос INSERT добавляет новую запись в таблицу, как вы уже поняли

Помните, что в случае, если вы не добавите в таблицу обязательное значение (в колонке не задано значение по дефолту и колонка не A_I - auto increment), то вам выдаст ошибку).

В самом начале документа пишем наш пост запрос, до тега

<!DOCTYPE html>

Пишем здесь наш PHP код

<?php

?>
<!DOCTYPE html>

Напомню, что доверять вводимым данным пользователя нельзя. Если данные не будут хэшироваться (как в случае с паролем с помощью функции hash()), то нужно обязательно проверять их с помощью функции preg_match();

Сейчас это писать не нужно, это пример
if(preg_match("/[A-Za-z0-9]/", $str)){
----
}

Для начала подключаемся к базе данных, mysite - база данных, test - имя таблицы

$connection=mysqli_connect("localhost","root", "", "mysite");

Проверяем отправку POST запроса по кнопке и передаем в строку запроса наши данные. После чего передаем строку функции mysqli_query() как второй аргумент, 1 аргумент $connection (т.е. подключение)

$connection=mysqli_connect("localhost","root", "", "mysite");
if(isset($_POST['insert_btn'])){
     $login = $_POST['insert_login'];
     $password = $_POST['insert_password'];
     $query = "INSERT test SET login='$login', password='$password'";
     $result = mysqli_query($connection, $query);
}

Теперь проверим таблицу и видим в ней новые переданные значения.


Отлично, переходим ко второй форме и второму запросу, а именно SELECT

SELECT нужен, как понятно из названия, для выбора конкретной строки и даже конкретных столбиков

Формат у команды следующий

SELECT "имена_столбцов_через_запятую или *" FROM "имя_таблицы" WHERE "условие" (необязательно ORDER BY "имя_столбца" ASC|DESC) (необязательно LIMIT "число") ;

Что же значат ASC и DESC? Когда у вас есть числовая колонка и вы хотите сортировать её на этапе запроса (от большего к меньшему DESC, от меньшего к большему ASC), то после основного запроса вы пишите:

ORDER BY "имя колонки" ASC|DESC

LIMIT "число" означает количество строчек, которые вы хотите получить как результат

Вот пример полноценного запроса к нашей таблице

SELECT login, password FROM test WHERE id < 10 ORDER BY id DESC LIMIT 2

Давайте теперь по нажатию кнопки будем селектировать и выводить наших пользователей и их пароли.

if(isset($_POST['select_btn'])){
   $query = "SELECT login, password FROM test WHERE id < 10 ORDER BY id DESC LIMIT 2";
   $result=mysqli_query($connection, $query);
   if(mysqli_affected_rows($connection)!=0){//if(mysqli_num_rows($result) != 0){
     for($i=0; $i < mysqli_num_rows($result); $i++){
       $arr = mysqli_fetch_assoc($result);
       echo "<p>The login is ".$arr['login'] ." and the password is ".$arr['password'] ."</p>";
     }
   }
   else{
     echo "<p>Строк не найдено</p>";
   }
}

Теперь перейдём к апдейту. Здесь мы будем обновлять только ту запись, id которой совпадает с id в таблице.

Типичная команда UPDATE выглядит так:

UPDATE test SET login='$login', password='$password' WHERE id='$id' "

И так, проверяем нажата ли кнопка. Конвертируем id из строки в число. После чего проверяем тип данных id (на всякий случай), и отправляем команду с обновлением на сервер.

if(isset($_POST['update_btn'])){
   $id = intval($_POST['update_id']);
   if(gettype($id)=="integer"){
     $login = $_POST['update_login'];
     $password = $_POST['update_password'];
     $query = "UPDATE test SET login='$login', password='$password' WHERE id='$id'";
     $result = mysqli_query($connection, $query);
     if(mysqli_affected_rows($connection)!=0){
       echo "<p>Запись обновлена</p>";
     }else{
       echo "<p>Запись не найдена.</p>";
     }
   }
   else{
     echo "<p>Неправильный формат id.</p>";
   }
}

Ну и последнее, будем удалять запись в таблице по логину.

Тут все просто, пытаемся найти логин в таблице, если он найдется, то строка удалится

if(isset($_POST['delete_btn'])){
   $login = $_POST['delete_login'];
   $query = "DELETE FROM test WHERE login='$login'";
   $result = mysqli_query($connection, $query);
   if(mysqli_affected_rows($connection)!=0){
     echo "<p>Запись удалена</p>";
   }else{
     echo "<p>Запись не найдена.</p>";
   }
}

Теперь у нас есть файл с 4 основными запросами на PHP. Исходник можете скачать здесь. Если после скачивания поменяете название, то не забудьте поменять атрибут action у форм.