
PHP-скрипт — это удобный способ принимать информацию, вводимую из HTML-формы веб-сайта, и вставлять ее в базу данных MySQL/MariaDB. В этом уроке мы рассмотрим, как создать базовый PHP-скрипт для вставки данных, а также HTML-форму для приема пользовательского ввода с веб-страницы и передачи его PHP-скрипту.
Требования
- Облачный сервер под управлением Linux (любой дистрибутив)
- Apache, MySQL/MariaDB и PHP установлены и запущены.
Apache, MySQL/MariaDB и PHP установлены и запущены по умолчанию в стандартной установке. Если ваш сервер был создан с минимальной установкой, вам необходимо установить и настроить Apache, MySQL/MariaDB и PHP, прежде чем продолжить.
Создание базы данных MySQL/MariaDB и пользователя
В этом руководстве мы создадим веб-страницу для воображаемого ресторана. Веб-страница позволит клиентам оставлять отзывы о ресторане.
Войдите в клиент MySQL/MariaDB с командной строкой:
mysql -u root -p
Создайте базу данных для отзывов:
CREATE DATABASE reviews;
Переключитесь на эту базу данных:
USE reviews;
Для этого примера мы создадим только одну таблицу. В ней будет три поля:
- Поле ID: Оно будет настроено на автоинкремент.
- Имя рецензента: текстовое поле с ограничением в 100 символов.
- Звездный рейтинг: числовая оценка от 1 до 5 TINYINT.
- Подробности рецензии: Текстовое поле с ограничением примерно в 500 слов. VARCHAR(4000)
Создайте таблицу:
CREATE TABLE user_review (
id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
reviewer_name CHAR(100),
star_rating TINYINT,
details VARCHAR(4000)
);
В целях безопасности всегда лучше создавать уникального пользователя для каждой базы данных, особенно если доступ к этой базе данных будет осуществляться с веб-сайта.
Следующая команда создаст пользователя review_site с паролем JxSLRkdutW и предоставит ему доступ к базе данных отзывов:
GRANT ALL ON reviews.* to review_site@localhost IDENTIFIED BY 'JxSLRkdutW';
Создание HTML-формы веб-страницы
Создайте файл reviews.html в вашем веб-пространстве и откройте его для редактирования. Например, для создания файла в /var/www/html команда выглядит следующим образом:
sudo nano /var/www/html/reviews.html
Поместите следующее содержимое в этот файл:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
<p>Let us know how we're doing!</p>
<form action="addreview.php" method="POST">
Your name: <input type="text" name="reviewer_name"><br><br>
How many stars would you give us?
<select name="star_rating">
<option value="1">1 star</option>
<option value="2">2 stars</option>
<option value="3">3 stars</option>
<option value="4">4 stars</option>
<option value="5">5 stars</option>
</select><br><br>
Your review: <br>
<textarea name="details" rows="10" cols="30"></textarea><br><br>
<input type="submit" value="Submit" name="submit">
</form>
</body>
</html>
Несколько замечаний по поводу этой базовой HTML-формы:
- Эта форма использует метод POST для передачи данных PHP-скрипту addreview.php.
- Имя каждого поля ввода будет использовано в качестве имени переменной PHP на следующем шаге. Обычно лучше использовать имя поля таблицы базы данных для этих значений.
- Никогда не доверяйте вводимым пользователем данным. В данном примере для оценки звезды нам требуется число от 1 до 5. Если бы мы попросили пользователей вручную ввести их звездный рейтинг, то неизбежно люди ввели бы не то, что нужно. Когда это возможно, лучше попросить пользователей выбрать из выпадающего меню с уже заполненными правильными значениями.
Создание PHP-скрипта
Создайте файл addreview.php в вашем веб-пространстве и откройте его для редактирования. Например, для создания файла в /var/www/html команда будет следующей:
sudo nano /var/www/html/addreview.php
Каждый PHP-скрипт должен начинаться с открывающего тега PHP:
<?php
Далее добавляем блок подключения к MySQL/MariaDB с указанием местоположения сервера (localhost), имени базы данных, имени пользователя и пароля базы данных.
$hostname = "localhost";
$username = "review_site";
$password = "JxSLRkdutW";
$db = "reviews";
Затем мы добавляем секцию для подключения к базе данных и выдаем ошибку, если подключение не удалось:
$dbconnect=mysqli_connect($hostname,$username,$password,$db);
if ($dbconnect->connect_error) {
die("Database connection failed: " . $dbconnect->connect_error);
}
Далее мы «переводим» данные из HTML-формы в переменные PHP:
if(isset($_POST['submit'])) {
$reviewer_name=$_POST['reviewer_name'];
$star_rating=$_POST['star_rating'];
$details=$_POST['details'];
Затем вставляем эту информацию в базу данных:
$query = "INSERT INTO user_review (reviewer_name, star_rating, details)
VALUES ('$reviewer_name', '$star_rating', '$details')";
Добавьте вложенный оператор if, который выдаст сообщение об ошибке, если процесс завершится неудачей, или поблагодарит пользователя за его отзыв, если процесс завершится успешно:
if (!mysqli_query($dbconnect, $query)) {
die('An error occurred when submitting your review.');
} else {
echo "Thanks for your review.";
}
И, наконец, закройте открывающий оператор if и добавьте закрывающий тег PHP:
}
?>
Если вы получите сообщение об ошибке «Не удалось установить соединение с базой данных: Access denied for user ‘review_site’@’localhost’ (using password: YES)», вы можете проверить регистрационные данные, войдя в MySQL/MariaDB из командной строки с помощью команды:
mysql -u review_site -p reviews
Чтобы проверить скрипт, посетите сайт reviews.html в браузере и отправьте отзыв. Затем войдите в базу данных отзывов с помощью клиента MySQL/MariaDB из командной строки:
mysql -u root -p reviews
Используйте SELECT * FROM user_review для просмотра всего содержимого таблицы:
MariaDB [reviews]> SELECT * FROM user_review;
+----+---------------+-------------+---------------------------------------------------------+
| id | reviewer_name | star_rating | details |
+----+---------------+-------------+---------------------------------------------------------+
| 1 | Ben | 5 | Love the calzone! |
| 2 | Leslie | 1 | Calzones are the worst. |
+----+---------------+-------------+---------------------------------------------------------+
2 rows in set (0.00 sec)
Полный текст PHP-скрипта:
<?php
$hostname = "localhost";
$username = "review_site";
$password = "JxSLRkdutW";
$db = "reviews";
$dbconnect=mysqli_connect($hostname,$username,$password,$db);
if ($dbconnect->connect_error) {
die("Database connection failed: " . $dbconnect->connect_error);
}
if(isset($_POST['submit'])) {
$reviewer_name=$_POST['reviewer_name'];
$star_rating=$_POST['star_rating'];
$details=$_POST['details'];
$query = "INSERT INTO user_review (reviewer_name, star_rating, details)
VALUES ('$reviewer_name', '$star_rating', '$details')";
if (!mysqli_query($dbconnect, $query)) {
die('An error occurred. Your review has not been submitted.');
} else {
echo "Thanks for your review.";
}
}
?>
- Веб-разработка