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 :: insert несколько id из масива

 PHP.SU

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


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

> Без описания
Wisterman
Отправлено: 04 Августа, 2014 - 15:18:51
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Авг. 2014  


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




Доброго дня.
Подскажите, пожалуйста.
Есть table1
id, text1, text2, text_n
Из него я делаю выборку по id.

Есть поле <textarea> в которое через энтер вносятся номера.
Дальше, постом летит на обработку.
PHP:
скопировать код в буфер обмена
  1. $invoices = $_POST['invoices'];
  2.            
  3.             $invoices = explode("\n", $invoices);
  4.            
  5.        
  6.            
  7.             $invoices = array_unique($invoices);

как правильно пишется запрос, чтобы внести все номера из массива в table2 вида

invoice_id, text1, text2, text_n, где invoice_id это перебранные значения массива invoices, а text1, text2, text_n идут из запроса по table1.

Понимаю, что через implode но никак правильно не получается сформировать запрос.

П.С. Нужно еще учесть, что в массив могут внести всего один номер.


Немножко дополнюсь.
Код странички вот такой
PHP:
скопировать код в буфер обмена
  1. if (isset($_POST['add']))
  2.     {
  3.         $result = mysql_query("SELECT * FROM table1 WHERE nomer = '$_POST[id]'");//запрос из первой таблицы.  
  4.        
  5.         if(!empty($_POST['invoices']))//если в поле внесены номера или номер
  6.         {
  7.             echo "Внесены номера наклыдных";
  8.             print_r ($invoices);
  9.  
  10. //вот тут нужен запрос виде
  11. // * значения из первого запроса.
  12. //** перебранные значения из массива.
  13. $q = "INSERT INTO table 2 (invoice_id, text1, text2, text_n) VALUES(invoice_id**, text1*, text2*, text_n*);
  14.        }
  15.        else
  16.        {
  17.            echo "А накладные не введены.";
  18.        }
  19.    }

[HTML]<form action="#" method="post">
<input type="hidden" name="id" value="<?=$row['nomer'];?>">
<TEXTAREA type="text" NAME="invoices" id="notes" ROWS=30 COLS=7></TEXTAREA><input type="submit" name="add" value="Добавить" />
</form> [/HTML]

И как можно написать условие "Если invoice_id уже существует" - обновить.

(Отредактировано автором: 04 Августа, 2014 - 15:20:02)

 
 Top
esterio
Отправлено: 04 Августа, 2014 - 15:26:07
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




Wisterman пишет:
И как можно написать условие "Если invoice_id уже существует" - обновить.

CODE (SQL):
скопировать код в буфер обмена
  1. REPLACE INTO ..
  2. INSERT INTO ... ON DUBLICATE KEY UPDATE ...

Wisterman пишет:
Понимаю, что через implode но никак правильно не получается сформировать запрос

CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO TABLE VALUES (field1, field2), (field1, field2), (field1, field2), (field1, field2) ...

Wisterman пишет:
$invoices = $_POST['invoices'];

PHP:
скопировать код в буфер обмена
  1. $invoices = isset($_POST['invoices']) ? $_POST['invoices'] : null;

А также погуглите о SQL иньекциях
 
 Top
Tyoma5891
Отправлено: 04 Августа, 2014 - 15:27:57
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


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




странно что у Вас тут массив получается:

должна быть строка))
а вот если так, то массив:
Комментировать не буду)
ну а дальше по тексту трудновато понять что Вам нужно...
 
 Top
esterio
Отправлено: 04 Августа, 2014 - 15:33:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




Tyoma5891 пишет:
должна быть строка))

нет там все равно будет массив, просто кажлый елемент будет заканчиваться символом \r

Перевод строки.
Сам стандарт HTML говорит что перенос строки должен быть CRLF (тоесть \r\n)
17[dot]13[dot]4 Form content types

(Отредактировано автором: 04 Августа, 2014 - 15:34:17)

 
 Top
Wisterman
Отправлено: 04 Августа, 2014 - 15:34:41
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Авг. 2014  


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




Tyoma5891 пишет:
странно что у Вас тут массив получается:

должна быть строка))
а вот если так, то массив:
Комментировать не буду)
ну а дальше по тексту трудновато понять что Вам нужно...

Давайте еще раз попробую.
Есть таблица1
id, text, text2

Есть таблица2
inv_id, data, data2

Есть поле, в которое через Enter вносятся номера накладных.
Например ввели 123456 и 654321

Нужно, чтобы по нажатию кнопки в таблицу 2 вставилось две (в зависимости от количества внесенного в поле) строки.
inv_id = 123456, data = text, data2 = text2
inv_id = 654321, data = text, data2 = text2
(Добавление)
если я делаю

то результатом дает

а нужно ж чтоб было
 
 Top
Tyoma5891
Отправлено: 04 Августа, 2014 - 15:47:20
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


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




ладно вот фрагмент кода который заносит данные в нужную Вам таблицу:
PHP:
скопировать код в буфер обмена
  1. foreach ($invoices as $key=>$invoice)
  2. {
  3.      mysql_query("UPDATE таблица2 SET data = text,  data2 = text2 where inv_id = '$invoice');
  4. }
 
 Top
Wisterman
Отправлено: 04 Августа, 2014 - 16:07:12
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Авг. 2014  


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




Tyoma5891 пишет:
ладно вот фрагмент кода который заносит данные в нужную Вам таблицу:
PHP:
скопировать код в буфер обмена
  1. foreach ($invoices as $key=>$invoice)
  2. {
  3.      mysql_query("UPDATE таблица2 SET data = text,  data2 = text2 where inv_id = '$invoice');
  4. }

Не понимаю васУлыбка

Тут бы для начала разобратсья как правильно принять данные из textarea
(Добавление)
Таксь. С формирование массива вроде разобрался.
PHP:
скопировать код в буфер обмена
  1. $string = trim($_POST['invoices']);
  2.             $massiv = explode("\r\n", $string);
  3.             echo "Внесены номера наклыдных";
  4.             print_r ($massiv);

а как теперь сделать то что я говорил
Цитата:
Нужно, чтобы по нажатию кнопки в таблицу 2 вставилось две (в зависимости от количества внесенного в поле) строки.
inv_id = 123456, data = text, data2 = text2
inv_id = 654321, data = text, data2 = text2
 
 Top
Tyoma5891
Отправлено: 04 Августа, 2014 - 16:11:39
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


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




ну вы же уже писали сами вот:
PHP:
скопировать код в буфер обмена
  1. $invoices = mysql_real_escape_string($_POST['invoices']);
  2.            
  3.             $invoices = explode("\r\n", $invoices);
  4. //а дальше что я писал:
  5. foreach ($invoices as $key=>$invoice)
  6. {
  7.      mysql_query("UPDATE таблица2 SET data = text,  data2 = text2 where inv_id = '$invoice');
  8. }
  9.  
 
 Top
Wisterman
Отправлено: 04 Августа, 2014 - 17:00:41
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Авг. 2014  


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




Tyoma5891 пишет:
ну вы же уже писали сами вот:
PHP:
скопировать код в буфер обмена
  1. $invoices = mysql_real_escape_string($_POST['invoices']);
  2.            
  3.             $invoices = explode("\r\n", $invoices);
  4. //а дальше что я писал:
  5. foreach ($invoices as $key=>$invoice)
  6. {
  7.      mysql_query("UPDATE таблица2 SET data = text,  data2 = text2 where inv_id = '$invoice');
  8. }
  9.  

A UPDATE при отсутсвии такой записи в таблице будет работать как INSERT?
(Добавление)
PHP:
скопировать код в буфер обмена
  1.    $string = trim($_POST['invoices']);
  2.             $massiv = explode("\r\n", $string);
  3.             echo "Внесены номера наклыдных";
  4.             print_r ($massiv);
  5.             foreach ($massiv as $key=>$massiv)
  6. {
  7.      $a = "REPLACE INTO invoices  (invoice_id,fio_otp,fio_pol) VALUES('$massiv','text','text2')";
  8. echo $a;
  9. $add = mysql_query($a) or die(mysql_error());

Вот так вроде рабоатет.
Осталось только в text и text2 подставить значения из первого запроса
PHP:
скопировать код в буфер обмена
  1. $result = mysql_query("SELECT * FROM zakazy WHERE nomer = '$_POST[id]'");  

(Отредактировано автором: 04 Августа, 2014 - 17:11:25)

 
 Top
esterio
Отправлено: 04 Августа, 2014 - 17:11:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




CODE (SQL):
скопировать код в буфер обмена
  1. REPLACE INTO table1 (field1, field2) SELECT field1, field2) WHERE ...

?
 
 Top
Wisterman
Отправлено: 04 Августа, 2014 - 17:12:05
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Авг. 2014  


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




esterio пишет:
CODE (SQL):
скопировать код в буфер обмена
  1. REPLACE INTO table1 (field1, field2) SELECT field1, field2) WHERE ...

?

не понял выражения.
(Добавление)
Распишу в деталях. Может поможет)
Первый запрос
CODE (SQL):
скопировать код в буфер обмена
  1. $result = mysql_query("SELECT * FROM zakazy WHERE nomer = '$_POST[id]'");  

запрос вернет что-то вроде nomer = 1, fio_otp = aaa, fio_pol = bbb.
дальше идет
PHP:
скопировать код в буфер обмена
  1. $string = trim($_POST['invoices']);
  2.             $massiv = explode("\r\n", $string);
  3.             echo "Внесены номера наклыдных";
  4.             print_r ($massiv);
  5.             foreach ($massiv as $key=>$massiv)
  6. {
  7.      $a = "REPLACE INTO invoices  (invoice_id,fio_otp,fio_pol) VALUES('$massiv','text','text2')";
  8. echo $a;
  9. $add = mysql_query($a) or die(mysql_error());
  10. }

нужно в fio_otp и fio_pol из второго запроса, вставить занчения fio_otp и fio_pol из первого.
 
 Top
Tyoma5891
Отправлено: 04 Августа, 2014 - 17:23:38
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


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




A UPDATE при отсутсвии такой записи в таблице будет работать как INSERT?
да
 
 Top
esterio
Отправлено: 04 Августа, 2014 - 17:25:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




Wisterman пишет:
не понял выражения.

REPLACE сделает INSERT если не будет найдено или UPDATE если найдет запись по індексах (причем индексы должны быть уникальны и парой если учитиваеться несколько полей)
а селект это выборка данных.
тоесть выбрать данные из одной таблицы и вставить в другую. если есть заменить если нет вставить, как-то так
 
 Top
Wisterman
Отправлено: 04 Августа, 2014 - 17:43:31
Post Id


Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Авг. 2014  


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




esterio пишет:
Wisterman пишет:
не понял выражения.

REPLACE сделает INSERT если не будет найдено или UPDATE если найдет запись по індексах (причем индексы должны быть уникальны и парой если учитиваеться несколько полей)
а селект это выборка данных.
тоесть выбрать данные из одной таблицы и вставить в другую. если есть заменить если нет вставить, как-то так

Простите, а можно код для моего случая. Вообще не догоняю, что это за запрос такой получается.
Я думал, нужно сначала сделать выборку из первой таблице. Потом, как бы выводя результат первого запроса, формировать запрос (insert) для другой таблицы.
 
 Top
Tyoma5891
Отправлено: 04 Августа, 2014 - 17:50:10
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


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




Wisterman пишет:

Вообще не догоняю, что это за запрос такой получается.

потому что Вы не можете четко сформулировать то что Вам нужно(мы не должны вытягивать все из Вас по кускам), то что Вам требуется не спеша, последовательно...

(Отредактировано автором: 04 Августа, 2014 - 17:50:46)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB