Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Добавление записи в БД
Покинул форум
Сообщений всего: 208
Дата рег-ции: Март 2008
Помог: 0 раз(а)
Здравствуйте !!!!!!!!!!!!
Помогите пожалуйста, не могу разобраться в чем дело.
есть БД, с таблицей note (key_note,nomer,name)
Мне надо добавить запись в эту таблицу: Делаю я след.:
Заметьте так же, что названия полей если и заключаются в кавычки, то только в обратные: ``, но не в прямые ''. Не припомню так же, чтобы когда-то в INSERT указывалось INSERT INTO table `имя таблицы`, всегда INSERT INTO `имя таблицы`
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Altynayka
Отправлено: 13 Марта, 2008 - 10:58:44
Частый гость
Покинул форум
Сообщений всего: 208
Дата рег-ции: Март 2008
Помог: 0 раз(а)
Цитата:
Заметьте так же, что названия полей если и заключаются в кавычки, то только в обратные: ``, но не в прямые ''. Не припомню так же, чтобы когда-то в INSERT указывалось INSERT INTO table `имя таблицы`, всегда INSERT INTO `имя таблицы`
Спасибо, не знала.
А скажите а как правильно добавить запись в таблицу, если в ней есть несколько foreignkey.
Примерная структура: table
key_table autoincrement, primary_key
pole1
pole2
key_tab2 foreingkey
pole3
key_tab3 foreignkey
Даже не знаю, что написать там где foreignkey. Как мне в инпут поле ввести значения и связать таблицы при этом. Надо ведь не одну таблицу обновлять, а несколько , при чем передавать ключи.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Altynayka
Отправлено: 13 Марта, 2008 - 12:07:23
Частый гость
Покинул форум
Сообщений всего: 208
Дата рег-ции: Март 2008
Помог: 0 раз(а)
Я хотела спросить вот на счет чего. Мне нужно добавить запись в таблицу , в которой несколько foreignkey.
Я почитала на счет этого, была след. реализация, только в ней один foreignkey:
INSERT INTO person VALUES (NULL, 'Lilliana Angelovska');
INSERT INTO shirt VALUES
(NULL, 'dress', 'orange', LAST_INSERT_ID()),
(NULL, 'polo', 'red', LAST_INSERT_ID()),
(NULL, 'dress', 'blue', LAST_INSERT_ID()),
(NULL, 't-shirt', 'white', LAST_INSERT_ID());
SELECT * FROM person;
+----+---------------------+
| id | name |
+----+---------------------+
| 1 | Antonio Paz |
| 2 | Lilliana Angelovska |
+----+---------------------+
SELECT * FROM shirt;
+----+---------+--------+-------+
| id | style | color | owner |
+----+---------+--------+-------+
| 1 | polo | blue | 1 |
| 2 | dress | white | 1 |
| 3 | t-shirt | blue | 1 |
| 4 | dress | orange | 2 |
| 5 | polo | red | 2 |
| 6 | dress | blue | 2 |
| 7 | t-shirt | white | 2 |
+----+---------+--------+-------+
Он хранит значение LAST_INSERT_ID() , а как быть если у меня несколько таблиц надо заполнить перед тем, как заполнить одну общую????
EuGen
Отправлено: 13 Марта, 2008 - 12:32:17
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Все равно не понятно. Ведь значения в полях foreign key это всего лишь ссылки на строки соответствующих таблиц. Что же Вам мешает туда записывать нужные значения? Или Вы их не знаете, эти самые значения-то?
Предположим есть таблица classes и objects со связкой по class_id
Тогда при вставке очередной записи в objects Вам нужно просто подставить туда значение соответствующего class_id из classes. Аналогично если имеется несколько внешних ключей. Или проблема в чем-то другом?
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Altynayka
Отправлено: 13 Марта, 2008 - 12:56:10
Частый гость
Покинул форум
Сообщений всего: 208
Дата рег-ции: Март 2008
Помог: 0 раз(а)
Да проблема заключается в том, что я добавляю новую запись, т.е. значения до этого не были сохранены, т.е. все значения вводятся через форму. Это для начала, а потом я должна буду сделать проверку на сущ. данных. Я кажется Вас запутала! (Добавление)
в общем мне надо через пхп страничку добавлять записи в БД, в которой несколько (6)таблиц, при чем 6-ая таблица соединена с другими(через ключи по идее).
Мне надо сделать одну форму для ввода данных для всех этих таблиц, чтобы для пользователя казалось, что эта одна таблица. И если записи вводятся впервые, то добавлять во все таблицы, а если нет, то проверить.
EuGen
Отправлено: 13 Марта, 2008 - 13:08:11
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Ах вот оно что. Ну теперь я, кажется, все понял.
В контексте Вашей задачи это будет выглядеть так:
//сначала - добавляем соответствующие строки в главные таблицы - а то "ссылаться" будет не на что
mysql_query("INSERT INTO tab2 (pole21,pole22) VALUES ($pole21, $pole22)");
mysql_query("INSERT INTO tab3 (pole31,pole32) VALUES ($pole31, $pole32)");
//а теперь вставляем данные в таблицу, в которой есть foreign key - теперь у нас есть данные в основных таблицах
mysql_query("INSERT INTO tab1 (pole1,pole2,key_tab2,pole3,key_tab3) VALUES ($pole1, $pole2, (SELECT key_tab2 FROM tab2 WHERE pole21=$pole21 AND pole22=$pole22), $pole3, (SELECT key_tab3 FROM tab3 WHERE pole31=$pole31 AND pole32=$pole32))");
?>
Это - вариант, когда мы последнюю вставку делаем "с ходу". Но другой путь решения проблемы - использовать функцию mysql_insert_id():
//а теперь вставляем данные в таблицу, в которой есть foreign key - теперь у нас есть данные в основных таблицах
mysql_query("INSERT INTO tab1 (pole1,pole2,key_tab2,pole3,key_tab3) VALUES ($pole1, $pole2, $key_tab2, $pole3, $key_tab3)");
?>
Второй метод хорош тем, что не делается запроса к БД (в общем случае он может занимать довольно много времени). Я привел оба метода, чтобы Вы могли их попробовать на практике и сравнить полученные результаты.
В обоих примерах предполагается $pole1,$pole2 ... - введенные Вами через веб-форму значения. Кроме того, для наглядности я не добавлял в запросы защиту от sql-injection, как это делаю обычно.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Altynayka
Отправлено: 14 Марта, 2008 - 05:34:35
Частый гость
Покинул форум
Сообщений всего: 208
Дата рег-ции: Март 2008
Помог: 0 раз(а)
EuGen Спасибо.
Все хорошо получилось по второму методу, хотя я вчера пыталась сделать кое-что подобное, но использовала LAST_INSERT_ID(), вместо mysql_insert_id().
У меня еще несколько вопросов, как сделать проверку на существование вносимых данных в таблицах tab2,tab3. И просто если такая запись уже есть проверять, и передавать ссылку на ключ.
Хотя бы подскажите как сделать. Я подумала, может сначала сделать запрос на существование таких данных, потом приравнять это значение переменной, потом передать ссылку, а потом внести ссылку в новую запись. Так или по другому?
Попробовала сделать след. :
mysql_query("insert into tab2 (pole21) values ('".$ispol."')");
$k_ispol=mysql_insert_id();
$res_ispol=mysql_query ("select key_ispol from tab2 where pole21 like '".$sadd_ispol."'");
if ($res_ispol=="") $per_ispol=$k_ispol;
if ($res_ispol!="") $per_ispol=$res_ispol;
mysql_query("insert into note (pole1,pole2,key_ispol) values ($p1,$p2,$per_ispol) ");
В результате получила ошибку : Duplicate entry 'nnnnnn' for key 2.
Т.е. проверка на сущ. не прошла и застряло.
Я наверное замудрила или наоборот.
И еще один вопрос не по теме:
Если я установлю xampp на машине, которая включена в рабочую группу, которая может просматривать данные этой машины. Можно ли защитить данные от несанкционированного доступа. Кроме того, что данным не будет общего доступа, будет проходить авторизация на просмотр данных, т.е. для того, чтобы просмотреть файл пхп нужна будет авторизация.
Как защитить файлы типа: phpmyadmin.php
Чтобы кто-нибудь с этого компьютера случайного не смог просмотреть данные.
У меня пароль для входа к странице хранится в отдельном файле пхп прямым текстом. Как сделать его зашифрованным?
Еще один вопрос когда проходят запросы к подключению к БД я прописываю пользователя root при чем без пароля. А когда для root задаю пароль, подключение не происходит. ошибкы ссылается на файл config.inc.php. Там я пробовала прописать пароль, все равно не получается.
Буду очень благодарна.
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
По первому вопросу - собственно, Вы делаете вставку, а потом уже проверяете запись. То есть фактически это не проверка, не совсем понятно даже что это.
Правильно, я думаю, сделать так (если я верно понял названия, которые Вы используете):
//я делаю проверку на равенство - так как почему Вы используете LIKE, для меня загадка - если, например, $sadd_ispol будет равно 'a' или того хуже '%' - Вы никогда не отработаете эту ситуацию правильно
$result=mysql_query("SELECT key_ispol FROM tab2 WHERE pole21='".addslashes($ispol)."'");
mysql_query("insert into note (pole1,pole2,key_ispol) values ($p1,$p2,$res_ispol) ");
?>
По поводу защиты php файлов - я думаю, стандартных настроек безопасности операционной системы вполне достаточно.
Насчет пароля для root - если Вам удается зайти с пустым паролем, то это значит, что у Вас для root пароль в самой БД пустой. Естественно, что если в клиенте (то есть phpMyAdmin) Вы его ставите другим, подключение не получается.
Для того, чтобы задать пароль для пользователя root через phpMyAdmin, если мне не изменяет память, надо зайти localhost->"привилегии" и найти там пользователя root.
С точки зрения безопасности я бы не рекомендовал в скриптах работать под этим пользователем.
P.S. по вопросам безопасности рекомендую создавать новую тему, чтобы не отклоняться от изначальной темы обсуждения.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Xap4o
Отправлено: 15 Марта, 2008 - 15:17:29
Новичок
Покинул форум
Сообщений всего: 3
Дата рег-ции: Март 2008
Помог: 0 раз(а)
Помогите плиз! у меня есть тест там он вычесляет оценки 3,4,5 но мне надо чтобы он когда например я отвечаю на оценку три он добавлял оценку в бд! но я никак немогу онять как это делать! вот код
echo '<p>You need to score at least 50% to pass the exam</p>';
}
else
{
// create a string containing the score to one decimal place
$score = number_format($score, 1);
}
}
?>
EuGen
Отправлено: 17 Марта, 2008 - 10:08:45
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Ваш учебник PHP очень старый, $HTTP_POST_VARS не рекомендуется к использованию, вместо него используйте $_POST.
Далее, не вижу ни одного обращения к БД. Почитайте: http://php.su/mysql/
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Altynayka
Отправлено: 17 Марта, 2008 - 10:52:20
Частый гость
Покинул форум
Сообщений всего: 208
Дата рег-ции: Март 2008
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.