Добавление в бд php. Добавление данных в PHP

И приведены
. А сейчас мы поговорим, как добавлять изображения в базу MySQL через форму, используя PHP .

Создание поля в MySQL базе для добавления изображения

Для начала хочу сказать, что для хранения изображений в базе данных MySQL необходимо определить одно из полей таблицы как производное от типа BLOB.

Сокращение BLOB означает большой двоичный объект. Тип хранения данных BLOB обладает несколькими вариантами:

  • TINYBLOB — Может хранить до 255 байт
  • BLOB может хранить до 64 килобайт информации
  • MEDIUMBLOB — до 16 мегабайт
  • LONGBLOB до 4 гигабайт

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

Подготовка формы на странице для добавления изображения в базу данных MySQL

В моём случае задача была добавлять два изображения в базу через форму, используя PHP . У нас есть форма с двумя полями и кнопкой отправить:

form name=»form1″ method=»post» action=»add_image.php»
enctype=»multipart/form-data»

Напомню, что атрибут action указывает файл, который будет выполнять загрузку файлов изображения. Атрибут enctype указывает на способ кодирования содержимого формы и информацию о подгрузке файлов. Посмотрите, как правильно заполнять атрибут enctype чтобы, избежать .

Примечание: поддержка загрузки нескольких файлов была введена в версии 3.0.10.

Написание кода PHP для сохранения изображения в базе данных MySQL

Так как мы отправляем два файла в атрибуте name после слова указываем «userfile» с квадратными скобками, этим мы даем понять, что отправляем несколько файлов с помощью массива, в котором находятся атрибуты файлов:

$_FILES[‘userfile’][‘name’]

Оригинальное имя файла на клиентской машине.

$_FILES[‘userfile’][‘type’]

mime-тип файла, если браузер предоставил эту информацию.
Пример: "image/gif" .

$_FILES[‘userfile’][‘size’]

$_FILES[‘userfile’][‘tmp_name’]

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

Как получить значения каждого файла?

К примеру, предположим, что отправлены файлы с именами /home/test/1.jpg и /home/test/2.jpg.

В этом случае $_FILES[‘userfile’][‘name’]
будет содержать значение 1.jpg,
а $_FILES[‘userfile’][‘name’]
— значение 2.jpg

Аналогично, $_FILES[‘userfile’][‘size’] будет содержать значение размера файла 1.jpg, и так далее. Теперь рассмотрим код файла add_image.php, который был указан в атрибуте формы action .

1024*1024||$image_size==0) { $ErrorDescription="Каждое изображение не должно привышать 1Мб! Изображение в базу не может быть добавлено."; return ""; } // Если файл пришел, то проверяем графический // ли он (из соображений безопасности) if(substr($_FILES["userfile"]["type"][$num], 0, 5)=="image") { //Читаем содержимое файла $image=file_get_contents($_FILES["userfile"]["tmp_name"][$num]); //Экранируем специальные символы в содержимом файла $image=mysql_escape_string($image); return $image; }else{ ErrorDescription="Вы загрузили не изображение, поэтому оно не может быть добавлено."; return ""; } }else{ $ErrorDescription="Вы не загрузили изображение, поле пустое, поэтому файл в базу не может быть добавлен."; return ; } return $image; } ?>

Итак, в этой статье мы говорили о том, как сохранить изображение в базе данных MySQL, используя PHP.

В этой статье мы рассмотрим, как использовать PHP для вставки строк в базу данных MySQL.

Шаг 1 — Создание таблицы

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

После входа вы phpMyAdmin вы увидите такой интерфейс:

Создадим в базе данных u266072517_name таблицу с именем Students, нажав на кнопку «Создать таблицу». После этого мы увидите новую страницу, на которой задаем все необходимые параметры таблицы:

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

