Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1 / 1 / 2
Регистрация: 26.03.2012
Сообщений: 88

Форма, и запись в бд

11.12.2012, 16:34. Показов 1307. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
С php вообще не как не дружу, но форму сделать необходимо, и вот сижу копаю и копаю.
Собственно что есть и что необходимо:
Есть бд mysql с таблицей 'userzayav';
В этой дб следующая структура:
Кликните здесь для просмотра всего текста
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
Navicat premium
Date: 2012-12-11 18:23:51
*/
 
SET FOREIGN_KEY_CHECKS=0;
 
-- ----------------------------
-- Table structure for `userzayav`
-- ----------------------------
DROP TABLE IF EXISTS `userzayav`;
CREATE TABLE `userzayav` (
  `data` text,
  `name` text,
  `famil` text,
  `phone` text,
  `emeil` text,
  `tip` text,
  `opisanie` text,
  `timerabots` text,
  `golosvaz` text,
  `opit` text
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 
-- ----------------------------
-- Records of userzayav
-- ----------------------------
INSERT INTO `userzayav` VALUES ('', '', '', '', '', '', '', '', '', '');


Нужна помощь в создании php формочки , которая будет собирать данные от пользователя и отправлять их в бд

На данном этапе есть:
form.html в котором создал одно поле для теста
HTML5
1
2
3
4
<form action="adddb.php" method="post">
<input name="message" type="textarea" cols="60"/>
<input name="send" type="submit" value="Send"/>
</form>
ну и сам adddb.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$hostname = "host"; 
$username = "user";
$password = "pas"; 
$dbName = "bdname"; 
$userstable = "userzayav";
 
mysql_connect($hostname,$username,$password) OR DIE("Ошибка соединения с базой данных. Повторите попытку позже."); 
mysql_select_db($dbName) or die(mysql_error()); 
 
 
mysql_close();
А как собственно отправить данные в базу? с php вообще не знаком толком, накопал такой исходник:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql_connect($hostname,$username,$password) OR DIE("Ошибка соединения с базой данных. Повторите попытку позже."); 
mysql_select_db($dbName) or die(mysql_error()); 
 
$message = $_POST['message'];
$query = "INSERT INTO messages(message) VALUES('$message')";
mysql_query($query) or die(mysql_error());
 
$query = "SELECT `id` FROM `messages` WHERE `message`='$message'";
$result_query = mysql_query($query) or die(mysql_error());
 
echo $result_query;
 
mysql_close();
?>
Сдесь вроде как идет запись в бд.


Пожалуйста приведите пример для моего случая как я могу передать заполненные пользователем данные в html форме в бд, при условии что полей будет несколько, мне бы хотя бы для одного поля, я потом там что нибуть придумаю)))
Именно примерчик нужно))
Желаетльно расписанный,тобишь что к чему в данной строчке. Как например в php послать sql запрос к базе? а я уж sql то напишу)) с mysql неплохо знаком.

p/s да я противоречю сам себе, в примере что я привел есть пример отправки запроса sql он стаит после $query
Но я не понимаю что за что там отвечает, и в коментариях к этому исходнику писали люди что он не верен, так как не льзя ставить скобки и т.д в запрос ито можно будет выполнить любую команду msql, на сколько это справедливо?


Надеюсь на вас знатоки php, буду очень благодарен, ибо учить php я не хочу для одной цели, так что пожалйста не пинайте учить.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.12.2012, 16:34
Ответы с готовыми решениями:

Дополнительная запись в бд и форма
Всем привет, нужен совет как лучше решить такую задачку... Суть сохраняем форму о прохождении практики учеником. Далее если он поменял...

Форма со списком и запись выбранного в бд
Здесь я ввожу то что мне нужно, а так же у меня есть две формочки со списком, который я беру из бд. &lt;?php ...

форма/запись/база/рефреш
Здраствуйте на сайте(все на 1ной странице) есть форма&lt;form method=&quot;post&quot;&gt;.......&lt;input type=&quot;submit&quot;...

10
8 / 8 / 5
Регистрация: 28.11.2012
Сообщений: 99
11.12.2012, 16:55
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 if (isset($_POST['send'])) {
$hostname = "host"; 
$username = "user";
$password = "pas"; 
$dbName = "bdname"; 
$userstable = "userzayav";
 
mysql_connect($hostname,$username,$password) OR DIE("Ошибка соединения с базой данных. Повторите попытку позже."); 
mysql_select_db($dbName) or die(mysql_error()); 
 
$data = time();
$name = $_POST['name'];
$famil = $_POST['famil']; 
// и так далее
$query = "INSERT INTO `userzayav` (data, name, famil) VALUES('$data', '$name', '$famil')"; // перечисляешь все твои переменные
mysql_query($query) or die(mysql_error());
mysql_close();
}
1
1 / 1 / 2
Регистрация: 26.03.2012
Сообщений: 88
11.12.2012, 17:17  [ТС]
Цитата Сообщение от lagrei66 Посмотреть сообщение
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 if (isset($_POST['send'])) {
$hostname = "host"; 
$username = "user";
$password = "pas"; 
$dbName = "bdname"; 
$userstable = "userzayav";
 
mysql_connect($hostname,$username,$password) OR DIE("Ошибка соединения с базой данных. Повторите попытку позже."); 
mysql_select_db($dbName) or die(mysql_error()); 
 
$data = time();
$name = $_POST['name'];
$famil = $_POST['famil']; 
// и так далее
$query = "INSERT INTO `userzayav` (data, name, famil) VALUES('$data', '$name', '$famil')"; // перечисляешь все твои переменные
mysql_query($query) or die(mysql_error());
mysql_close();
}

Большое спасибо
0
 Аватар для alpex
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762
11.12.2012, 20:01
Цитата Сообщение от inclub Посмотреть сообщение
$name = $_POST['name'];
здесь дыра для иньекции, нужно екранировать перед запросом
PHP
1
$name = mysql_real_escape_string($_POST['name']);
0
8 / 8 / 5
Регистрация: 28.11.2012
Сообщений: 99
11.12.2012, 20:06
Цитата Сообщение от alpex Посмотреть сообщение
здесь дыра для иньекции, нуж
ну я чтоб попроще, так то конешно
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
11.12.2012, 20:08
Работа с БД MySQL почитайте, может поймете лучше..
плюс к посту выше - еще нужно убирать пробелы т.к. могут случайно ввести 'Имя ' вместо 'Имя' и потом будут проблемы. И проверять на заполненность и правильность введенных данных поля также необходимо, иначе потом у вас половина записей в БД будут либо пустыми, либо с какой нибудь фигней вида 'or 1 #'
0
 Аватар для alpex
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762
11.12.2012, 20:11
я не пытался обвинить кого то или обидеть
просто сначала пишется попроще, потом забывается, а потом входит в привычку, нужно с самого начала привыкать чистить входящие данныехотя бы по минимуму, что бы потом это уже происходило автоматически
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
11.12.2012, 20:32
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
if (isset($_POST['send'])) {
$hostname = 'host'; 
$username = 'user';
$password = 'pas'; 
$dbName = 'bdname'; 
$userstable = 'userzayav';
 
mysql_connect($hostname,$username,$password); 
mysql_select_db($dbName);
mysql_set_charset('utf8');
function _escape($varName) {
    return trim(mysql_real_escape_string($varName));
}
$name = isset($_POST['name']) ? _escape($_POST['name']) : NULL;
$famil = isset($_POST['famil']) ? _escape($_POST['famil']) : NULL; 
// и так далее
if( empty($name) || empty($famil) /*все обязательные поля здесь так перечислите*/ )
    echo 'Вы заполнили не все поля.';
else {
// перечисляешь все твои переменные
$query = 'INSERT INTO `userzayav`(`data`, `name`, `famil`) VALUES(NOW(), "'.$name.'", "'.$famil.'")'; 
echo mysql_query($query) ? 'Success' : 'Fail: ' . mysql_error() ;
}
mysql_close();
}
НО Ваша структура таблицы оставляет желать лучшего..
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
DROP TABLE IF EXISTS `userzayav`;
CREATE TABLE `userzayav` (
  `data` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `name` VARCHAR(255),
  `famil` VARCHAR(255),
  `phone` VARCHAR(255),
  `emeil` VARCHAR(255),
  `tip` VARCHAR(255),
  `opisanie` text,
  `timerabots` VARCHAR(255),
  `golosvaz` VARCHAR(255),
  `opit` VARCHAR(255)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
я не особо понимаю что у вас означают поля со столь дивными названиями, поэтому возможно не везде правильно проставил. И используйте кодировку UTF8 а не latin, иначе очень скоро (если не сразу же) возникнут проблемы

Добавлено через 13 минут

Не по теме:

я всю голову сломал, скажите, что значит "голосвязь" и "опит" в вашей таблице?

1
1 / 1 / 2
Регистрация: 26.03.2012
Сообщений: 88
12.12.2012, 01:17  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
.......
НО Ваша структура таблицы оставляет желать лучшего..
.......
я не особо понимаю что у вас означают поля со столь дивными названиями, поэтому возможно не везде правильно проставил. И используйте кодировку UTF8 а не latin, иначе очень скоро (если не сразу же) возникнут проблемы

Большое спасибо, вы правы проблемы уже возникли, первый ответ на мою тему там человек привел код, я просидел уже час и не как не получается записать в базу русские символы... Перевел базу в utf-8
Пробовал добавлять mysql_query("SET NAMES UTF8");
в html добовлял <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Один фиг в бд идут ироглифы, или не идет не чего, сейчас попробую что написали вы, позже отпишу, по поводу таблицы все просто:
data- Дата заполнения заявки
name- Имя пользователя
famil - Фамилия пользователя
phone- Номер телефона
emeil - Электронная почта
tip - Сдесь будет... Сам забыл: нужно и в правду дать имена более (как сказать то, а, информативные) вообщем здесь будет один из следующих типов: 3d моделер, Дизайнер, художник, Дизанер уравней, Аниматор и т.д Я думаю будет выпадающий список) с множественным выбором(так как 1 человек может уметь и делать 3д модели и анимировать их)
opisanie- Что то что хочет добавить пользователь
timerabot- В какой промежуток времени может работать
golossvaz -Может пользоватся голосовым общением? Варианты: Слушать и говорить, Только слушать
opit - Опыт работы в данной сфере(имеется ввиду геймдев)

Добавлено через 1 минуту
Цитата Сообщение от KOPOJI Посмотреть сообщение

Не по теме:

я всю голову сломал, скажите, что значит "голосвязь" и "опит" в вашей таблице?

Не по теме:

Интересно а вам что на ум шло?)):D



Добавлено через 3 минуты
Кстате, может еще кто подскажет как можно из php через smtp gmail при успешном создании заявки мне на почту отсылать писмецо, с данными что заполнил пользователь? Или хотя бы ткните в нужную сторону)

Добавлено через 22 минуты
Вообщем попробовал я ваш пример, большое спасибо) сделано хорошо) и с обязательными полями классно, но есть одно но... Так и не получается разобраться с кодировкой.

то есть получается так что вообще не чего кроме даты не записывается
Вот что я делаю:
1.Для проверки в html использую пока только 2 переменных;
Кликните здесь для просмотра всего текста
HTML5
1
2
3
4
5
<form action="adddb.php" method="post">
<input name="name" type="textarea" cols="60"/>
<input name="famil" type="textarea" cols="60"/>
<input name="send" type="submit" value="Send!"/>
</form>
Пробовал так же добавлять в начало

HTML5
1
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">


2.Затем я как вы и сказали изменил кодировку, удалил полностью таблицу и выполнил запрос который привели вы;
3.Ну и все вроде, а на выходе я получаю вот что:
Под спойлерами буду кидать картинки, что бы не грузить рекламу на других сайтах!)
Кликните здесь для просмотра всего текста

как можно видеть я вводил в name= test а в famil = тест
И получилось что русские символы не прошли

И еще партия скриншотов с моими кодировками:
Кликните здесь для просмотра всего текста
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
12.12.2012, 10:00
не кодировать в UTF-8 без BOM, а преобразовать
и не забудьте !doctype в начале html-кода и отправить заголовок с кодировкой utf-8 с помощью тега meta
Я так понимаю, ваше название таблицы - это таблица с пользователями? Назовем ее соответственно..
и, судя по описаниям ваших полей - лучше будет тогда так:

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `data` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `name` VARCHAR(255) NOT NULL,
  `surname` VARCHAR(255) NOT NULL,
  `phone` BIGINT(15) NOT NULL,
  `email` VARCHAR(255) NOT NULL,
  `prof_id` TINYINT(3) NOT NULL,
  `title` TEXT NOT NULL,
  `time_interval` VARCHAR(255) NOT NULL,
  `voice_communication` TINYINT(1) NOT NULL,
  `practice` VARCHAR(255) NOT NULL,
   PRIMARY KEY(`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
По поводу периода работы - я не до конца соображаю, что там может храниться, какое значение, поэтому оставляю varchar-ом.
voice_communication - значение до 9, т.е. например, 0 - ничего не разрешено, 1 - только слушать, 2 - слушать и говорить. И либо при выводе проверяете и выводите нужное, либо создаете еще одну таблицу с двумя полями наподобие prof_id (щас объясню)
Создаете еще одну таблицу profession
SQL
1
2
3
4
5
6
DROP TABLE IF EXISTS `profession`;
CREATE TABLE `profession` (
  `id` TINYINT(3) NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(255) NOT NULL,
   PRIMARY KEY(`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
туда, в эту таблицу, вставляете все ваши профессии:
Цитата Сообщение от inclub Посмотреть сообщение
3d моделер, Дизайнер, художник, Дизанер уравней, Аниматор и т.д
Не думаю, что у Вас их будет больше 127, но если все же будет больше - поменяйте TINYINT(3) на SMALLINT(5)
думаю, больше 65000 у вас точно не будет
А в таблицу users в поле prof_id вставляете id-шник нужной записи.
Писать название полей на английском - намного лучше, даже если что-то забыл, можно залезть в переводчик и посмотреть как это переводится, тогда сразу вспомнишь (скорее всего)

по поводу самого кода..
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Title</title>
</head>
<body>
<form method="post">
  <input type="text" name="...........
.........
  <input type="submit" name="send">
</form>
 
<br />
 
<?php
if (isset($_POST['send'])) {
    $hostname = 'host'; 
    $username = 'user';
    $password = 'pas'; 
    $dbName = 'bdname'; 
    $userstable = 'users';
     function _escape($varName) {
        return trim(mysql_real_escape_string($varName));
    }
 
    mysql_connect($hostname,$username,$password); 
    mysql_select_db($dbName);
/*ниже установка кодировки. если у вас MySQL >= 5.0.7 и php >= 5.2.3, то больше ничего не нужно
если меньше - тогда используйте mysql_query('SET NAMES "utf8"'); */
    mysql_set_charset('utf8'); 
 
    $name = isset($_POST['name']) ? _escape($_POST['name']) : NULL;
    $surname = isset($_POST['surname']) ? _escape($_POST['surname']) : NULL; 
    // и так далее
    if( empty($name) || empty($famil) /*все обязательные поля здесь так перечислите*/ )
        echo 'Вы заполнили не все поля.';
    else {
/* перечисляешь все твои поля и переменные. В запросе, чтобы не париться что что-то там забыл - указывай все поля и все полученные данные. Только не забывай, что в полях с целочисленным типом необходимо указывать число, например, ноль
При инициализации переменных в этих значениях нужно просто заменить немного проверку,
раз там только число может быть, достаточно будет привести к целому типу, вот так:
    $prof_id = (isset($_POST['prof_id'])) ? (int) $_POST['prof_id'] : 0;
*/
        $query = 'INSERT INTO `users`(`data`, `name`, `surname`,.....) VALUES(NOW(), "'.$name.'", "'.$surname.'",......)'; 
        echo mysql_query($query) ? 'Success' : 'Fail: ' . mysql_error() ;
    }
    mysql_close();
}
?>
</body>
</html>
как то так, в общем..
а при выводе из БД, чтобы сразу подставлялись нужные профессии - используете вот такой запрос:
SQL
1
2
3
4
SELECT `users`.*,`profession`.`name` AS `profession` 
    FROM `users`
        LEFT JOIN `profession`
            ON `users`.`prof_id` = `profession`.`id`
тогда из таблицы users извлечется вся инфа, а из таблицы profession извлечется нужная для каждой записи профессия (в массиве она будет под индексом profession)

Фух, вроде все.. Надеюсь, что вам это окажется полезным и поможет..
1
1 / 1 / 2
Регистрация: 26.03.2012
Сообщений: 88
13.12.2012, 05:41  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
не кодировать в UTF-8 без BOM, а преобразовать
и не забудьте !doctype в начале html-кода и отправить заголовок с кодировкой utf-8 с помощью тега meta
Я так понимаю, ваше название таблицы - это таблица с пользователями? Назовем ее соответственно..
и, судя по описаниям ваших полей - лучше будет тогда так:
......
Фух, вроде все.. Надеюсь, что вам это окажется полезным и поможет..

Просто огромное спасибо!))) Вы сделали неподсильную для меня с моими знаниями работу)))) Я бы очень долго с этим всем разбирался)) с работы приду все попробую)) Спасибо еще раз)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.12.2012, 05:41
Помогаю со студенческими работами здесь

Форма, прикрепленный файл, запись в БД
Здравствуйте! Хочу сделать так: есть форма с полями для ввода цыфр, поле для прикрепления файла и кнопка Submit. Вопрос состоит в том как...

Форма не создаёт новую запись в таблице
Привет всем. Подскажите пожалуйста, по каким причинам форма может не создавать новую (пустую) запись? Значок стрелки с жёлтой звёздочкой...

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

Обычная подчинённая форма. Как сохранить запись-то?
Уважаемые форумчане! Как, скажите, можно решить сию задачу? Прикладываю скрин: Обращался на форум sql, но увы, там не смог...

Нужна помощ. Форма поиска не возвращает запись.
Форма поиска не возвращает запись в вызывающую форму. В самом VB6.0, всё работает, а когда я скомпилировал в (exe) фал, выдаёт ошибку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru