Массив в базу данных

Фанат

oncle terrible
Команда форума
А сейчас у тебя какой?
Можешь его вывести на экран и посмотреть?
 

Sufir

Я не волшебник, я только учусь
верно, смотрите если я буду писать что по подобное этому
PHP:
INSERT INTO `test` (`id`,`name`) VALUES "$arr[2],$arr[3]";
то мне в базу попадет просто array
Забудь о PHP пока. Закрой редактор, в котором ты пишешь скрипты. Открой программу, через которую ты работаешь с базой данных (консоль, phpMyAdmin, navicat?) и напиши и запусти свой запрос. И потом свой пиши в скрипте, что б в точности соответствовал, только данные из массива подставляй.
 

OneFinal

Новичок
PHP:
INSERT INTO `test` (`img`,`id`,`name`,`level`,`attack`) 
VALUES ('uploads/item_icon/icon_item_pl_torso_e01.png', 110601149, 'Величественная кираса верховного магистра арены', 55,250-280);
вот
и пример получаемого массива

PHP:
[1] => Array
        (
            [0] => uploads/item_icon/icon_item_pl_torso_e01.png
            [1] => uploads/item_icon/icon_item_pl_torso_e01.png
            [2] => uploads/item_icon/icon_item_pl_torso_e01.png
            [3] => uploads/item_icon/icon_item_pl_torso_e01.png
            [4] => uploads/item_icon/icon_item_pl_torso_u01.png
            [5] => uploads/item_icon/icon_item_pl_torso_u01.png
        )

    [2] => Array
        (
            [0] => 110601149
            [1] => 110601147
            [2] => 110601142
            [3] => 110601138
            [4] => 110600900
            [5] => 110600899
        )

    [3] => Array
        (
            [0] => Величественная кираса верховного магистра арены
            [1] => Величественная кираса верховного магистра арены
            [2] => Священная кираса верховного магистра арены
            [3] => Священная кираса верховного магистра арены
            [4] => Тестовая эпическая кираса 55-го уровня
            [5] => Тестовая эпическая кираса 55-го уровня
        )

    [4] => Array
        (
            [0] => 55
            [1] => 55
            [2] => 55
            [3] => 55
            [4] => 55
            [5] => 55
        )

    [5] => Array
        (
            [0] => 280-290
            [1] => 280-290
            [2] => 280-290
            [3] => 280-290
            [4] => 280-290
            [5] => 280-290
        )
 

Sufir

Я не волшебник, я только учусь
Вот теперь в PHP в цикле напиши:
PHP:
foreach ($array as $item) {
    echo "INSERT INTO `test` (`img`,`id`,`name`,`level`,`attack`) 
             VALUES ('uploads/item_icon/icon_item_pl_torso_e01.png', 110601149, 'Величественная кираса верховного магистра арены', 55,250-280)"
    //...
Пока без функций mysql и вставляй в нужные места нужные элементы массива. Добейся что бы на выводе у тебя получился именно такой запрос, который ты привёл.
 

OneFinal

Новичок
PHP:
foreach ($arr[1] as $item) 
foreach ($arr[2] as $item2) 
foreach ($arr[3] as $item3)
    echo "<pre>INSERT INTO `test` (`img`,`id`,`name`,`level`,`attack`) VALUES ('$item', $item2, '$item3', 55,250-280)";
в таком плане или я не понимаю? (в таком виде получаются копии вот пример
PHP:
INSERT INTO `test` (`img`,`id`,`name`,`level`,`attack`) VALUES ('ss_files/icon_item_2hsword_r01.png', 100900854, 'Сияющий стальной двуручный меч', 55,250-280)

INSERT INTO `test` (`img`,`id`,`name`,`level`,`attack`) VALUES ('ss_files/icon_item_2hsword_r01.png', 100900854, 'Сияющий стальной двуручный меч', 55,250-280)

INSERT INTO `test` (`img`,`id`,`name`,`level`,`attack`) VALUES ('ss_files/icon_item_2hsword_r01.png', 100900854, 'Двуручный меч асмодианина-новобранца', 55,250-280)

INSERT INTO `test` (`img`,`id`,`name`,`level`,`attack`) VALUES ('ss_files/icon_item_2hsword_r01.png', 100900854, 'Двуручный меч элийца-новобранца', 55,250-280)

INSERT INTO `test` (`img`,`id`,`name`,`level`,`attack`) VALUES ('ss_files/icon_item_2hsword_r01.png', 100900854, 'Двуручный меч Айгира', 55,250-280)

INSERT INTO `test` (`img`,`id`,`name`,`level`,`attack`) VALUES ('ss_files/icon_item_2hsword_r01.png', 100900854, 'Двуручный меч Телемаха', 55,250-280)

INSERT INTO `test` (`img`,`id`,`name`,`level`,`attack`) VALUES ('ss_files/icon_item_2hsword_r01.png', 100900854, 'Двуручный меч NPC подземелья Кромед', 55,250-280)

INSERT INTO `test` (`img`,`id`,`name`,`level`,`attack`) VALUES ('ss_files/icon_item_2hsword_r01.png', 100900854, 'Двуручный меч божественное зачарование02', 55,250-280)
ид один и тот же но имя меняется
 

OneFinal

Новичок
это я базу пиндю с aidb.ru т.к сейчас на даче а инет тут очень слабый за любым пуком леть в базу очень напряжно :))
 

Фанат

oncle terrible
Команда форума
Ну, хоть такие вещи и запрещены на форуме, но закрывать не будем :)
 

OneFinal

Новичок
Фанат, помоги домучить пожалуйста уже не могу мозги плавятся... :))
 

Фанат

oncle terrible
Команда форума
Такие [базовые] вещи надо уметь делать самому.
Это самая основа пхп - вывод строк определённого формата.

У тебя здесь три этапа:
1. Научиться получать данные из массива.
2. формировать из массива строку вида
PHP:
('ss_files/icon_item_2hsword_r01.png', '100900854', 'Сияющий стальной двуручный меч', '55','250-280')
3. Собрать из таких строк запрос.

По первому пункту.
Как бы делал я?
PHP:
foreach($arr[1] as $key => $value) {
  $var = $arr[2][$key];
  $var2 = $arr[3][$key];
}
выводя все переменные на экран.
Если все переменные выводятся как надо - формировал бы из них строку для вставки и добавлял в массив $sql
 

Placido

Наблюдаю
А насколько упростится задача, если в preg_match_all() использовать флаг PREG_SET_ORDER ;)
Массив будет в виде
PHP:
//массив $founds
    [0] => Array
        (
            [0] => 'первая найденная строка согласно всему паттерну'
            [1] => 110601149
            [2] => uploads/item_icon/icon_item_pl_torso_e01.png
            [3] => Величественная кираса верховного магистра арены
            [4] => 55
            [5] => 280-290
        )

    [1] => Array
        (
            [0] => 'вторая найденная строка согласно всему паттерну'
            [1] => 110601147
            [2] => uploads/item_icon/icon_item_pl_torso_e01.png
            [3] => Величественная кираса верховного магистра арены
            [4] => 55
            [5] => 280-290
        )
    
    [2] => Array
        (
            [0] => 'третья найденная строка согласно всему паттерну'
            [1] => 110601142
            [2] => uploads/item_icon/icon_item_pl_torso_e01.png
            [3] => Священная кираса верховного магистра арены
            [4] => 55
            [5] => 280-290
        )

    и т.д.
И тогда sql-запрос можно получить элементарно
PHP:
$sql = "INSERT INTO `test` (`img`,`id`,`name`,`level`,`attack`) VALUES ";
$values = array();
foreach ($founds as $found) {
    $values[] = "('{$found[2]}', {$found[1]}, '{$found[3]}', 55, '280-290')"
}
$sql .= implode(',', $values);
 

OneFinal

Новичок
Фанат, спасибо я не знал что можно в цыкле foreach обрабатывать сразу много массивов, сколько смотрел в инете не было, огромное спасибо
 

Фанат

oncle terrible
Команда форума
вообще-то, foreach обрабатывает 1 массив.
Но при этом никто не запрещает внутри цикла обращаться к другим массивам.
 

Acidjazz

Новичок
Друзья, подскажите пожалуйста человеку. Перечитал эту ветку , сделал код, но не работает зараза

Есть Массив

PHP:
Array

([0] => Array
    ([Id] => 9976293
    [dt] => 2015-03-17 00:01:05
    [region] => Москва
    [phone_find] => 9
    [metro] => )
[1] => Array
    ([Id] => 9976293
    [dt] => 2015-03-17 00:01:05
    [region] => Москва
    [phone_find] => 9
    [metro] => )
Написал код

PHP:
$sql = "INSERT INTO `testagenru_rdev`.`data` (`id_data`, `dt`, `region`, `url`, `marka`, `model`, `model_2`, `color`, `body`, `transmission`, `engine`, `enginevol`, `condition`, `drive`, `run`, `run_ed`, `year`, `modification`, `phone`, `fio`, `address`, `price`, `viewed`,`pts_owner`, `info`, `horse`, `vin`, `e_mail`, `company`, `fuel`, `photo`, `latitude`, `longitude`, `wheel`, `complect`, `phone_find`) VALUES ";


$values = array();
foreach ($ads as $found) {
$values[] = "('{$found[0]}', {$found[1]}, '{$found[2]}', {$found[3]}, '{$found[4]}...')";
}
$sql .= implode(',', $values);
$sql_result = mysql_query($sql ,$db) or die ('error insert');
Выдает ошибку:

PHP:
Notice: Undefined offset: 0 in /home/t/testagenru/public_html/automon/index.php on line 27

Notice: Undefined offset: 1 in /home/t/testagenru/public_html/automon/index.php on line 27
Notice: Undefined offset: 2 in /home/t/testagenru/public_html/automon/index.php on line 27
Notice: Undefined offset: 3 in /home/t/testagenru/public_html/automon/index.php on line 27
Notice: Undefined offset: 4 in /home/t/testagenru/public_html/automon/index.php on line 27
Notice: Undefined offset: 0 in /home/t/testagenru/public_html/automon/index.php on line 26
Notice: Undefined offset: 1 in /home/t/testagenru/public_html/automon/index.php on line 27
Notice: Undefined offset: 2 in /home/t/testagenru/public_html/automon/index.php on line 27
Notice: Undefined offset: 3 in /home/t/testagenru/public_html/automon/index.php on line 27
Notice: Undefined offset: 4 in /home/t/testagenru/public_html/automon/index.php on line 27
Не пойму что не так((((
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
все не так. Перечитай еще раз форум, в часности как правильно работать с БД, как отлаживать свои скрипты и переведи уже ошибки и осознай ее, после - исправь
 

Acidjazz

Новичок
Ошибку я осознал. Обработчик не может найти переменные внутри массива. Перечитал весь форум и инет и так не понял в чем косяк. Я уже пробовал так
PHP:
foreach ($ads as $key=>$found) {
$values[] = "('{$found[0]}', {$found[1]}, '{$found[2]}', {$found[3]}, '{$found[4]}...')";
}
Все равно не работает.

Товарищи, намекните пожалуйста хотя бы в чем загвоздка.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Загвоздка в отсутствии placeholders
 

Acidjazz

Новичок
Разобрался, сделал все топорно

PHP:
       foreach ($ads as $found) {
          $sql = "INSERT INTO `testagenru_rdev`.`data` (`id`, `id_data`,...) VALUES ('0', {$found['Id']}, '{$found['dt']}',  '{$found['region']}',...')";
          $sql_result = mysql_query($sql ,$db) or die ('error insert');
       }
 
Сверху