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

Форум MySQL

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

 

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

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

тема: как записать массив в бд?
 
 автор: katok   (11.04.2009 в 22:02)   письмо автору
 
 

есть таблица models, в ней такие столбцы:
id, mark, model, description, language

также есть табл. carimages:
id, mark, model, images

в табл. models в description не только текстовое описание, но и изображения:
<a href='images/big_images/2102_1.JPG'><img src='images/big_images/2102_1.JPG' alt='2102' /></a>
<a href='images/big_images/2102_2.JPG'><img src='images/big_images/2102_2.JPG' alt='2102' /></a>
<a href='images/big_images/2102_3.JPG'><img src='images/big_images/2102_3.JPG' alt='2102' /></a>
<a href='images/big_images/2102_4.JPG'><img src='images/big_images/2102_4.JPG' alt='2102' /></a>
<a href='images/big_images/2102_5.JPG'><img src='images/big_images/2102_5.JPG' alt='2102' /></a>
<a href='images/big_images/2102_6.JPG'><img src='images/big_images/2102_6.JPG' alt='2102' /></a>

мне нужно с помощью рег. выр. найти в models.description эти изображения и записать их в carimagrs.images


$h= mysql_query("select * from models") or die(mysql_error());

$pat="|<img[\s]*src=\'images\/big\_images\/([\_a-zA-Z\.0-9]+\.[a-zA-Z]{3,4})\'[\s]*alt=\'([\sa-zA-Z0-9]+)\'[\s]*\/>|isU";


while(list($id2, $cm2, $cmo2, $descr,$lang2) = mysql_fetch_array($h)){
$descr = str_replace('"', "'", $descr);
preg_match_all($pat, $descr, $myout);
//$che=implode("",$myout[0]);
$che = serialize($myout[0]);
mysql_query("insert into carimages values(0, '$cm2', '$cmo2', '$che')");
}


т.е. если я правильно понимаю, мне нужно массив сделать строкой.
$che=implode("",$myout[0]);
или
$che = serialize($myout[0]);

так ведь?

Массив $myout[0] не пустой, т.е. рег.выр. работает, но в images ничего не записывается.
Подскажите, что не так делаю?

  Ответить  
 
 автор: katok   (12.04.2009 в 15:40)   письмо автору
 
   для: katok   (11.04.2009 в 22:02)
 

неужели никто не может помочь?

  Ответить  
 
 автор: vml   (12.04.2009 в 16:01)   письмо автору
 
   для: katok   (12.04.2009 в 15:40)
 

А почему ты не посмотришь, что именно у тебя в массиве содержится?
print_r($mass);

И ТЗ так сказать не совсем понял, зачем тебе регулярные выражения? Что именно содержится в полях, примеры то покажи... :)
И еще.... если массив не пуст, значит он или многомерный или ты не правильно к нему оюращаешься.... Чтобы поместить содержимое массива в бд, нужно его действительно вытянуть в линию, но не в прямом смысле, а в цикле по кол-ву эллементов выполнять запросы вида INSERT INTO....
Если что не понял - пиши, помогу....

  Ответить  
 
 автор: katok   (12.04.2009 в 17:58)   письмо автору
 
   для: vml   (12.04.2009 в 16:01)
 

есть 2 таблицы models и carimages;

models выглядит так:
id, mark,model,description,language

поле description содержит такую инфу:
------------------------------------
ВАЗ 2101 (Жигули/Lada 1200/1300/1200S) начал выпускаться в 1970 году. Эта машина с непритязательной, лаконичной внешностью, на первый взгляд почти не отличалась от своего прародителя, ФИАТа-124. ....
<a href='images/big_images/2101_1.JPG'<img src='images/big_images/2101_1.JPG' alt='2101' /></a>
<a href='images/big_images/2101_2.JPG'><img src='images/big_images/2101_2.JPG' alt='2101' /></a>
<a href='images/big_images/2101_3.JPG'><img src='images/big_images/2101_3.JPG' alt='2101' /></a>
<a href='images/big_images/2101_4.JPG'><img src='images/big_images/2101_4.JPG' alt='2101' /></a>
<a href='images/big_images/2101_5.JPG'><img src='images/big_images/2101_5.JPG' alt='2101' /></a>
<a href='images/big_images/2101_6.JPG'><img src='images/big_images/2101_6.JPG' alt='2101' /></a>
-----------------------------------
таких записей много, т.е. про жигули 2101, 2102, 2103 ... и в каждом описании есть <img>.
рег.выр нужно чтобы найти теги <img..> . когда ВСЕ <img> найдены, получается массив. этот массив нужно запиcать в другую таблицу carimages. т.е. эта таблица должна выглядеть так:

id,mark,model,images

1, vaz, 2101, <img src='images/big_images/2101_1.JPG' alt='2101' /> ...
2, vaz, 2102, <img src='images/big_images/2102_1.JPG' alt='2102' /> ....
3, vaz, 2103, <img src='images/big_images/2103_1.JPG' alt='2103' /> ...

если сделать print_r($myout[0]) //массив с найденными в описании <img>,то выводит это:

Array
(
    [0] => <img src='images/big_images/2101_1.JPG' alt='2101' />
    [1] => <img src='images/big_images/2101_2.JPG' alt='2101' />
    [2] => <img src='images/big_images/2101_3.JPG' alt='2101' />
    [3] => <img src='images/big_images/2101_4.JPG' alt='2101' />
    [4] => <img src='images/big_images/2101_5.JPG' alt='2101' />
    [5] => <img src='images/big_images/2101_6.JPG' alt='2101' />

)
Array
(
    [0] => <img src='images/big_images/2102_1.JPG' alt='2102' />
    [1] => <img src='images/big_images/2102_2.JPG' alt='2102' />
    [2] => <img src='images/big_images/2102_3.JPG' alt='2102' />
    [3] => <img src='images/big_images/2102_4.JPG' alt='2102' />
    [4] => <img src='images/big_images/2102_5.JPG' alt='2102' />
    [5] => <img src='images/big_images/2102_6.JPG' alt='2102' />

)
Array
(
    [0] => <img src='images/big_images/2103_1.JPG' alt='2103' />
    [1] => <img src='images/big_images/2103_2.JPG' alt='2103' />
    [2] => <img src='images/big_images/2103_3.JPG' alt='2103' />
    [3] => <img src='images/big_images/2103_4.JPG' alt='2103' />
    [4] => <img src='images/big_images/2103_5.JPG' alt='2103' />
    [5] => <img src='images/big_images/2103_6.JPG' alt='2103' />

)


вот эти массивы мне надо записать в mysql...

  Ответить  
 
 автор: vml   (12.04.2009 в 19:38)   письмо автору
 
   для: katok   (12.04.2009 в 17:58)
 

Ну вот я и говорю:



<?php

$h 
mysql_query("select * from models") or die(mysql_error()); 

$pat="|<img[\s]*src=\'images\/big\_images\/([\_a-zA-Z\.0-9]+\.[a-zA-Z]{3,4})\'[\s]*alt=\'([\sa-zA-Z0-9]+)\'[\s]*\/>|isU"


while (list(
$id2$cm2$cmo2$descr,$lang2) = mysql_fetch_array($h)) { 

   
$descr str_replace('"'"'"$descr); 
   
preg_match_all($pat$descr$myout); // Как я понимаю - это твой результирующий массив
   
$i 0;
   while (
$myout[$i]) {
      
$query "INSERT INTO carimages values ('$cm2', '$cmo2', '".$myout[$i]."')";
      
$result mysql_query($query);
      if (!
$result) {
         
$error[] = $i;
      }
      
$i++;
  }
}

print(
"Ошибки были в следующих полях: "); print_r($error);
?>

  Ответить  
 
 автор: katok   (12.04.2009 в 20:46)   письмо автору
 
   для: vml   (12.04.2009 в 19:38)
 

спасибо за ответ.

я твой цикл поменял, мне так удобнее.


for($i=0; $i<=count($myout[0]); $i++) {
//if(mysql_query("INSERT INTO carimages values (0, '$cm2', '$cmo2', '".mysql_real_escape_string($myout[0][$i])."'")){
echo $myout[0][$i].'<br>';
//}


если вот так запустить, то выводятся элементы массива, все ок, но если убрать // в этом коде, то ничего
не записывает... пишет: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

  Ответить  
 
 автор: sim5   (15.04.2009 в 06:34)   письмо автору
 
   для: katok   (12.04.2009 в 20:46)
 

Лучше в цикле сформировать запрос для многосторочного оператора INSERT и сделать один запрос к базе. Да и проверить строку запроса будет легко, непосредственно перед запросом к базе.

  Ответить  
 
 автор: Trianon   (15.04.2009 в 09:48)   письмо автору
 
   для: katok   (12.04.2009 в 20:46)
 

выведите запрос на экран.
1) У Вас явно скобка не закрыта.
2) А $cm2 и $cmo2 экранировать кто будет? Дядя?

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

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