Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите добавить многоуровневый массив в БАЗУ
 
 автор: bellator001   (07.01.2015 в 15:33)   письмо автору
 
 

Есть такой массив, его нужно добавить в БАЗУ. Не могу никак сделать запрос на добавление. Если кто знает помогите.




[name] => Array
        (
            [0] => 115000917
            [1] => 115000916
            [2] => 115000915
        )
 
    [text] => Array
        (
            [0] => Щит R1 C асмодианина 54-го уровня
            [1] => Щит R1 B асмодианина 54-го уровня
            [2] => Щит R1 A асмодианина 54-го уровня
        )
 
    [img] => Array
        (
            [0] => 54
            [1] => 54
            [2] => 54
        )
 
    [tegs] => Array
        (
            [0] => -
            [1] => -
            [2] => -
        )





INSERT INTO `table`(`name`, `text`, `img`, `tegs`) VALUES ('.....')

Вся надежда на этот форум))

  Ответить  
 
 автор: Trianon   (07.01.2015 в 15:54)   письмо автору
 
   для: bellator001   (07.01.2015 в 15:33)
 

какова структура таблицы?
Что является первичным ключом? Как его формировать?

Что означают ключи массива 0, 1, 2 ?
Если это связывающие ключи, может стоит сперва транспонировать массив?

Слово тег пишется через a: tag

  Ответить  
 
 автор: bellator001   (07.01.2015 в 16:26)   письмо автору
 
   для: Trianon   (07.01.2015 в 15:54)
 

Таблица такая


id |    name    | text   | img     | tags 
1  | bellator1 | text1 | 1.png | tags1
2  | bellator2 | text2 | 2.png | tags2
3  | bellator3 | text3 | 3.png | tags3

первичным ключом является id вот




А 0,1,2 это получилось так



<form>

<input type="text" name="name[]" >
<input type="text" name="name[]" >
<input type="text" name="name[]" >

<input type="text" name="text[]" >
<input type="text" name="text[]" >
<input type="text" name="text[]" >
</form>

  Ответить  
 
 автор: Лена   (07.01.2015 в 16:01)   письмо автору
 
   для: bellator001   (07.01.2015 в 15:33)
 

Как получился такой массив? Может, его с самого начала можно как-то по-другому сформировать?

  Ответить  
 
 автор: bellator001   (07.01.2015 в 16:26)   письмо автору
 
   для: Лена   (07.01.2015 в 16:01)
 

<form> 

<input type="text" name="name[]" > 
<input type="text" name="name[]" > 
<input type="text" name="name[]" > 

<input type="text" name="text[]" > 
<input type="text" name="text[]" > 
<input type="text" name="text[]" > 
</form> 


из этого

  Ответить  
 
 автор: Лена   (07.01.2015 в 16:28)   письмо автору
 
   для: bellator001   (07.01.2015 в 16:26)
 

Вам как-то по-другому форму надо было делать, расскажите, что вы там делаете подробнее...
Как вариант из того, что вы уже наделали:

<?php
$n 
$t '';
$arr = array('name'=>array(115000917,115000916,115000915),'text'=>array('Щит R1 C асмодианина 54-го уровня','Щит R1 B асмодианина 54-го уровня','Щит R1 A асмодианина 54-го уровня'));//ваш массив
$arr_res  = array();
foreach(
$arr as $k => $v) {

     foreach(
$v as $key => $val) {
        
$arr_res[$key][$k] = $val;
     }

}
  print 
"<pre>";
  
print_r($arr_res); //смотрим, что за массив получился, можно и не распечатывать

  
foreach($arr_res as $val) {
     
$n $val["name"];
     
$t $val["text"];
     
$sql "INSERT INTO `table`(`name`, `text`) VALUES ('$n','$t')";
     
$res mysql_query($sql);
  }

  Ответить  
 
 автор: bellator001   (07.01.2015 в 17:03)   письмо автору
 
   для: Лена   (07.01.2015 в 16:28)
 

Лена, Ваш ответ мне очень нравиться))
Дело в том, что у меня есть сайт с видео контентом. Т.е. видео это ссылки с youtube в основном.

И в youtube API есть такой фраймворк Zend_Gdata_YouTube

я вывожу на свой админ панель нужные мне видео с ютуб и удаляю не нужные. Потом я _POST запросом отправляю полученные данные в обработчик. и в выходе получается такой массив)) По одному я могу добавить, мне так не удобно

  Ответить  
 
 автор: confirm   (07.01.2015 в 16:54)   письмо автору
 
   для: bellator001   (07.01.2015 в 16:26)
 

Если у формы одно поле имени, то достаточно одной функции, чтобы приготовить это для помещения в базу:

<?
$sql 
'INSERT INTO table (field_name) VALUES (' implode('),('$val) . ') ....';


где $val - это подготовленный массив данных формы соответственно их типу.

  Ответить  
 
 автор: Trianon   (07.01.2015 в 17:07)   письмо автору
 
   для: confirm   (07.01.2015 в 16:54)
 

>где $val - это подготовленный массив данных формы соответственно их типу
подготовленный массив уже оказался бы окружен апострофами (поэлементно) :)).
иначе какой же он подготовленный?

  Ответить  
 
 автор: confirm   (07.01.2015 в 17:25)   письмо автору
 
   для: Trianon   (07.01.2015 в 17:07)
 

Подготовленный, это не апострофы, если все значения массива это числа, достаточно array_map('Intval', $array)). Если строки, mysql_real_escape_string и кавычки.

  Ответить  
 
 автор: Trianon   (07.01.2015 в 17:43)   письмо автору
 
   для: confirm   (07.01.2015 в 17:25)
 

>Подготовленный, это не апострофы, если все значения массива это числа, достаточно array_map('Intval', $array))

Именно.

> Если строки, mysql_real_escape_string и кавычки.

Именно! И кавычки.

То, что mysql_real_escape_string сама не обрамляет кавычками экранированный вариант - существенное упущение разработчиков.

  Ответить  
 
 автор: confirm   (07.01.2015 в 17:05)   письмо автору
 
   для: bellator001   (07.01.2015 в 15:33)
 

А для таких данных

<?
$sql 
'INSERT INTO `table`(`name`, `text`, `img`, `tags`) VALUES ('implode('),(' array_map(function($v) {
    return 
'"' implode('","' array_map('mysql_real_escape_string'$v)) . '"';
}, 
$array)) . ') ....';

  Ответить  
 
 автор: bellator001   (07.01.2015 в 17:13)   письмо автору
 
   для: confirm   (07.01.2015 в 17:05)
 

Warning: implode(): Argument must be an array in E:\bellator001\www\admin\module\module.php on line 2400

Notice: Array to string conversion in E:\bellator001\www\admin\module\module.php on line 2400

  Ответить  
 
 автор: confirm   (07.01.2015 в 17:22)   письмо автору
 
   для: bellator001   (07.01.2015 в 17:13)
 

А подумать?

Это я в примере написал имя массива полей формы для примера $array. Вы думаете я должен догадаться как у вас он реально называется и подставить его?

Вместо $array у вас должно быть то имя, что определяет этот массив.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования