- PHP: Inserting Values from the Form into MySQL
- 2 Answers 2
- Php post mysql query
- Объектно-ориентированный подход
- Процедурный подход
- Добавление данных из формы HTML
- Добавление пользователя
- Объектно-ориентированный подход
- Процедурный подход
- Запись данных в MySql на PHP
- Создание формы для добавления записей
- Обработка (вставка) полученных из формы данных
- Удаление строк из Mysql
- Полный листинг кода
- Запись в базу данных mysql на php через форму
- 1. Создадим разметку html-формы
- 2. Создадим таблицу, в которую будем записывать данные
- 3. Подключимся к базе данных и напишем запрос для записи.
- 4. Подключение формы к запросу
PHP: Inserting Values from the Form into MySQL
After hitting my save button, nothing happens, database is still empty. I tried echo’ing the INSERT query and it takes all values from the form as it is supposed to. After I try to check if this worked from terminal, I login into my sql try to return all data from users table and I get empty set.
You need to mysqli_query($mysqli, $sql); the query. You are currently just echo ing the query, which basically just outputs it to the screen.
2 Answers 2
The following code just declares a string variable that contains a MySQL query:
$sql = "INSERT INTO users (username, password, email) VALUES ('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."')";
It does not execute the query. In order to do that you need to use some functions but let me explain something else first.
NEVER TRUST USER INPUT: You should never append user input (such as form input from $_GET or $_POST ) directly to your query. Someone can carefully manipulate the input in such a way so that it can cause great damage to your database. That’s called SQL Injection. You can read more about it here
To protect your script from such an attack you must use Prepared Statements. More on prepared statements here
Include prepared statements to your code like this:
$sql = "INSERT INTO users (username, password, email) VALUES (. )";
Notice how the ? are used as placeholders for the values. Next you should prepare the statement using mysqli_prepare :
Then start binding the input variables to the prepared statement:
$stmt->bind_param("sss", $_POST['username'], $_POST['email'], $_POST['password']);
And finally execute the prepared statements. (This is where the actual insertion takes place)
NOTE Although not part of the question, I strongly advice you to never store passwords in clear text. Instead you should use password_hash to store a hash of the password
Php post mysql query
В прошлой теме мы добавили в базу данных таблицу Users с тремя столбцами id, name, age со следующим определением:
CREATE TABLE Users (id INTEGER AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30), age INTEGER)
Теперь добавим в нее данные. Для добавления данных в MySQL применяется команда INSERT :
INSERT INTO название_таблицы (столбец1, столбец2, столбецN) VALUES ( значение1, значение2, значениеN)
Объектно-ориентированный подход
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(); ?>
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(); ?>
Процедурный подход
$sql = "INSERT INTO Users (name, age) VALUES ('Tom', 37)"; if(mysqli_query($conn, $sql)) < echo "Данные успешно добавлены"; >else < echo "Ошибка: " . mysqli_error($conn); >mysqli_close($conn); ?>
$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 , на которой определим следующий код:
Добавление пользователя
Имя:
Возраст:
Здесь определены два поля ввода. И по нажатию на кнопку их данные в запросе POST будут уходить скрипту create.php . Теперь определим сам скрипт create.php .
Объектно-ориентированный подход
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 , который сохранит их в базу данных.
Процедурный подход
$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. В качестве параметров она принимает объект подключения и строку, которую надо экранировать.
Запись данных в MySql на PHP
Данный урок выполняется на основе (после выполнения) уроков "Создание базы данных и таблицы с товарами" и "Вывод данных из MySql на PHP". А именно, из этих уроков нам понадобится:
- Таблица "products" с полями "ID", "Name", "Price";
- Установленное соединение с БД MySql.
Создание формы для добавления записей
Для начала нам необходимо создать обычную форму, в которую мы будем записывать данные, и после отправки формы, они будут записываться в таблицу MySql.
Создадим новую страницу, к примеру "product_admin.php" с установленным соединением с БД:
Теперь в блок после подключения к БД добавим HTML форму:
Обработка (вставка) полученных из формы данных
После того, как данные из формы будут отправлены, их надо принять и записать в таблицу БД.
Давайте првоерим, переданы ли данные и, если переданы, то сохраним их. Этот код лучше вставить перед формой, но после подключения к БД:
', '')"); //Если вставка прошла успешно if ($sql) < echo 'Данные успешно добавлены в таблицу.
'; > else < echo 'Произошла ошибка: ' . mysqli_error($link) . '
'; > > ?>
Теперь после отправки формы в таблице у вас должна появиться новая срока - новый товар.
Никогда без проверок принятых переменных не вставляйте данные напрямую в базу данных. В этом случае вас будет очень легко взломать. Подробнее об этом в google: о sql инъекциях. Но поскольку мы только учимся, и усложнять все незачем, то мы будем делать так 🙂
Удаление строк из Mysql
Давайте попробуем вывести все товары, а рядом с каждым товаром кнопку удалить (код вставляем в самый низ страницы перед тегом ):
Теперь перед выводом товаров нам следует проверить, а не была ли передана переменная на их удаление, и если была, то удалить товар:
"); if ($sql) < echo "Товар удален.
"; > else < echo 'Произошла ошибка: ' . mysqli_error($link) . '
'; > > ?>
Попробуйте доработать данный пример и сделать самим редактирование данных о товаре. Путей решения много. Один из них: рядом со ссылкой "Удалить" добавляем "Редактировать", при клике по которой передаем переменную "red". Перед отрисовкой формы проверяем, а нет ли этой переменной, и если есть, то извлекаем и подставляем данные в форму. Перед новой вставкой, если все еще есть "red", то делаем UPDATE, а не INSERT. Дерзайте 😉
Ну и для самых лентяев! Готовый код с редактирвоанием данных в таблице ниже.
Полный листинг кода
//Если переменная Name передана if (isset($_POST["Name"])) < //Если это запрос на обновление, то обновляем if (isset($_GET['red'])) < $sql = mysqli_query($link, "UPDATE `products` SET `Name` = '',`Price` = '' WHERE `ID`="); > else < //Иначе вставляем данные, подставляя их в запрос $sql = mysqli_query($link, "INSERT INTO `products` (`Name`, `Price`) VALUES ('', '')"); > //Если вставка прошла успешно if ($sql) < echo 'Успешно!
'; > else < echo 'Произошла ошибка: ' . mysqli_error($link) . '
'; > > //Удаляем, если что if (isset($_GET['del'])) < $sql = mysqli_query($link, "DELETE FROM `products` WHERE `ID` = "); if ($sql) < echo "Товар удален.
"; > else < echo 'Произошла ошибка: ' . mysqli_error($link) . '
'; > > //Если передана переменная red, то надо обновлять данные. Для начала достанем их из БД if (isset($_GET['red'])) < $sql = mysqli_query($link, "SELECT `ID`, `Name`, `Price` FROM `products` WHERE `ID`="); $product = mysqli_fetch_array($sql); > ?> ) - ₽ - Удалить - Редактировать"; > ?> Добавить новый товар
Понравилась или помогла статья? Самое лучшее, что ты можешь сделать - это поделиться ею в любой из своих соцсетей (даже если ты поделишься в твиттере или google+, которыми ты не пользуешься - это очень поможет развитию моего блога). Спасибо! А если ты еще и оставишь любой комментарий снизу в обсуждениях, то это будет двойное СПАСИБО!
Ссылка на статью на всякий случай:
Крутов Герман © 2009-2023
krutovgerman2007@ya.ru
Я ВКонтате
Запись в базу данных mysql на php через форму
Рассмотрим на примере, как создать форму, с помощью которой мы будем делать запросы в базу данных mysql на языке php, используя PDO.
1. Создадим разметку html-формы
Форма отправляется методом POST и обрабатывается на текущей странице.
2. Создадим таблицу, в которую будем записывать данные
Можно выполнить через SQL в PhpMyAdmin или ручками.
CREATE TABLE `mytable` ( `id` int(20) NOT NULL PRIMARY KEY AUTO_INCREMENT, `name` varchar(255) CHARACTER SET utf32 NOT NULL, `text` text NOT NULL )
3. Подключимся к базе данных и напишем запрос для записи.
Подключимся к базе данных.
// Переменные с формы $name = $_POST['name']; $text = $_POST['text']; // Параметры для подключения $db_host = "localhost"; $db_user = "user"; // Логин БД $db_password = "123"; // Пароль БД $db_base = 'mybase'; // Имя БД $db_table = "mytable"; // Имя Таблицы БД try < // Подключение к базе данных $db = new PDO("mysql:host=$db_host;dbname=$db_base", $db_user, $db_password); // Устанавливаем корректную кодировку $db->exec("set names utf8"); > catch (PDOException $e) < // Если есть ошибка соединения, выводим её print "Ошибка!: " . $e->getMessage() . "
"; >
Кодировку установили, чтобы избежать лишних проблем (не обязательно).
Не забудьте заранее создать таблицу в базе данных с трёмя значениями (id, name, text), подробнее об этом читать здесь.
Далее напишем наш запрос для записи в базу данных и запишем его в переменную.
// Собираем данные для запроса $data = array( 'name' => $name, 'text' => $text ); // Подготавливаем SQL-запрос $query = $db->prepare("INSERT INTO $db_table (name, text) values (:name, :text)"); // Выполняем запрос с данными $query->execute($data);
Здесь мы сначала все наши данные для записи записываем в переменную $data, затем подготавливаем запрос с плейсохледарами (переменные) и выполняем запрос передавая ему данные для заполнения из $data
Создадим небольшую проверку, чтобы знать, выполнился ли наш запрос или нет.
4. Подключение формы к запросу
Форму создали, к базе подключились и написали запрос, теперь нужно связать всё это.
Форма отправляется методом POST, поэтому мы можем сделать проверку на него, а именно на любое поле формы.
У нас передаются поля с именами "name" и "text", на них мы и сделаем проверку.
Вставим весь наш скрипт в эту проверку:
if (isset($_POST['name']) && isset($_POST['text']))< // Переменные с формы $name = $_POST['name']; $text = $_POST['text']; // Параметры для подключения $db_host = "localhost"; $db_user = "user"; // Логин БД $db_password = "123"; // Пароль БД $db_base = 'mybase'; // Имя БД $db_table = "mytable"; // Имя Таблицы БД try < // Подключение к базе данных $db = new PDO("mysql:host=$db_host;dbname=$db_base", $db_user, $db_password); // Устанавливаем корректную кодировку $db->exec("set names utf8"); // Собираем данные для запроса $data = array( 'name' => $name, 'text' => $text ); // Подготавливаем SQL-запрос $query = $db->prepare("INSERT INTO $db_table (name, text) values (:name, :text)"); // Выполняем запрос с данными $query->execute($data); // Запишим в переменую, что запрос отрабтал $result = true; > catch (PDOException $e) < // Если есть ошибка соединения или выполнения запроса, выводим её print "Ошибка!: " . $e->getMessage() . "
"; > if ($result) < echo "Успех. Информация занесена в базу данных"; >>
То есть, если существует значения "name" и "text" переданные методом POST, то выполняется подключение к БД и запись в таблицу.