Создание страниц для добавления в mysql. Запрос SQL на добавление и удаление записей. Как вставить запись с помощью PHP

Windows 8

Урок будет основан на форме обратной связи , необходимой практически на любом сайте.

Шаг первый: Создание базы данных в MySQL

Открываем phpMyAdmin (входит в базовый пакет Denwer `а), и создаем базу с названием "test_base ", кодировку выбираем "cp1251_general_ci ".

Шаг второй: Создание таблицы в MySQL с помощью SQL-запроса

Создать таблицу можно, конечно, и с помощью стандартных средств phpMyAdmin , но так наглядно будет видна структура создаваемой таблицы.

Создаем таблицу с названием "test_table " и с шестью полями с названиями:
"name " - здесь будут храниться имена пользователей;
"email " - здесь будут храниться адреса электронных ящиков пользователей;
"theme " - здесь будет храниться тема сообщения;
"message " - здесь будут храниться сообщения;
"data " - здесь будет храниться дата отправки сообщения;
"id " - идентификационный номер записи (строки), ключевое поле.

SQL-запрос:
create table test_table(
id int(11) not null auto_increment,
name varchar(255) not null,
email varchar(255) not null,
theme varchar(255) not null,
message text not null,
data date not null,
primary key (id)
);

Шаг третий: Создание формы

index.html:

Форма с сохранением в MySQL

Пример формы с сохранением данных в MySQL

























Отправка запроса
Имя:
E-Mail:
Тема сообщения:
Сообщение:
























Шаг четвертый: Создание обработчика формы "save_form.php " с сохранением полученных данных в MySQL

save_form.php:





/* Таблица MySQL, в которой будут храниться данные */
$table = "test_table";

/* Создаем соединение */

/* Определяем текущую дату */
$cdate = date("Y-m-d");

/* Составляем запрос для вставки информации в таблицу
name...date - название конкретных полей в базе;
в $_POST["test_name"]... $_POST["test_mess"] - в этих переменных содержатся данные, полученные из формы */
$query = "INSERT INTO $table SET name="".$_POST["test_name"]."", email="".$_POST["test_mail"]."",
theme="".$_POST["test_theme"]."", message="".$_POST["test_mess"]."", data="$cdate"";

/* Закрываем соединение */
mysql_close();

/* В случае успешного сохранения выводим сообщение и ссылку возврата */
echo ("


Данные успешно сохранены!



Вернуться назад
");

Шаг пятый: Вывод сохраненных данных "view_data.php "

view_data.php:

/* Соединяемся с базой данных */
$hostname = "localhost"; // название/путь сервера, с MySQL
$username = "root"; // имя пользователя (в Denwer`е по умолчанию "root")
$password = ""; // пароль пользователя (в Denwer`е по умолчанию пароль отсутствует, этот параметр можно оставить пустым)
$dbName = "test_base"; // название базы данных


$table = "test_table";

/* Создаем соединение */
mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");

/* Выбираем базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die (mysql_error());

/* Составляем запрос для извлечения данных из полей "name", "email", "theme",
"message", "data" таблицы "test_table" */
$query = "SELECT id, name, email, theme, message, data FROM $table";

/* Выполняем запрос. Если произойдет ошибка - вывести ее. */


echo ("

Вывод данных из MySQL

Вывод ранее сохраненных данных из таблицы MySQL










");



echo "

\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n\n";
}

Echo ("

# Дата обращения Имена пользователей E-Mail пользователей Тема сообщения Сообщения пользователей
".$row["id"]."".$row["data"]."".$row["name"]."".$row["email"]."".$row["theme"]."".$row["message"]."
\n");

/* Закрываем соединение */
mysql_close();

Шаг шестой: Удаление записей из базы данных "del_data.php "

del_data.php:

/* Соединяемся с базой данных */
$hostname = "localhost"; // название/путь сервера, с MySQL
$username = "root"; // имя пользователя (в Denwer`е по умолчанию "root")
$password = ""; // пароль пользователя (в Denwer`е по умолчанию пароль отсутствует, этот параметр можно оставить пустым)
$dbName = "test_base"; // название базы данных

/* Таблица MySQL, в которой хранятся данные */
$table = "test_table";

/* Создаем соединение */
mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");

/* Выбираем базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die (mysql_error());

/* Если была нажата ссылка удаления, удаляем запись */
$del = $query = "delete from $table where (id="$del")";
/* Выполняем запрос. Если произойдет ошибка - вывести ее. */
mysql_query($query) or die(mysql_error());



/* Выполняем запрос. Если произойдет ошибка - вывести ее. */
$res = mysql_query($query) or die(mysql_error());

$row = mysql_num_rows($res);

/* Выводим данные из таблицы */
echo ("

Вывод и удаление данных из MySQL

Вывод и удаление ранее сохраненных данных из таблицы MySQL











");

/* Цикл вывода данных из базы конкретных полей */
while ($row = mysql_fetch_array($res)) {
echo "

\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
/* Генерируем ссылку для удаления поля */
echo "\n";
echo "\n";
}

Echo ("

# Дата обращения Имена пользователей E-Mail пользователей Тема сообщения Сообщения пользователей Удаление
".$row["id"]."".$row["data"]."".$row["name"]."".$row["email"]."".$row["theme"]."".$row["message"]."Удалить
\n");

/* Закрываем соединение */
mysql_close();

Шаг седьмой: Редактирование и обновление записей в базе "update_data.php "

update_data.php:

/* Соединяемся с базой данных */
$hostname = "localhost"; // название/путь сервера, с MySQL
$username = "root"; // имя пользователя (в Denwer`е по умолчанию "root")
$password = ""; // пароль пользователя (в Denwer`е по умолчанию пароль отсутствует, этот параметр можно оставить пустым)
$dbName = "test_base"; // название базы данных

/* Таблица MySQL, в которой хранятся данные */
$table = "test_table";

/* Создаем соединение */
mysql_connect($hostname, $username, $password) or die ("Не могу создать соединение");

/* Выбираем базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db($dbName) or die (mysql_error());

/* Если была нажата кнопка редактирования, вносим изменения */
if(@$submit_edit) {
$query = "UPDATE $table SET name="$test_name", email="$test_mail", theme="$test_theme", message="$test_mess" WHERE id="$update"";
/* Выполняем запрос. Если произойдет ошибка - вывести ее. */
mysql_query($query) or die (mysql_error());
}

/* Заносим в переменную $res всю базу данных */
$query = "SELECT * FROM $table";
/* Выполняем запрос. Если произойдет ошибка - вывести ее. */
$res = mysql_query($query) or die(mysql_error());
/* Узнаем количество записей в базе данных */
$row = mysql_num_rows($res);

/* Выводим данные из таблицы */
echo ("

Редактирование и обновление данных

Редактирование и обновление данных в таблице MySQL


");

/* Цикл вывода данных из базы конкретных полей */
while ($row = mysql_fetch_array($res)) {
echo "

\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "\n";
echo "
#".$row["id"]."
".$row["data"]."
Имя пользователя:
E-Mail пользователя:
Тема сообщения:
Сообщение:
\n\n";
}

/* Закрываем соединение */
mysql_close();

Ну вот и все, приятного кодинга:1133:

_________________________________

В этом посте хочу рассказать, как передать в Базу Данных, введенные данные в форму . И так мы создаем простую форму, где у нас будет два поля: имя пользователя и его электронная почта:

Ваше имя:
Ваш E-mail:


Эта форма может применятся для регистрации нового пользователя, для рассылки новостей, для сбора статистики, да для чего угодно... В общем в эту форму пользователь забивает свои данные: имя и почту, нажимает на кнопку и дальше данные переходят в php скрипт:

$name = $_POST["name"]; $email = $_POST["email"]; $result = mysqli_query("INSERT INTO user (name, email) VALUES ("$name", "$email")"); if ($result) { echo "Данные успешно сохранены!"; } else { echo "Произошла ошибка, пожалуйста повторите попытку."; }


Что же в этом скрипте происходит? Сейчас разберемся!
Введенные в форму данные, методом POST переходят в php скрипт (который написан выше), и при помощи глобального массива $_POST данные формируются в переменные $name и $email:

$name = $_POST["name"]; $email = $_POST["email"];


После того, как переменные готовы для занесения в базу, составляем запрос. Но прежде Ваши скрипты должны быть уже подключены к БД, как подключиться к БД, я писал в этой теме: . Сам запрос выглядит так:

$result = mysqli_query("INSERT INTO user (name, email) VALUES ("$name", "$email")");


В этом коде мы обозначили, что в ячейки name и email , которые находятся в таблице user , будут добавлены следующие переменные: $name и $email .
Далее, если все прошло успешно, мы получим сообщение из условия:

Данные успешно сохранены!


Если же возникли какие то проблемы и данные не были занесены, мы получим сообщение об ошибке:

Произошла ошибка, пожалуйста повторите попытку.


Вот и все!

*** *** *** *** ***

При желании можно добавить больше полей для ввода информации, например нам необходимо добавить поле для ввода города пользователя. У нас уже есть готовый скрипт (написан выше), теперь просто добавим поле Ваш город , переменную назовем: $city . И так в форму ввода данных, после:

Ваш E-mail:


добавляем:

Ваш город:


В php скрипте, после:

$email = $_POST["email"];


добавляем:

$city = $_POST["city"];


Ну и конечно в запросе добавляем тоже, вот так:

$result = mysqli_query("INSERT INTO user (name, email, city) VALUES ("$name", "$email", "$city")");


Вот, что должно получится в итоге:
Форма ввода:

Ваше имя:
Ваш E-mail:
Ваш город:


Скрипт:

$name = $_POST["name"]; $email = $_POST["email"]; $city = $_POST["city"]; $result = mysqli_query("INSERT INTO user (name, email, city) VALUES ("$name", "$email", "$city")"); if ($result == true) { echo "Данные успешно сохранены!"; } else { echo "Произошла ошибка, пожалуйста повторите попытку."; }


Как видите ни чего сложного! При необходимости можно добавить ещё поле, и ещё, и ещё...

В этой статье мы разберём, пожалуй, одни из самых важных SQL-запросов . Это запросы на добавление и удаление записей из таблицы базы данных . Поскольку, ОЧЕНЬ часто приходится добавлять новые записи в таблицу , причём делать это в автоматическом режиме, то данный материал обязателен к изучению.

Для начала SQL-запрос на добавление новой записи в таблицу :

INSERT INTO users (login, pass) values("TestUser", "123456")

При добавлении записи вначале идёт команда "INSERT INTO ", затем название таблицы, в которую мы вставляем запись. Далее идёт в круглых скобках названия полей, которые мы хотим заполнить. А затем в круглых скобках после слова "values " начинаем перечислять значения тех полей, которые мы выбрали. После выполнения этого запроса в нашей таблице появится новая запись.

Иногда требуется обновить запись в таблице , для этого существует следующий SQL-запрос :

UPDATE users SET login = "TestUser2", pass="1234560" WHERE login="TestUser"

Данный запрос является более сложным, так как он имеет конструкцию "WHERE ", но о ней чуть ниже. Вначале идёт команда "UPDATE ", затем имя таблицы, а после "SET " мы описываем значения всех полей, которые мы хотим изменить. Было бы всё просто, но встаёт вопрос: "А какую именно запись следует обновлять? ". Для этого существует "WHERE ". В данном случае мы обновляем запись, поле "login " у которой имеет значение "TestUser ". Обратите внимание, что если таких записей будет несколько, то обновятся абсолютно все ! Это очень важно понимать, иначе Вы рискуете потерять свою таблицу.

Давайте немного ещё поговорим о "WHERE ". Помимо простых проверок на равенство существуют так же и неравенства, а также логические операции: AND и OR .

UPDATE users SET login = "TestUser2", pass="1234560" WHERE id < 15 AND login="TestUser"

Данный SQL-запрос обновит те записи, id которых меньше 15 И поле "login " имеет значение "TestUser ". Надеюсь, Вы разобрались с конструкцией "WHERE ", потому что это очень важно. Именно "WHERE " используется при выборке записей из таблиц , а это самая частоиспользуемая задача при работе с базами данных.

И, напоследок, простой SQL-запрос на удаление записей из таблицы :

DELETE FROM users WHERE login="TestUser2"

После команды "DELETE FROM " идёт имя таблицы, в которой требуется удалить записи. Дальше описываем конструкцию "WHERE". Если запись будет соответствовать описанным условиям, то она будет удалена. Опять же обратите внимание, в зависимости от количества записей, удовлетворяющих условию после "WHERE ", может удалиться любое их количество.

В этом уроке мы рассмотрим, как вставлять данные в БД непосредственно из ваших РНР-скриптов.

Вставка данных с использованием SQL

Вы используете SQL для вставки данных в БД точно так же, как используете SQL для создания БД и таблиц. Синтаксис SQL-запроса таков:

INSERT INTO ИмяТаблицы(столбец1, столбец 2, ...) VALUES(значение1, значение 2, ...)

Как видите, вы можете обновлять несколько столбцов в одном SQL-операторе, указывая их в разделённом запятыми списке. Но разумеется, можно также специфицировать только один столбец и одно значение. Столбцы, не упомянутые в данном SQL-операторе, останутся пустыми.

Пример: Вставка новой персоны в таблицу

В этом примере мы используем БД из Урока 18 . Скажем, мы хотим вставить персону в БД. Это может быть Gus Goose с номером телефона 99887766 и датой рождения 1964-04-20 .

Оператор SQL может выглядеть так:

$strSQL = "INSERT INTO people(FirstName,LastName,Phone,BirthDate) VALUES("Gus","Goose","99887766 ","1964-04-20")";

Как видите, SQL-операторы могут быть весьма длинными, и можно легко потерять след. Поэтому лучше записывать SQL-оператор слегка иначе:

strSQL = "INSERT INTO people("; strSQL = strSQL . "FirstName, "; strSQL = strSQL . "LastName, " strSQL = strSQL . "Phone, "; strSQL = strSQL . "birth) "; strSQL = strSQL . "VALUES ("; strSQL = strSQL . ""Gus", "; strSQL = strSQL . ""Goose", "; strSQL = strSQL . ""99887766", "; strSQL = strSQL . ""1964-04-20")"; mysql_query($strSQL) or die(mysql_error());

Здесь SQL-оператор строится с разделением предложения на небольшие части с последующим объединением их в переменную $strSQL .

На практике нет разницы в применении того или другого метода, но при работе с большими таблицами становится крайне важной возможность "держать след", так что выбирайте наиболее подходящий метод.

Попробуем выполнить следующий код для вставки Gus Goose в БД:

Вставка данных в БД // Соединение с сервером БД mysql_connect("mysql.myhost.com", "user", "sesame") or die (mysql_error ()); // Выбор БД mysql_select_db("mydatabase") or die(mysql_error()); // Построение SQL-оператора $strSQL = "INSERT INTO people("; $strSQL = $strSQL . "FirstName, "; $strSQL = $strSQL . "LastName, "; $strSQL = $strSQL . "Phone, "; $strSQL = $strSQL . "BirthDate) "; $strSQL = $strSQL . "VALUES("; $strSQL = $strSQL . ""Gus", "; $strSQL = $strSQL . ""Goose", "; $strSQL = $strSQL . ""99887766", "; $strSQL = $strSQL . ""1964-04-20")"; // SQL-оператор выполняется mysql_query($strSQL) or die (mysql_error()); // Закрытие соединения mysql_close(); ?>

БД обновлена!

Сохранение пользовательского ввода в БД

Вы, вероятно, уже сообразили, что для этого можно создать форму, как в Уроке 11 , а значения из формы можно вставить в SQL-оператор. Предположим, у вас имеется простая форма:

Эта форма отправляется в файл insert.php , где вы, как показано в Уроке 11, можете получить пользовательский ввод, запросив содержимое формы. В данном конкретном случае SQL-оператор может быть таким:

strSQL = "INSERT INTO people(FirstName) values("" . $_POST["FirstName"] . "")"

Аналогично можно запросить данные кук, сессий строк запроса etc.

Наиболее распространённые ошибки начинающих

Сначала вы, возможно, будете получать кучу сообщений об ошибках при попытках обновить БД. При работе с БД совершенно недопустимы никакие погрешности. Неверно поставленная запятая может означать, что БД не обновляется, и вы получите сообщение об ошибке. Ниже мы описываем наиболее распространённые ошибки.

Неверный тип данных

Важно, чтобы данные и тип данных столбца соответствовали друг другу. Каждый столбец может содержать данные определённого типа. Следующий скриншот показывает типы данных таблицы "people" из нашего примера.

Выдаётся ошибка, если вы, например, попытаетесь вставить текст или число в поле данных. Следовательно, устанавливайте тип данных как можно точнее.

Ниже перечислены наиболее употребительные типы данных:

Значение Тип Данных Размер
CHR
Текст или комбинация текста и чисел. Может также использоваться для числе, не используемых при расчётах (напр., номера телефонов). До 255 символов - либо длина, определяемая в "Length"
TEXT
Большие блоки текста или комбинация текста и чисел. До 65,535 символов
INT
Числовые данные для математических вычислений. 4 байта
DATE
Даты в формате ГГГ-ММ-ДД 3 байта
TIME
Время в формате чч:мм:сс 3 байта
DATETIME
Дата и время в формате ГГГ-ММ-ДД чч:мм:сс 8 байт

SQL-операторы с кавычками или обратными слэшами

Если вы попытаетесь вставить текст, содержащий символы одинарной кавычки ("), двойной кавычки (") или обратного слэша (\), запись не будет вставлена в БД. Решением будет подстановка обратных слэшей перед символами, которые должны мнемонизироваться при вставке в запросы БД.

Последнее обновление: 1.11.2015

Для добавления данных используется выражение "INSERT":

$query ="INSERT INTO tovars VALUES(NULL, "Samsung Galaxy III","Samsumg")";

Выражение "INSERT" вставляет в таблицу одну строку. После ключевого слова INTO указывается название таблицы, а после VALUES в скобках указываются набор значений для всех столбцов. Так как у нас в таблице три столбца, то мы указываем три значения.

Так как в прошлой теме при создании таблицы мы указывали следующую очередность столбцов: id, name, company, то в данном случае для столбца id передается значение NULL, для name - "Samsung Galaxy III", а для company - "Samsumg".

Поскольку столбец id определен как AUTO_INCREMENT, то нам необязательно указывать для него определенное числовое значение, и можно передать значение NULL, а MySQL присвоит столбцу следующее доступное значение.

Теперь рассмотрим добавление данных на примере. Создадим файл create.php со следующим содержимым:

Данные добавлены"; } // закрываем подключение mysqli_close($link); } ?>

Добавить новую модель

Введите модель:

Производитель:

Здесь код взаимодействия с базой данных объединен с функциональностью форм: c помощью формы мы вводим данные для добавления в бд.

Безопасность и MySQL

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

Таким образом, мы применяем экранизацию символов фактически два раза: сначала для sql-выражения с помощью функции mysqli_real_escape_string() , а затем для html с помощью функции htmlentities() . Это позволит нам защититься сразу от двух видов атак: XSS-атак и SQL-инъекций.