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
Форумы портала PHP.SU :: Версия для печати :: insert несколько id из масива
Форумы портала PHP.SU » » Вопросы новичков » insert несколько id из масива

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

1. Wisterman - 04 Августа, 2014 - 15:18:51 - перейти к сообщению
Доброго дня.
Подскажите, пожалуйста.
Есть 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 уже существует" - обновить.
2. esterio - 04 Августа, 2014 - 15:26:07 - перейти к сообщению
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 иньекциях
3. Tyoma5891 - 04 Августа, 2014 - 15:27:57 - перейти к сообщению
странно что у Вас тут массив получается:

должна быть строка))
а вот если так, то массив:
PHP:
скопировать код в буфер обмена
  1.  $invoices = explode('\r\n', $invoices);
Комментировать не буду)
ну а дальше по тексту трудновато понять что Вам нужно...
4. esterio - 04 Августа, 2014 - 15:33:11 - перейти к сообщению
Tyoma5891 пишет:
должна быть строка))

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

Перевод строки.
Сам стандарт HTML говорит что перенос строки должен быть CRLF (тоесть \r\n)
17[dot]13[dot]4 Form content types
5. Wisterman - 04 Августа, 2014 - 15:34:41 - перейти к сообщению
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
(Добавление)
если я делаю
PHP:
скопировать код в буфер обмена
  1. $invoices = explode('\r\n', $invoices);

то результатом дает
PHP:
скопировать код в буфер обмена
  1. Array ( [0] => 123456 1234567 )

а нужно ж чтоб было
PHP:
скопировать код в буфер обмена
  1. Array ( [0] => 123456, [1] => 1234567 )
6. Tyoma5891 - 04 Августа, 2014 - 15:47:20 - перейти к сообщению
ладно вот фрагмент кода который заносит данные в нужную Вам таблицу:
PHP:
скопировать код в буфер обмена
  1. foreach ($invoices as $key=>$invoice)
  2. {
  3.      mysql_query("UPDATE таблица2 SET data = text,  data2 = text2 where inv_id = '$invoice');
  4. }
7. Wisterman - 04 Августа, 2014 - 16:07:12 - перейти к сообщению
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
8. Tyoma5891 - 04 Августа, 2014 - 16:11:39 - перейти к сообщению
ну вы же уже писали сами вот:
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.  
9. Wisterman - 04 Августа, 2014 - 17:00:41 - перейти к сообщению
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]'");  
10. esterio - 04 Августа, 2014 - 17:11:08 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. REPLACE INTO table1 (field1, field2) SELECT field1, field2) WHERE ...

?
11. Wisterman - 04 Августа, 2014 - 17:12:05 - перейти к сообщению
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 из первого.
12. Tyoma5891 - 04 Августа, 2014 - 17:23:38 - перейти к сообщению
A UPDATE при отсутсвии такой записи в таблице будет работать как INSERT?
да
13. esterio - 04 Августа, 2014 - 17:25:20 - перейти к сообщению
Wisterman пишет:
не понял выражения.

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

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

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

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

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

 

Powered by ExBB FM 1.0 RC1