Параметры столбцов:

  • Name — это имя столбца, которое отображается в верхней части таблицы.
  • Type — тип столбца. Например, мы выбрали varchar, потому что будем вводить строковые значения.
  • Length/Values — используется для указания максимальной длины, которую может иметь запись в этом столбце.
  • Index — мы использовали «Первичный» индекс для поля «ID». При создании таблицы рекомендуется применять в качестве первичного ключа только один столбец. Он используется для перечисления записей в таблице и требуется при настройке таблицы. Я также отметил «A_I», что означает «Auto Increment» — параметр автоматического присваивания номера записей (1,2,3,4 …).
    Нажмите кнопку «Сохранить», и таблица будет создана.

Шаг 2. Написание PHP-кода для вставки данных в MySQL.

Вариант 1 — метод MySQLi

Сначала необходимо установить соединение с базой данных. После этого используем SQL-запрос INSERT. Полный пример кода:

" . mysqli_error($conn); } mysqli_close($conn); ?>

Первая часть кода (3 — 18 строка) предназначена для подключения к базе данных.

Начнем со строки № 19:

$sql = "INSERT INTO Students (name, lastname, email) VALUES ("Thom", "Vial", "[email protected]")";

Она вставляет данные в базу MySQL. INSERT INTO — это оператор, который добавляет данные в указанную таблицу. В нашем примере данные добавляются в таблицу Students.

Далее идет перечисление столбцов, в которые вставляются значения: name, lastname, email. Данные будут добавлены в указанном порядке. Если бы мы написали (email, lastname, name), значения бы были добавлены в другом порядке.

Следующая часть — это оператор VALUES. Здесь мы указываем значения для столбцов: name = Thom, lastname = Vial, email = [email protected].

Мы запустили запрос с использованием PHP-кода. В программном коде SQL-запросы должны быть экранированы кавычками. Следующая часть кода (20-22 строка) проверяет, был ли наш запрос успешным:

if (mysqli_query($conn, $sql)) { echo "New recordcreatedsuccessfully"; }

Этот код выводит сообщение об успешном выполнении запроса.

И последняя часть (22 — 24 строка) отображает уведомление, если запрос не был успешным:

else { echo "Error: " . $sql . "
" . mysqli_error($conn); }

Вариант 2 — метод объекта данных PHP (PDO)

Сначала нам нужно подключиться к базе данных путем создания нового объекта PDO. При работе с ним будем использовать различные методы PDO. Методы объектов вызываются следующим образом:

$the_Object->the_Method();

PDO позволяет «подготовить» SQL-код до его выполнения. SQL-запрос оценивается и «исправляется» перед запуском. Например, простейшая атака с использованием SQL-инъекции может быть выполнена через простое введение SQL-кода в поле формы. Например:

Так как это синтаксически правильный SQL- код, точка с запятой делает DROP DATABASE user_table новым SQL-запросом, и пользовательская таблица удаляется. Подготовленные выражения (связанные переменные) не позволяют, чтобы точка с запятой и кавычки завершали исходный запрос.Поэтому команда DROP DATABASE никогда не будет выполнена.

Чтобы использовать подготовленные выражения, нужно написать новую переменную, которая вызывает метод prepare() объекта базы данных.

Корректный код:

getMessage(); } // Устанавливаем переменные для персоны, которую мы хотим добавить в базу данных $first_Name = "Thom"; $last_Name = "Vial"; $email = "[email protected]"; // Создаем переменную, которая вызывает методобъекта базы данных prepare() // Запрос SQL, который вы хотите выполнить, вводится как параметр, а заполнители пишутся следующим образом:placeholder_name $my_Insert_Statement = $my_Db_Connection->prepare("INSERT INTO Students (name, lastname, email) VALUES (:first_name, :last_name, :email)"); // Теперь мы указываем скрипту, какая переменная ссылается на каждый заполнитель, чтобы использовать метод bindParam() // Первый параметр - это заполнитель в операторе выше, второй - это переменная, на которую он должен ссылаться $my_Insert_Statement->bindParam(:first_name, $first_Name); $my_Insert_Statement->bindParam(:last_name, $last_Name); $my_Insert_Statement->bindParam(:email, $email); // Выполняем запрос, используя данные, которые только что определили // Метод execute() возвращает TRUE, если он выполнен успешно, и FALSE, если нет, предоставляя вам возможность вывести собственное сообщение if ($my_Insert_Statement->execute()) { echo "New recordcreatedsuccessfully"; } else { echo "Unable to createrecord"; } // В этой точке можно изменить данные переменных и выполнить запрос, чтобы добавить другие данные в базу data to the database $first_Name = "John"; $last_Name = "Smith"; $email = "[email protected]"; $my_Insert_Statement->execute(); // Выполняем снова, когда переменная изменена if ($my_Insert_Statement->execute()) { echo "New recordcreatedsuccessfully"; } else { echo "Unable to createrecord";

В строках 28, 29 и 30 мы используем метод bindParam() объекта базы данных. Также существует метод bindValue(), который сильно отличается от предыдущего.

  • bindParam() — этот метод оценивает данные при достижении метода execute(). В первый раз, когда скрипт достигает метода execute(), он видит, что $first_Name соответствует «Thom». Затем связывает это значение и запускает запрос. Когда скрипт достигает второго метода execute(), он видит, что $first_Name теперь соответствует «John». После чего связывает это значение и снова запускает запрос с новыми значениями. Важно помнить, что мы однажды определили запрос и повторно используем его с разными данными в разных точках скрипта.
  • bindValue() — этот метод оценивает данные, как только достигается bindValue(). Поскольку для $first_Name было установлено значение «Thom», при достижении bindValue(), оно будет использоваться каждый раз, когда вызывается метод execute() для $my_Insert_Statement.
    Обратите внимание, что мы повторно используем переменную $first_Name и присваиваем ей новое значение во второй раз. После запуска скрипта в БД будут указаны оба имени, несмотря на то, что переменная $first_Name в конце скрипта имеет значение «John». Помните, что PHP проверяет весь скрипт, прежде чем запустить его.

Если вы обновите скрипт, чтобы заменить bindParam на bindValue, вы дважды вставите в базу данных «Thom Vial», а John Smith будет проигнорирован.

Шаг 3 — подтверждение успешного выполнения и решение проблем

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

Устранение распространенных ошибок

MySQLi

В любом другом случае будет отображено сообщение об ошибке. Например, давайте сделаем в коде одну синтаксическую ошибку, и мы получим следующее:

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

"Error: INSERT INTO Students {name, lastname, email} VALUES ("Thom", "Vial", "[email protected]") You have an error in your SQL syntax; check the manualthatcorresponds to your MySQL server version for the rightsyntax to use near "{name, lastname, email} VALUES ("Thom", "Vial", "[email protected]")" at line 1"

Была допущена синтаксическая ошибка, которая вызвала сбой скрипта. Ошибка была здесь:

$sql = "INSERT INTO Students {name, lastname, email} VALUES ("Thom", "Vial", "[email protected]")";

Мы использовали фигурные скобки вместо обычных. Это неверно, и скрипт выдал синтаксическую ошибку.

PDO

В строке 7 соединения PDO для режима ошибок установлено «display all exceptions». Если задано другое значение, и запрос не удался бы, мы не получили бы никаких сообщений об ошибках.

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

Fatal error: Uncaughtexception "PDOException" with message "SQLSTATE: Syntax error or accessviolation: 1064 You have an error in your SQL syntax; check the manualthatcorresponds to your MySQL server version for the rightsyntax to use near "{name, lastname, email} VALUES ("Thom", "Vial", "[email protected]")" at line 1"

Другие возможные проблемы:

  • Неверно указаны столбцы (несуществующие столбцы или орфографическая ошибка в их именах).
  • Один тип значения присваивается столбцу другого типа. Например, если попытаться вставить число 47 в столбец Name, то получим ошибку. В этом столбце необходимо использовать строковое значение. Но если бы мы указали число в кавычках (например, «47») то сработало бы, потому что это строка.
  • Попытка ввести данные в таблицу, которая не существует. А также допущенная орфографическая ошибка в имени таблицы.

После успешного ввода данных мы увидим, что они добавлены в базу данных. Ниже приведен пример таблицы, в которую добавили данные.

Комментарии, перенесенные из блога

СЕРГЕЙ
14.09.2016 в 01:25
День добрый!
Интересует такой вопрос: каким образом проще всего организовать хранение данных и настроек программы без использования бд? Не хочется привязываться к MySQL или Access ..

ADMIN
14.09.2016 в 22:14
Здравствуйте!

Properties.Settings
App.Config
XML файл
сериализация
Попробуйте выбрать что-нибудь из этого из списка.

НИКОЛАЙ
16.09.2016 в 02:28
Здравствуйте, как удалить выделенную строку в dataGridVIew из dataGridVIew и phpMyAdmin.

PhpMyAdmin? Это лишь оболочка для работы с базой данных, можете пояснить?

НИКОЛАЙ
18.09.2016 в 02:24
нужно что бы выделенная строка удалялась из DataGridView и из базы данных.

ADMIN
19.09.2016 в 07:00
Как удалить строку в базе данных Mysql — добавил статью.

НИКОЛАЙ
20.09.2016 в 09:20
Спасибо огромное.

ДИМА
20.09.2016 в 10:24
Здравствуйте, а можно данный способ реализовать не через DataGridView, а через ComboBox? Если да, то как? Спасибо.

ADMIN
22.09.2016 в 03:21
Привет. Пример:

ГЕННАДИЙ
22.09.2016 в 18:25
почему мне в базу данных вноситься такой текст System.Windows.Forms.TextBox, Text: ге

К стате вот это (ге) к конце это написано гена хоть в настройках таблицы указан текст.слово гена должно было уместиться дальше я вывожу эту таблицу в свою программку и получается что он выводит мне весь этот ненужный текст

ADMIN
24.09.2016 в 04:17
Скорее всего неверно написан SQL запрос, например:

В textBox1 вводим имя: Гена.

Sql запрос: «Insert into имя таблицы values(textBox1, ..)»; Результат: System.Windows.Forms.TextBox

А нужно передавать: «Insert into имя таблицы values(textBox1.Text, ..)»;
Результат: Гена

ГЕННАДИЙ
24.09.2016 в 18:41
Да так оно и есть. СПасибо

СЕРГЕЙ
25.09.2016 в 11:51
Здравствуйте. А как реализовать добавление в БД через textBox?

ADMIN
26.09.2016 в 20:53
Всё тоже самое в принципе. Например, возьмём самый последний пример, в нём нужно:

//создаем параметры и добавляем их в коллекцию cmd.Parameters.AddWithValue("@Name", textBox1.Text); cmd.Parameters.AddWithValue("@LastName", textBox2.Text);

теперь параметры: Name и LastName получают значения введенные в textbox-ы и передают их в БД

ЛИНАРА
27.09.2016 в 17:45
Здравствуйте, как выделенную строку в dataGridVIew и phpMyAdmin?

ADMIN
29.09.2016 в 02:06
Я не знаю, как можно выделенную строку в phpMyAdmin. А в dataGridView, например это можно сделать с помощью события SelectionChanged.

PSH
30.09.2016 в 03:48
2Линара:
Если так хотите редактировать строки, возьмите инструмент а-ля HediSQL, настройте и изменяйте строки.

2admin
Доброго дня! Спасибо за материлы — всё очень круто изложено)
Вопрос: добавляю данные вот таким запросом (он тестовый):

String sql = "INSERT INTO users (`FIO`, `Tour`, `Count`, `Cost`, `Date`, `Passport`, `Birth`) VALUES ("Колян", "Москва", "1+1", 1100, "2011-11-11", "1111 1111", "9.11.1900");";

Данные вносятся всё ок, но вот в БД (mysql) вместо кириллицы оказываются «????».

Visual studio говорит, что System.String — последовательность Юникода.

Также пробовал:

ALTER DATABASE `test` COLLATE "koi8r_general_ci"; ALTER TABLE `users` COLLATE="koi8r_general_ci"; ALTER DATABASE `test` COLLATE "utf8_unicode_ci"; ALTER TABLE `users` COLLATE="utf8_unicode_ci";

Но не помогает..
В чем может быть дело? Разные кодирвки VS и БД? Или что?
Могли бы направить что почитать/поменять.
Спасибо

ADMIN
01.10.2016 в 09:49
Привет.

В БД (и в таблице) сопоставление utf_general_ci

Такое сопоставление разве есть? Возможно, utf8_general_ci?

Обычно создают БД Mysql выбирая сравнение utf8_general_ci, поэтому проблем с кириллицей не возникает, если конечно с клиента не приходят кракозябры на сервер.

COLLATION используется для сравнения, а в данном же случаи важна кодировка (charset). Поэтому для начала необходимо убедиться, что она выставлена на сервере верно, например в utf8, а не latin1.

При подключении через.net коннектор (по умолчанию) используется latin1, поэтому иногда требуется явно указать в строке подключения кодировку utf8:

MySqlConnection mycon; mycon = new MySqlConnection("server=127.0.0.1;uid=vasya;pwd=123;database=test;Charset=utf8;"); //MySqlConnectionStringBuilder: mysqlCSB.CharacterSet = "utf8";

PSH
01.10.2016 в 11:34
Вы правы, описался, utf8_general_ci!
Да помогло, ;Charset=utf8;
Спасибо огрмное!

СЕРГИЙ
02.10.2016 в 11:02
Спасибо за рабочий пример, нужный. Вопрос
Я создал текстовое поле в которое хотел бы вводить айпи-адрес базы данных, но не знаю как подставить эти данные вот сюда

String conStr = "server=@textBox2;user=test;" +
"database=test;password=test;";
Подскажите пожалуйста как вставлять данные из текстовых полей в windows form в эту конструкцию….

ADMIN
03.10.2016 в 11:50
"[email protected];user=...
Вообще лучше вместо такой строки использовать свойства, как в данной статье, либо метод String.Format()

OLGA2203
15.05.2017 в 20:14

String Connect = “Server=127.0.0.1;Port=3306;Database=base;Data Source=localhost;user=root;”; MySqlConnection con = new MySqlConnection(Connect); con.Open(); //Устанавливаем соединение с базой данных. MySqlCommand cmd = new MySqlCommand(); cmd.CommandText = @”INSERT INTO tovar(ID,Category,Name,TradeMark,Price,Photo,Size,Color,Material,Count) VALUES (@pr, @Category, @Name, @TradeMark, @Price, @Photo, @Size, @Color, @Material, @Count)”; cmd.Parameters.AddWithValue(“@pr”,counter); cmd.Parameters.AddWithValue(“@Category”, comboBox1.SelectedItem.ToString()); cmd.Parameters.AddWithValue(“@Name”, textBox1.Text); cmd.Parameters.AddWithValue(“@TradeMark”, textBox2.Text); cmd.Parameters.AddWithValue(“@Price”, Convert.ToInt32(textBox4.Text)); cmd.Parameters.AddWithValue(“@Photo”, textBox3.Text); cmd.Parameters.AddWithValue(“@Size”, textBox6.Text); cmd.Parameters.AddWithValue(“@Color”, textBox5.Text); cmd.Parameters.AddWithValue(“@Material”, textBox8.Text); cmd.Parameters.AddWithValue(“@Count”, Convert.ToInt32(textBox7.Text)); cmd.Connection = con; cmd.ExecuteNonQuery(); MessageBox.Show(“Добавление прошло успешно”, “Добавление прошло успешно”, MessageBoxButtons.OK, MessageBoxIcon.Asterisk);

Выдается ошибка “Column ‘ID’ cannot be null”, убираю добавление в столбец ID – то же самое про следующий столбец пишет и т.д.
Если вношу какие-нибудь константные значения в скобках в VALUES, строка в базу добавляется.
Подскажите, пожалуйста, в чем проблема? Мне нужно записывать в базу данных именно вводимые через форму данные и значения

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

Вставка данных с использованием 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-операторы с кавычками или обратными слэшами

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

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

Ваше имя:
Ваш 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 "Произошла ошибка, пожалуйста повторите попытку."; }


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