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 :: Добавление записи в БД

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): [1] 2 3 »   

> Без описания
Altynayka
Отправлено: 13 Марта, 2008 - 09:53:08
Post Id


Частый гость


Покинул форум
Сообщений всего: 208
Дата рег-ции: Март 2008  


Помог: 0 раз(а)




Здравствуйте !!!!!!!!!!!!
Помогите пожалуйста, не могу разобраться в чем дело.
есть БД, с таблицей note (key_note,nomer,name)
Мне надо добавить запись в эту таблицу: Делаю я след.:

CODE (text):
скопировать код в буфер обмена
  1. mysql_query("INSERT INTO table note set 'nomer'=$snomer, 'name'=$sname");
  2.  

При чем :

key_note (autoincrement, primary key);
вход в саму базу проходит успешно.
$snomer, $sname передаются через форму правильно(пробовала вывести).

(Отредактировано автором: 13 Марта, 2008 - 09:58:22)

 
 Top
EuGen Администратор
Отправлено: 13 Марта, 2008 - 10:08:42
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Смотрите
http://phpfaq[dot]ru/debug
и сделайте отлов ошибок, я так же рекомендую Вам использовать стандарт SQL.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. mysql_query("INSERT INTO `note` (`nomer`,`name`) VALUES ('".addslashes($snomer)."', '".addslashes($sname)."')") or die(mysql_error());
  4. ?>
  5.  

Заметьте так же, что названия полей если и заключаются в кавычки, то только в обратные: ``, но не в прямые ''. Не припомню так же, чтобы когда-то в INSERT указывалось INSERT INTO table `имя таблицы`, всегда INSERT INTO `имя таблицы`

(Отредактировано автором: 13 Марта, 2008 - 10:18:48)



-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Altynayka
Отправлено: 13 Марта, 2008 - 10:58:44
Post Id


Частый гость


Покинул форум
Сообщений всего: 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

tab2
key_tab2 autoincrement, primary_key
pole21
pole22

tab3
key_tab3autoincrement, primary_key
pole31
pole32


Даже не знаю, что написать там где foreignkey. Как мне в инпут поле ввести значения и связать таблицы при этом. Надо ведь не одну таблицу обновлять, а несколько , при чем передавать ключи.
CODE (text):
скопировать код в буфер обмена
  1. <?php mysql_query("INSERT INTO `table` (`pole1`,`pole2`..................) ")?>
 
 Top
EuGen Администратор
Отправлено: 13 Марта, 2008 - 11:08:10
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Я не очень понял Вашей задачи. Опишите, для чего же это все потребовалось.
Кроме того, для простоты изложения структуры таблиц используйте запрос
CODE (text):
скопировать код в буфер обмена
  1.  
  2. describe `название таблицы`
  3.  

после чего полученный вывод MySQL (а такой запрос лучше делать в консоли) вставляйте в теги [ code ].

(Отредактировано автором: 13 Марта, 2008 - 11:08:39)



-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Altynayka
Отправлено: 13 Марта, 2008 - 12:07:23
Post Id


Частый гость


Покинул форум
Сообщений всего: 208
Дата рег-ции: Март 2008  


Помог: 0 раз(а)




Я хотела спросить вот на счет чего. Мне нужно добавить запись в таблицу , в которой несколько foreignkey.
Я почитала на счет этого, была след. реализация, только в ней один foreignkey:

CODE (text):
скопировать код в буфер обмена
  1. INSERT INTO person VALUES (NULL, 'Antonio Paz');
  2.  
  3. INSERT INTO shirt VALUES
  4. (NULL, 'polo', 'blue', LAST_INSERT_ID()),
  5. (NULL, 'dress', 'white', LAST_INSERT_ID()),
  6. (NULL, 't-shirt', 'blue', LAST_INSERT_ID());
  7.  
  8. INSERT INTO person VALUES (NULL, 'Lilliana Angelovska');
  9.  
  10. INSERT INTO shirt VALUES
  11. (NULL, 'dress', 'orange', LAST_INSERT_ID()),
  12. (NULL, 'polo', 'red', LAST_INSERT_ID()),
  13. (NULL, 'dress', 'blue', LAST_INSERT_ID()),
  14. (NULL, 't-shirt', 'white', LAST_INSERT_ID());
  15.  
  16. SELECT * FROM person;
  17. +----+---------------------+
  18. | id | name                |
  19. +----+---------------------+
  20. |  1 | Antonio Paz         |
  21. |  2 | Lilliana Angelovska |
  22. +----+---------------------+
  23.  
  24. SELECT * FROM shirt;
  25. +----+---------+--------+-------+
  26. | id | style   | color  | owner |
  27. +----+---------+--------+-------+
  28. |  1 | polo    | blue   |     1 |
  29. |  2 | dress   | white  |     1 |
  30. |  3 | t-shirt | blue   |     1 |
  31. |  4 | dress   | orange |     2 |
  32. |  5 | polo    | red    |     2 |
  33. |  6 | dress   | blue   |     2 |
  34. |  7 | t-shirt | white  |     2 |
  35. +----+---------+--------+-------+
  36.  

Он хранит значение LAST_INSERT_ID() , а как быть если у меня несколько таблиц надо заполнить перед тем, как заполнить одну общую????
 
 Top
EuGen Администратор
Отправлено: 13 Марта, 2008 - 12:32:17
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Все равно не понятно. Ведь значения в полях foreign key это всего лишь ссылки на строки соответствующих таблиц. Что же Вам мешает туда записывать нужные значения? Или Вы их не знаете, эти самые значения-то?
Предположим есть таблица classes и objects со связкой по class_id
PHP:
скопировать код в буфер обмена
  1.  
  2. mysql> describe classes;
  3. +------------+------------------+------+-----+-----------+----------------+
  4. | Field      | Type             | Null | Key | Default   | Extra          |
  5. +------------+------------------+------+-----+-----------+----------------+
  6. | class_id   | int(11) unsigned | NO   | PRI | NULL      | auto_increment |
  7. | class_name | varchar(16)      | NO   |     | undefined |                |
  8. +------------+------------------+------+-----+-----------+----------------+
  9.  
  10. mysql> describe objects;
  11. +-------------+------------------+------+-----+---------+----------------+
  12. | Field       | Type             | Null | Key | Default | Extra          |
  13. +-------------+------------------+------+-----+---------+----------------+
  14. | object_id   | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
  15. | object_name | varchar(16)      | YES  |     | NULL    |                |
  16. | class_id    | int(11) unsigned | NO   | MUL |         |                |
  17. +-------------+------------------+------+-----+---------+----------------+
  18.  

Тогда при вставке очередной записи в objects Вам нужно просто подставить туда значение соответствующего class_id из classes. Аналогично если имеется несколько внешних ключей. Или проблема в чем-то другом?

(Отредактировано автором: 13 Марта, 2008 - 12:34:16)



-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Altynayka
Отправлено: 13 Марта, 2008 - 12:56:10
Post Id


Частый гость


Покинул форум
Сообщений всего: 208
Дата рег-ции: Март 2008  


Помог: 0 раз(а)




Да проблема заключается в том, что я добавляю новую запись, т.е. значения до этого не были сохранены, т.е. все значения вводятся через форму. Это для начала, а потом я должна буду сделать проверку на сущ. данных. Я кажется Вас запутала!
(Добавление)
в общем мне надо через пхп страничку добавлять записи в БД, в которой несколько (6)таблиц, при чем 6-ая таблица соединена с другими(через ключи по идее).
Мне надо сделать одну форму для ввода данных для всех этих таблиц, чтобы для пользователя казалось, что эта одна таблица. И если записи вводятся впервые, то добавлять во все таблицы, а если нет, то проверить.
 
 Top
EuGen Администратор
Отправлено: 13 Марта, 2008 - 13:08:11
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Ах вот оно что. Ну теперь я, кажется, все понял.
В контексте Вашей задачи это будет выглядеть так:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. //сначала - добавляем соответствующие строки в главные таблицы - а то "ссылаться" будет не на что
  4. mysql_query("INSERT INTO tab2 (pole21,pole22) VALUES ($pole21, $pole22)");
  5. mysql_query("INSERT INTO tab3 (pole31,pole32) VALUES ($pole31, $pole32)");
  6. //а теперь вставляем данные в таблицу, в которой есть foreign key - теперь у нас есть данные в основных таблицах
  7. 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))");
  8. ?>
  9.  

Это - вариант, когда мы последнюю вставку делаем "с ходу". Но другой путь решения проблемы - использовать функцию mysql_insert_id():
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. //сначала - добавляем соответствующие строки в главные таблицы - а то "ссылаться" будет не на что
  4. mysql_query("INSERT INTO tab2 (pole21,pole22) VALUES ($pole21, $pole22)");
  5. //получаем вставленный id:
  6. $key_tab2=mysql_insert_id();
  7. mysql_query("INSERT INTO tab3 (pole31,pole32) VALUES ($pole31, $pole32)");
  8. //получаем вставленный id:
  9. $key_tab3=mysql_insert_id();
  10. //а теперь вставляем данные в таблицу, в которой есть foreign key - теперь у нас есть данные в основных таблицах
  11. mysql_query("INSERT INTO tab1 (pole1,pole2,key_tab2,pole3,key_tab3) VALUES ($pole1, $pole2, $key_tab2, $pole3, $key_tab3)");
  12. ?>
  13.  

Второй метод хорош тем, что не делается запроса к БД (в общем случае он может занимать довольно много времени). Я привел оба метода, чтобы Вы могли их попробовать на практике и сравнить полученные результаты.
В обоих примерах предполагается $pole1,$pole2 ... - введенные Вами через веб-форму значения. Кроме того, для наглядности я не добавлял в запросы защиту от sql-injection, как это делаю обычно.

(Отредактировано автором: 13 Марта, 2008 - 13:09:46)



-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Altynayka
Отправлено: 14 Марта, 2008 - 05:34:35
Post Id


Частый гость


Покинул форум
Сообщений всего: 208
Дата рег-ции: Март 2008  


Помог: 0 раз(а)




EuGen Спасибо.

Все хорошо получилось по второму методу, хотя я вчера пыталась сделать кое-что подобное, но использовала LAST_INSERT_ID(), вместо mysql_insert_id().
У меня еще несколько вопросов, как сделать проверку на существование вносимых данных в таблицах tab2,tab3. И просто если такая запись уже есть проверять, и передавать ссылку на ключ.
Хотя бы подскажите как сделать. Я подумала, может сначала сделать запрос на существование таких данных, потом приравнять это значение переменной, потом передать ссылку, а потом внести ссылку в новую запись. Так или по другому?
Попробовала сделать след. :


CODE (text):
скопировать код в буфер обмена
  1. <?php
  2. $sadd_ispol=$_POST['add_ispol'];
  3.  
  4. mysql_query("insert into tab2 (pole21) values ('".$ispol."')");
  5.  
  6. $k_ispol=mysql_insert_id();
  7.  
  8. $res_ispol=mysql_query ("select key_ispol from tab2 where pole21 like '".$sadd_ispol."'");
  9.  
  10. if ($res_ispol=="") $per_ispol=$k_ispol;
  11. if ($res_ispol!="") $per_ispol=$res_ispol;
  12.  
  13. mysql_query("insert into note (pole1,pole2,key_ispol) values  ($p1,$p2,$per_ispol) ");
  14.  
  15.  


В результате получила ошибку : Duplicate entry 'nnnnnn' for key 2.
Т.е. проверка на сущ. не прошла и застряло.
Я наверное замудрила или наоборот.


И еще один вопрос не по теме:
Если я установлю xampp на машине, которая включена в рабочую группу, которая может просматривать данные этой машины. Можно ли защитить данные от несанкционированного доступа. Кроме того, что данным не будет общего доступа, будет проходить авторизация на просмотр данных, т.е. для того, чтобы просмотреть файл пхп нужна будет авторизация.
Как защитить файлы типа: phpmyadmin.php
Чтобы кто-нибудь с этого компьютера случайного не смог просмотреть данные.
У меня пароль для входа к странице хранится в отдельном файле пхп прямым текстом. Как сделать его зашифрованным?
Еще один вопрос когда проходят запросы к подключению к БД я прописываю пользователя root при чем без пароля. А когда для root задаю пароль, подключение не происходит. ошибкы ссылается на файл config.inc.php. Там я пробовала прописать пароль, все равно не получается.
Буду очень благодарна.

(Отредактировано автором: 14 Марта, 2008 - 07:58:19)

 
 Top
EuGen Администратор
Отправлено: 14 Марта, 2008 - 09:41:39
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




По первому вопросу - собственно, Вы делаете вставку, а потом уже проверяете запись. То есть фактически это не проверка, не совсем понятно даже что это.
Правильно, я думаю, сделать так (если я верно понял названия, которые Вы используете):
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. //я делаю проверку на равенство - так как почему Вы используете LIKE, для меня загадка - если, например, $sadd_ispol будет равно 'a' или того хуже '%' - Вы никогда не отработаете эту ситуацию правильно
  4. $result=mysql_query("SELECT key_ispol FROM tab2 WHERE pole21='".addslashes($ispol)."'");
  5. if (mysql_num_rows($result))
  6. {
  7.    $row=mysql_fetch_array($result);
  8.    $res_ispol=$row['key_ispol'];
  9. }
  10. else
  11. {
  12.    mysql_query("insert into tab2 (pole21) values ('".$ispol."')");
  13.    $res_ispol=mysql_insert_id();
  14. }
  15. mysql_query("insert into note (pole1,pole2,key_ispol) values ($p1,$p2,$res_ispol) ");
  16. ?>
  17.  

По поводу защиты php файлов - я думаю, стандартных настроек безопасности операционной системы вполне достаточно.
Насчет пароля для root - если Вам удается зайти с пустым паролем, то это значит, что у Вас для root пароль в самой БД пустой. Естественно, что если в клиенте (то есть phpMyAdmin) Вы его ставите другим, подключение не получается.
Для того, чтобы задать пароль для пользователя root через phpMyAdmin, если мне не изменяет память, надо зайти localhost->"привилегии" и найти там пользователя root.
С точки зрения безопасности я бы не рекомендовал в скриптах работать под этим пользователем.
P.S. по вопросам безопасности рекомендую создавать новую тему, чтобы не отклоняться от изначальной темы обсуждения.

(Отредактировано автором: 14 Марта, 2008 - 10:00:38)



-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Altynayka
Отправлено: 14 Марта, 2008 - 10:32:38
Post Id


Частый гость


Покинул форум
Сообщений всего: 208
Дата рег-ции: Март 2008  


Помог: 0 раз(а)




EuGen
Вы меня спасаете уже в который раз.
Огромное спасибо.
 
 Top
EuGen Администратор
Отправлено: 14 Марта, 2008 - 11:04:56
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Не за что, буду рад, если сумею чему-нибудь научить.
P.S. может, когда-нибудь я буду работать на Вас. Или Вы на меня ((*

(Отредактировано автором: 14 Марта, 2008 - 11:05:31)



-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Xap4o
Отправлено: 15 Марта, 2008 - 15:17:29
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Март 2008  


Помог: 0 раз(а)




Помогите плиз! у меня есть тест там он вычесляет оценки 3,4,5 но мне надо чтобы он когда например я отвечаю на оценку три он добавлял оценку в бд! но я никак немогу онять как это делать! вот код
CODE (text):
скопировать код в буфер обмена
  1.  <?php
  2.   //create short variable names
  3.   $q1 = $HTTP_POST_VARS['q1'];
  4.   $q2 = $HTTP_POST_VARS['q2'];
  5.   $q3 = $HTTP_POST_VARS['q3'];
  6.   $name = $HTTP_POST_VARS['name'];
  7.  
  8.   // check that all the data was received
  9.   if($q1==''||$q2==''||$q3==''||$name=='')
  10.   {
  11.     echo '<h1><p align = center><img src="rosette.gif" alt="">
  12.                                 Sorry:
  13.                                 <img src="rosette.gif" alt=""></p></h1>';
  14.     echo '<p>You need to fill in your name and answer all questions</p>';
  15.   }
  16.   else
  17.   {
  18.     //add up the scores
  19.     $score = 0;
  20.     if($q1 == 1) // the correct answer for q1 is 1
  21.       $score++;
  22.     if($q2 == 1) // the correct answer for q2 is 1
  23.       $score++;
  24.     if($q3 == 1) // the correct answer for q3 is 1
  25.       $score++;
  26.  
  27.     //convert score to a percentage
  28.     $score = $score / 3 * 100;
  29.          
  30.     if($score < 50)
  31.     {
  32.       // this person failed
  33.       echo '<h1 align="center"><img src="rosette.gif" alt="" />
  34.                                   Sorry:
  35.                                   <img src="rosette.gif" alt="" /></h1>';
  36.       echo '<p>You need to score at least 50% to pass the exam</p>';
  37.     }
  38.     else
  39.     {
  40.       // create a string containing the score to one decimal place
  41.       $score = number_format($score, 1);
  42.  
  43.      
  44.  
  45.  
  46.      }
  47.   }
  48. ?>
  49.  
 
 Top
EuGen Администратор
Отправлено: 17 Марта, 2008 - 10:08:45
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Ваш учебник PHP очень старый, $HTTP_POST_VARS не рекомендуется к использованию, вместо него используйте $_POST.
Далее, не вижу ни одного обращения к БД. Почитайте:
http://php.su/mysql/


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Altynayka
Отправлено: 17 Марта, 2008 - 10:52:20
Post Id


Частый гость


Покинул форум
Сообщений всего: 208
Дата рег-ции: Март 2008  


Помог: 0 раз(а)




EuGen
С удовольствием
 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB