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

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

дополнительные материалы к урокам

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

Если Вы не читали первый урок, то можете прочитать его перейдя по этой ссылке.

В этом уроке мы создадим html документ для ввода пользовательской информации, а также php файл-обработчик этой информации, который будет обрабатывать данные, соединяться с базой данных MySql и вставлять туда новые записи.

Переходя от слов к делу давайте начнем.

Добавляем пользовательские данные в базу MySql с веб страницы

Первый этап: создаем html форму для ввода данных

С самого начала нам нужно подготовиться к работе с php, MySql и к тестированию написанного кода на локальном компьютере. Для этого:

1. Запустите Denwer на своем компьютере.

2. Откройте виртуальный диск, созданный Денвером (например у меня это диск “Z”). Откройте его, дальше: home – localhost – www – там создайте новую папку и дайте ей название (я дам название “db1”).

3. Если Вы работаете в Adobe Dreamweaver, то зайдите в менеджер сайтов, там нажмите на кнопку «New», в качестве пути выберите путь до только что созданной папки, в поле выше можете дать имя сайту, после этого нажмите Save – Done. После всего этого в правой панели Adobe Dreamweaver появится Ваша папка.

1. Сейчас мы создадим обычный html файл (назовем его info_form.html и сохраним в только что созданной папке db1) и пропишем там код формы для ввода информации. В нашей таблице users базы данных new_db есть 4 поля, которые мог бы заполнить пользователь (поле id будет заполняться автоматически). Исходя из этого можно создать код следующего вида:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <link rel="stylesheet" href="style.css" type="text/css"> <title>Untitled Document</title> </head> <body> <form action="scripts/form.php" method="post" name="forma"> <fieldset> <label for="first_name">Имя:</label><br/> <input type="text" name="first_name" size="30"><br/> <label for="last_name">Фамилия:</label><br/> <input type="text" name="last_name" size="30"><br/> <label for="email">Email:</label><br/> <input type="text" name="email" size="30"><br/> <label for="facebook">Facebook</label><br/> <input name="facebook" type="text" value="" size="30"> </fieldset> <br/> <fieldset> <input id="submit" type="submit" value="Отправить данные"><br/> </fieldset> </form> </body> </html>

Здесь в параметре «action» нашей формы прописан файл form.php. Он будет являться файлом обработчиком, который мы создадим далее.

Давайте еще создадим файл style.css для придания стилей нашей форме. Он уже подключен в коде, так что осталось только создать его, поместить в ту же папку, что и html файл и прописать в нем следующий код:

body{width:400px; margin:0 auto; background:#F8F4B6;} label{display: block; float: left; width: 150px; padding: 0 10px; margin: 18px 0 0; text-align: right;} #submit{float:right; margin:5px 50px 10px 0;}

Теперь форма выглядит следующим образом:

форма для ввода пользовательских данных

Однако, если Вы введете данные и попытаетесь отправить форму, то увидите ошибку, так как никакого файла form.php, лежащего в каталоге scripts не существует.

Создать файл-обработчик – это наша следующая задача.

2. Давайте внутри папки db1 создадим папку с названием «scripts». В ней мы будем сохранять все наши скрипты взаимодействия с базой данных MySql.

После того как папка будет создана, создайте новый php файл и сохраните его в папке scripts под именем form.php.

Но перед тем как заняться непосредственно файлом-обработчиком информации нужно сначала подключиться к нашей базе данных. Я предлагаю создать для этого отдельный файл и вот почему:

Скорее всего в Вашем проекте Вам придется соединяться с базой данных MySql не только из одного файла. Как правило с базой данных взаимодействуют различные файлы проекта. Очень непрактично в каждом таком файле прописывать один и тот же код подключения к базе. А если таких файлов, например, будет 50 и в один прекрасный день вы смените пароль для пользователя и Вам придётся искать все эти 50 файлов и в каждом делать исправление. Гораздо удобнее использовать для подключения отдельный файл, который будет подключен к каждому из файлов, где должно быть соединение с базой данных MySql. В таком случае вносить исправления нужно будет только в один файл.

Итак, давайте создадим новый php файл, назовем его connect.php и поместим в папку для скриптов. В нем пропишем код соединения с нашей базой данных MySql, а также код, который будет сообщать об ошибках в случае их возникновения. Обратите внимание, что в качестве параметров Вам необходимо будет прописать Ваше имя пользователя, Ваш пароль и Ваше имя базы данных. В качестве хоста должен быть localhost.

<?php mysql_connect("localhost", "anna", "12345")//параметры в скобках ("хост", "имя пользователя", "пароль") or die("<p>Ошибка подключения к базе данных! " . mysql_error() . "</p>"); mysql_select_db("new_db")//параметр в скобках ("имя базы, с которой соединяемся") or die("<p>Ошибка выбора базы данных! ". mysql_error() . "</p>"); ?>

Теперь перейдем в файл form.php и подключим в него файл connect.php с помощью следующего кода:

<?php require 'connect.php'; ?>

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

Если Вы увидели сообщение об ошибке, то проверьте правильность всех параметров (имя пользователя, пароль, имя хоста: localhos, имя базы данных), а также будьте уверены, что Ваш Денвер включен.

3. Мы удачно соединились с базой данных MySql, а теперь нам нужно принять введенные в форму данные в наш файл обработчик. В этом нам помогут атрибуты “name”, которые присутствуют в html документе.

Для получения данных мы воспользуемся специальной переменной php, снабжающей нас всей информацией из веб-формы. Эта переменная называется “$_REQUEST”.

Пропишите в файле form.php после подключения файла connect.php следующий код:

$first_name = $_REQUEST['first_name']; $last_name = $_REQUEST['last_name']; $email = $_REQUEST['email']; $facebook = $_REQUEST['facebook'];

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

$insert_sql = "INSERT INTO users (first_name, last_name, email, facebook)" . "VALUES('{$first_name}', '{$last_name}', '{$email}', '{$facebook}');"; mysql_query($insert_sql);

Здесь сначала мы формируем запрос, говоря, что нам нужно вставить соответствующие переменные в соответствующие поля таблицы “users”. Заносим этот запрос в переменную “$insert_sql”. А потом с помощью специальной функции mysql_query исполняем данный запрос.

Если сейчас Вы заполните и отправите форму, а потом посмотрите в таблицу “users” Вашей базы данных, то увидите новую запись, которая там появилась после отправки.

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

вставка данных из формы в таблицу базы данных MySql

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

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

Во-вторых, у нас существует поле для Facebook. Если мы в последующем захотим выводить эту информацию как ссылку, то необходимо позаботиться, чтобы данные в этом поле хранились в правильном формате (то есть «http://www.facebook.com/идентификатор на facebook»). Но пользователь не всегда будет вводить эти данные так как нам нужно. Он может ввести: “www.facebook.com/идентификатор на facebook”, “facebook.com/идентификатор на facebook” или просто “/идентификатор на facebook”.

Этих ситуаций нужно избегать. Для этого давайте подкорректируем наш код. Возможные лишние пробелы мы обрежем при помощи функции trim, а проверять правильность введенного url для facebook будет функция preg_match. Таким образом весь код файла form.php будет выглядеть следующим образом:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>Untitled Document</title> </head> <body> <?php require 'connect.php'; $first_name = trim($_REQUEST['first_name']); $last_name = trim($_REQUEST['last_name']); $email = trim($_REQUEST['email']); $facebook = trim($_REQUEST['facebook']); $position = true; if(preg_match("/^http:\/\/www.facebook.com\//", $facebook)) {$position = false;} else if(preg_match("/^www.facebook.com\//", $facebook)) {$position = false; $facebook = "http://" . $facebook;} else if($position) {$facebook = "http://www.facebook.com/" . $facebook;} $insert_sql = "INSERT INTO users (first_name, last_name, email, facebook)" . "VALUES('{$first_name}', '{$last_name}', '{$email}', '{$facebook}');"; mysql_query($insert_sql); echo "<p>Новая запись вставлена в базу!</p>"; ?> </body> </html>


О функции preg_match: Это функция для поиска с регулярными выражениями.

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

Функция возвращает только первое совпадение: 0 – если совпадений нет, 1 – если совпадение есть.

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

не совсем корректное заполнение формы

вставка данных в базу в нужном формате

На этом буду заканчивать данный урок. Все файлы этого урока Вы можете скачать в исходниках (только не забудьте исправлять параметры на свои в файле connect.php).

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

Оставляйте свои комментарии и делитесь с друзьями с помощью кнопок социальных сетей.

Успехов и до встречи в следующем уроке!

Понравилась статья? Поделись с друзьями!


Будьте в курсе новых публикаций на Блоге!

rss podpiska

Введите Ваш E-mail:


Комментарии к этой статье:

Комментарий добавил(а): Елена
Дата: 2013-12-21

Спасибо, всё получилось.

Комментарий добавил(а): Админ
Дата: 2013-12-21

Очень рада за Вас. Желаю дальнейших успехов!

Комментарий добавил(а): Андрей
Дата: 2013-12-25

у меня тип строк в бд ENUM, как мне сделать что бы в форме HTML это отобразилось?

Комментарий добавил(а): Админ
Дата: 2013-12-25

Для этого задайте для тега select тип "enum"

<select type="enum" name="name" size="1"> <option value="first">first</option> <option value="second">second</option> <option value="third" selected="selected">third</option> </select>

Здесь "first", "second", "third" - разрешенные значения

Комментарий добавил(а): Андрей
Дата: 2013-12-25

спасибо. получилось))) не сочтите за наглость, но хотелось бы еще уточнить. У меня не работает скрипт с функцией request ((( у меня большенство полей enum я просто только постигаю озы магии web-программирования, и еще мало что знаю.... если не доставит много хлопот, подскажите пожалуйста

Комментарий добавил(а): Админ
Дата: 2013-12-26

Сейчас потестила как лучше сделать. У меня все заработало, когда сделала вот так:

$name =$_POST['name']; $query = "INSERT INTO table SET name = '$name'"; mysql_query($query);

здесь table - Ваша таблица в базе; name - имя, которое стоит в name у тега select. Потом напишите получилось или нет

Комментарий добавил(а): Андрей
Дата: 2013-12-29

Спасибо, но ничего не выходит...что-то не то, ошибка всё равно остается "неопределенная переменная"

Комментарий добавил(а): Админ
Дата: 2013-12-29

Сложновато помочь не видя Ваш код. Давайте я покажу Вам как я делала. Вот мой html-файл:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>Untitled Document</title> </head> <body> <form action="enum.php" method="post"> <select type="enum" name="choos" size="1"> <option value="first">first</option> <option value="second">second</option> <option value="third" selected="selected">third</option> </select> <input id="submit" type="submit" value="Отправить данные"><br/> </form> </body> </html>

Вот php-файл:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>Untitled Document</title> </head> <body> <? echo $_POST['choos']; mysql_connect("localhost", "anna", "12345")//параметры в скобках ("хост", "имя пользователя", "пароль") or die("<p>Ошибка подключения к базе данных! " . mysql_error() . "</p>"); $choos =$_POST['choos']; mysql_select_db("new_db")//параметр в скобках ("имя базы, с которой соединяемся") or die("<p>Ошибка выбора базы данных! ". mysql_error() . "</p>"); $query = "INSERT INTO forenum SET choos = '$choos'"; mysql_query($query); ?> </body> </html>

Плюс, когда Вы создаете поле в таблице базы данный, Вам нужно указать допустимые значения для этого поля:

Попробуйте этот код, проверьте все внимательно в своем коде. У меня с этим кодом все хорошо добавляется в базу.

Комментарий добавил(а): Андрей
Дата: 2014-01-19

нет, ничего не получается, а бд заполняется пустыми значениями :(

Комментарий добавил(а): Админ
Дата: 2014-01-19

Андрей, если есть желание отправьте мне Ваш код (html-файл и php-файл) на мой email (anutka0306@mail.ru). Я попытаюсь разобраться.

Комментарий добавил(а): Вячеслав
Дата: 2014-03-24

Привет, сделал все как написано в уроке, после заполнения формы, высвечивается белый экран, но в БД запись не появляется :(

Комментарий добавил(а): Вячеслав
Дата: 2014-03-24

Ооо круто, все получилось, правда пришлось скачать ваши файлы и их на свой лад переписать, а от того, что я писал толку не было, наверное где то набокопорил! :)

Комментарий добавил(а): Админ
Дата: 2014-03-25

Да, так бывает. Иногда просто по невнимательности. Главное, что все получилось. Успехов!

Комментарий добавил(а): Николай
Дата: 2014-04-04

Не получаеться добавить новых пользователей через php форму. Скачивал Ваши источники. После того как ввожу данные пользователя необходимые для регистрации и нажимаю отправить браузер выдает "новая запись вставлена в базу! " ;?> Может быть причина в том что php код не срабатывает так как выдает знак вопроса и остальные символы в конце? Но почему он не срабатывает? и еще пользуюсь wampserver, он похож на денвер но может и в этом причина? Извините за возможно глупые вопросы, я начинающий))) Если поможете буду очень признателен)

Комментарий добавил(а): Админ
Дата: 2014-04-05

Сейчас еще раз просматривала этот код. Должно все работать. Попробуйте в файле обработчике "form.php" убрать все (только сначала сохраните где-то) и сделать такой тест. Пропишите в ним только:

<?php echo "Привет"; ?>
И посмотрите какой результат будет. Если все выведется без ?>, то проверяйте код. Если не получится, то отправьте мне файлы на admin@website-create.ru и я посмотрю, потому что в слепую немного сложно будет Вам помочь.

Комментарий добавил(а): Марк
Дата: 2014-04-05

Спасибо Вам огромнейшее!!!По учебнику который купил ничего не было понятно,а сейчас как дважды два!!!

Комментарий добавил(а): Марк
Дата: 2014-04-05

Спасибо Вам огромнейшее!!!По учебнику который купил ничего не было понятно,а сейчас как дважды два!!!

Комментарий добавил(а): Админ
Дата: 2014-04-05

Спасибо Вам за отзыв, Марк. Это очень приятно слышать

Комментарий добавил(а): Mishgan
Дата: 2014-04-08

а если форма с галочками действия те же самые??? http://www.mik-avia.ru/ тип как здесь реализован поиск туров Read more: http://website-create.ru/web-zametki.php?cat=sozdanie-saitov&id=28#ixzz2yK4wOdvm

Комментарий добавил(а): Админ
Дата: 2014-04-09

С чекбоксами будет немного по-другому. Каждый тег "<input type="checkbox" name="имя">" будет иметь свое значение для имени. В коде php нужно проверить существование каждого значения (то есть пустое оно или отмеченное) при помощи условного оператора if и isset, а далее сделать соответствующие действия. Постараюсь в скором времени написать об этом пост, чтобы было все более понятно.

Комментарий добавил(а): Олег
Дата: 2014-04-10

что-то ни черта не получилось((

Комментарий добавил(а): Дмитрий
Дата: 2014-04-27

Сделал все 1 в 1. Также использовал ваши исходники, но результат почему то всегда такой на форме form.php Новая запись вставлена в базу! "; ?> но запись не добавляется в БД. Также ввел <?php echo "Привет"; ?> В браузере отображает <?php echo "Привет"; ?> Никак не пойму в чем может быть причина(

Комментарий добавил(а): Дмитрий
Дата: 2014-04-27

Сделал все 1 в 1. Также использовал ваши исходники, но результат почему то всегда такой на форме form.php Новая запись вставлена в базу! "; ?> но запись не добавляется в БД. Также ввел <?php echo "Привет"; ?> В браузере отображает <?php echo "Привет"; ?> Никак не пойму в чем может быть причина( РЕШИЛ ЭТУ ПРОБЛЕМУ !!!!!. Вообщем мой косяк был. Использую денвер. Делать надо следующие: 1. в Браузере вписывать адрес "localhost/db1" 2. в появившемся списке выбрать файл "info_form.html" 3. работать с формами как показано в уроке Моей ошибкой было то что файл "info_form.html" я запускал дважды кликнув на него или через правую кнопку и выбирал браузер, в итоге адрес получался такой: " file:///Z:/home/localhost/www/db1/info_form.html "- это неправильный запуск. Надо именно прописывать в начале " localhost/ " далее "ваша папка / " "info_form.html "

Комментарий добавил(а): Дмитрий
Дата: 2014-04-27

Автору уроков также порекомендую для таких же "Пинокио" как я в уроке добавить правильный способ запуска файла и сделать акцент. Вроде просто написать "запускаем файл" , но как я доказал мы пошли разными путями )

Комментарий добавил(а): Админ
Дата: 2014-04-29

Дима, рада, что Вы разобрались. Я про запуск файлов писала в одном из предыдущих уроков по работе с базой. Теперь буду иметь в виду, что об этом моменте нужно напоминать в каждом таком уроке. Спасибо Вам!

Комментарий добавил(а): Сергей
Дата: 2014-05-18

Скачал файлы все переделал под свой лад пишет ,что Новая запись вставлена в базу!,но в базе нет добавленной инфы

Комментарий добавил(а): Английские числительные
Дата: 2014-05-21

Спасибо Вам огромнейшее!!! http://angliiskii.net/post/74289492596

Комментарий добавил(а): Андрей
Дата: 2014-05-29

сделал все по примеру, но запись в бд так и не появилась(( появляется "Новая запись вставлена в базу!" так понимаю что таблица сама создастся, может проблема в сервере. версиях mysql и php

Комментарий добавил(а): Андрей
Дата: 2014-05-29

все получилось, типы данных указать нужно было)

Комментарий добавил(а): Андрей
Дата: 2014-05-30

Теперь друга проблема. Русские символы вопросами отображаются

Комментарий добавил(а): Александр
Дата: 2014-05-30

А должно ли возвращаться на исходную страницу? Если нет, то как это можно сделать.

Комментарий добавил(а): Админ
Дата: 2014-05-30

Проблему с русскими символами попробуйте решить так. Сразу после кода соединения с базой, пропишите следующее:

mysql_query ("set character_set_client='cp1251'"); mysql_query ("set character_set_results='cp1251'"); mysql_query ("set collation_connection='cp1251_general_ci'");

Комментарий добавил(а): Админ
Дата: 2014-05-30

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

echo "&lt;html&gt;&lt;head&gt;&lt;meta http-equiv='Refresh' content='0; URL=адрес, куда перенаправляете'&gt;&lt;/head&gt;&lt;/html&gt;"; exit();

Комментарий добавил(а): Александр
Дата: 2014-05-31

Спасибо огромнейшее.

Добавить Комментарий:


Введите сумму чисел с картинки:

Почему стоит подписаться на обновления блога

Будьте в курсе новых публикаций на Блоге!

rss podpiska

Введите Ваш E-mail: