За последние 24 часа нас посетили 18198 программистов и 1700 роботов. Сейчас ищут 1545 программистов ...

Забить массив построчно в БД

Тема в разделе "PHP для новичков", создана пользователем Spayn, 25 ноя 2008.

  1. Spayn

    Spayn Активный пользователь

    С нами с:
    25 ноя 2008
    Сообщения:
    51
    Симпатии:
    0
    Никак не могу решить проблему : у нас есть массив, который содержит ряд ссылок $link[0] , нужно сделать так : что бы каждая ссылка из этого массива записывалась в БД, причём одна ссылка, в одну строку. Как такое реализовать, и можно ли вообше? Заранее спасибо!
     
  2. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск
    PHP:
    1.  
    2. <?php
    3. $query = "INSERT INTO tbl (links) ";
    4. $beg = true;
    5. foreach ($link as $val) {
    6.     if (!$beg) $query .= ", ";
    7.     $query .= "VALUES ('$val')";
    8.     $beg = false;
    9. }
    10.  mysql_query($query);
    11.  
     
  3. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    VALUES 1 раз пишается
     
  4. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск
    Ну тогда так=)
    PHP:
    1.  
    2. <?php
    3. $query = "INSERT INTO tbl (links) VALUES ";
    4. $beg = true;
    5. foreach ($link as $val) {
    6.     if (!$beg) $query .= ", ";
    7.     $query .= "('$val')";
    8.     $beg = false;
    9. }
    10.  mysql_query($query);
    11.  
     
  5. Spayn

    Spayn Активный пользователь

    С нами с:
    25 ноя 2008
    Сообщения:
    51
    Симпатии:
    0
    Хм, у меня пишет ошибку :

    Warning: Invalid argument supplied for foreach() in W:\home\localhost\www\1.php on line 33
     
  6. Spayn

    Spayn Активный пользователь

    С нами с:
    25 ноя 2008
    Сообщения:
    51
    Симпатии:
    0
    Собственно 33 строка :


    foreach ($link as $val) {
     
  7. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск
    $link точно массив?
     
  8. Spayn

    Spayn Активный пользователь

    С нами с:
    25 ноя 2008
    Сообщения:
    51
    Симпатии:
    0
    Мм ну вот весь код моего приложения

    Код (Text):
    1. $file = "http://www.photoshop-master.ru/rss_les2.php";
    2.   $XML = file_get_contents($file);
    3.   if(!$XML) continue;
    4.   $ITEMS = GetXMLAllVal($XML, 'item');
    5.   foreach($ITEMS as $item){
    6.   $title = GetXMLFirstVal($item, 'title');
    7.   $link = GetXMLFirstVal($item, 'link');
    8.   $text = GetXMLFirstVal($item, 'description');
    9.   $date = GetXMLFirstVal($item, 'pubDate');
    10.   $title = html_entity_decode($title, ENT_QUOTES);
    11.   $text = html_entity_decode($text, ENT_QUOTES);
    12.   print("<em><a href=\"$link\" style=\"text-decoration: none\" >".$title."</a></em>   <i>".$date."<br /><hr color=\"#CCCCCC\" />".$text."<br /><hr color=\"#CCCCCC\" /><br /><br />");
    13.   }
    14.   function GetXMLFirstVal($r,$t) {
    15.           if(preg_match_all('/<('.$t.')[^>]{0,}>(.*)<\/\\1>/Usi',$r,$o)) return $o[2][0];
    16.           return '';
    17.   }
    18.     function GetXMLAllVal($r,$t) {
    19.           if(preg_match_all('/<('.$t.')[^>]{0,}?>(.*)<\/\\1>/Usi',$r,$o)) return $o[2];
    20.           return array();
    21.             }
     
  9. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск
    Попробуй так

    PHP:
    1.  
    2. <?php
    3. $file = "http://www.photoshop-master.ru/rss_les2.php";
    4.   $XML = file_get_contents($file);
    5.   if(!$XML) continue;
    6.   $ITEMS = GetXMLAllVal($XML, 'item');
    7. $query = "INSERT INTO tbl (links) VALUES ";
    8. $beg = true;
    9.   foreach($ITEMS as $item){
    10.   $title = GetXMLFirstVal($item, 'title');
    11.   if (!$beg) $query .= ", ";
    12.   $link = GetXMLFirstVal($item, 'link');
    13.   $query .= "('$link')";
    14.   $beg =false;
    15.   $text = GetXMLFirstVal($item, 'description');
    16.   $date = GetXMLFirstVal($item, 'pubDate');
    17.   $title = html_entity_decode($title, ENT_QUOTES);
    18.   $text = html_entity_decode($text, ENT_QUOTES);
    19.   print("<em><a href=\"$link\" style=\"text-decoration: none\" >".$title."</a></em>   <i>".$date."<br /><hr color=\"#CCCCCC\" />".$text."<br /><hr color=\"#CCCCCC\" /><br /><br />");
    20.   }
    21.   function GetXMLFirstVal($r,$t) {
    22.           if(preg_match_all('/<('.$t.')[^>]{0,}>(.*)<\/\\1>/Usi',$r,$o)) return $o[2][0];
    23.           return '';
    24.   }
    25. mysql_query($query);
    26.     function GetXMLAllVal($r,$t) {
    27.           if(preg_match_all('/<('.$t.')[^>]{0,}?>(.*)<\/\\1>/Usi',$r,$o)) return $o[2];
    28.           return array();
    29.             }
    30.  
     
  10. Spayn

    Spayn Активный пользователь

    С нами с:
    25 ноя 2008
    Сообщения:
    51
    Симпатии:
    0
    Хм... выводит :

    Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost' (using password: NO) in W:\home\localhost\www\1.php on line 25

    Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in W:\home\localhost\www\1.php on line 25


    Я сам разобраться немогу.... Вообше у меня цель такая : всю информацию из $title, $date, $description забить в БД построчно, а потом это выводить в цикле... Главное мне их в Бд забить...
     
  11. Spayn

    Spayn Активный пользователь

    С нами с:
    25 ноя 2008
    Сообщения:
    51
    Симпатии:
    0
    Так, ошибку исправил, просто коннект к базе не подписал (вот я идиот), ошибок нету, но и в базу ничего не добовляется
     
  12. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Тут ошибка элементарная, в готовый запрос бы догадался кто посмотреть. Скобки должны один раз открываться и один раз закрываться, значения в них должны идти через запятую. А у вас куча скобок получается.
     
  13. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск
    Напиши тогда так
    PHP:
    1.  
    2. <?
    3. $res = mysql_query($query) or die($res);
    4.  
    Посмотри если ничего не выведет значит должен записывать=)
     
  14. obsrv

    obsrv Активный пользователь

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    никто о максимальной длине запроса не задумался...
     
  15. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск
    [vs]
    Дык вроде каждый линк должен быть на новой строчке в таблице
     
  16. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск
    Ну так же никто не задумывался что после каждого запуска скрипта все будет заново добавляться
     
  17. obsrv

    obsrv Активный пользователь

    С нами с:
    2 окт 2008
    Сообщения:
    238
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    free-bits
    может скрипт на один раз ;).
    А вот 'длина' может подставить и в этот, единственный, раз.
     
  18. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск
    Или так и надо, вобщем я запутался=)
     
  19. Spayn

    Spayn Активный пользователь

    С нами с:
    25 ноя 2008
    Сообщения:
    51
    Симпатии:
    0
    Ну мне как надо: просто на это рсс ленте много урокв, т.е один раз добавил в принципе и забыл...
     
  20. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск
    Можно поставить в цикле условие проверяющее длину запроса с бреаком
     
  21. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск
    Или лучше условие которое вызывает запись и очищает строку запроса
     
  22. Spayn

    Spayn Активный пользователь

    С нами с:
    25 ноя 2008
    Сообщения:
    51
    Симпатии:
    0
    free-bits [vs]
    Дык вроде каждый линк должен быть на новой строчке в таблице


    да мне так именно нужно, просто свосем необязательно что бы эти данны изменялись при изменянии в рсс ленте, насколько я понимаю, все перменные в коде это массивы... и вот из них, всю информацию надо раскидать построчно соотвествено : ссылка1 - название1- описание1 ; ссылка2-названи2-описание2 и так до конца...
     
  23. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск
    Не все, внутри цикла нет ни одного массива.
     
  24. Spayn

    Spayn Активный пользователь

    С нами с:
    25 ноя 2008
    Сообщения:
    51
    Симпатии:
    0
    Хм... это усложняет задачу?
     
  25. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск
    Когда надо несколько срок добавить в таблицу в одно запросе это выглядит так?
    Код (Text):
    1.  
    2. INSERT INTO ... (..., ...) VALUES (..., ...), (..., ...)
    Или так?
    Код (Text):
    1.  
    2. INSERT INTO ... (..., ...) VALUES (..., ...), VALUES (..., ...)