|
|
|
| есть таблица 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
(11.04.2009 в 22:02)
| | неужели никто не может помочь? | |
|
|
|
|
|
|
|
для: katok
(12.04.2009 в 15:40)
| | А почему ты не посмотришь, что именно у тебя в массиве содержится?
И ТЗ так сказать не совсем понял, зачем тебе регулярные выражения? Что именно содержится в полях, примеры то покажи... :)
И еще.... если массив не пуст, значит он или многомерный или ты не правильно к нему оюращаешься.... Чтобы поместить содержимое массива в бд, нужно его действительно вытянуть в линию, но не в прямом смысле, а в цикле по кол-ву эллементов выполнять запросы вида INSERT INTO....
Если что не понял - пиши, помогу.... | |
|
|
|
|
|
|
|
для: 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... | |
|
|
|
|
|
|
|
для: 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);
?>
|
| |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: katok
(12.04.2009 в 20:46)
| | Лучше в цикле сформировать запрос для многосторочного оператора INSERT и сделать один запрос к базе. Да и проверить строку запроса будет легко, непосредственно перед запросом к базе. | |
|
|
|
|
|
|
|
для: katok
(12.04.2009 в 20:46)
| | выведите запрос на экран.
1) У Вас явно скобка не закрыта.
2) А $cm2 и $cmo2 экранировать кто будет? Дядя? | |
|
|
|
|