|
|
|
| Добрый ден, ест вот такая страница, которая грабит определенную таблицу и генерит много-много массивов.
Вопрос вот в 4ем: как эти массивы запихнуть в БД?
Вот код страницы.:
<?php
include ('config.php');
$s = file_get_contents('http://www.zlatynuz.cz/result.htm');
preg_match_all("#<tr>(.*?)</tr>#si",$s,$out);
$records = array();
foreach($out[1] as $t_string){
preg_match_all("#<font.*?>(.*?)<#si",$t_string,$values);
$records[] = $values[1];
}
echo "<pre>";
print_r($records);
$records = serialize($records);
echo $records."\n";
$records = unserialize($records);
print_r($records);
echo "</pre>";
?>
|
В таблице в базе есть 22 поля. В каждом массиве тоже 22 элемента. Меня интересует запрос.
Точнее нaдо сделать так, что при изменении инфы на удаленном сайте, откуда все грабиться, автоматически обновлялась моя база через эту страницу.
Заранее благодарен
P.S.
Я написал запрос к БД, но не знаю куда его запихнуть
<?php
foreach ($records as $key => $values) {
$query = "INSERT INTO records VALUES (
'".$values[5]."', '".$values[0]."', '".
$values[16]."', '".$values[15]."', '".
$values[6]."', '".$values[7]."', '".
$values[19]."', '".$values[9]."', '".
$values[10]."', '".$values[8]."', '".
$values[7]."', '".$values[10]."', '".
$values[5]."', '".$values[5]."', '".
$values[14]."', '".$values[15]."', '".
$values[16]."', '".$values[17]."', '".
$values[18]."', '".$values[19]."', '".
$values[20]."', '".$values[21]."', '".
$values[22]."')";
}
?>
|
| |
|
|
|
|
|
|
|
для: Kien
(24.07.2007 в 13:23)
| | ключевое поле в массиве есть?
поле, которым можно идентифицировать строки в БД. | |
|
|
|
|
|
|
|
для: Trianon
(24.07.2007 в 13:26)
| | есть. значение $values[5] - это номер. У каждого свой. | |
|
|
|
|
|
|
|
для: Kien
(24.07.2007 в 13:51)
| | тогда просто создавайте запросы
$sql0 = REPLACE INTO tbl (col1,col2,.....col22) VALUES ";
foreach($arr as $row)
{
$r = array();
foreach($row as $col)
$r[] = "'".mysql_escape_string($col)."'";
$r = '('.explode(',', $r).')'
mysql_query($sql0 .$r);
}
|
| |
|
|
|
|
|
|
|
для: Trianon
(24.07.2007 в 13:59)
| | Че-то пишет ошибку в этой строке:
$sql0 = REPLACE INTO tbl (col1,col2,.....col22) VALUES ";
|
| |
|
|
|
|
|
|
|
для: Kien
(24.07.2007 в 14:10)
| | А если после знака равенства поставить кавычку? | |
|
|
|
|
|
|
|
для: Trianon
(24.07.2007 в 15:01)
| | похоже с кавычками 4то-то, но я как-то не могу понять где.
Вот код
$sql0 = "REPLACE INTO rec (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 ) VALUES";
foreach($arr as $row)
{
$r = array();
foreach($row as $col)
$r[] = "'".mysql_escape_string($col)."'";
$r = '('.explode(',', $r).')'
mysql_query($sql0 .$r);
}
|
Вот ошибка:
Parse error: syntax error, unexpected T_STRING in /data2/zlatynuz/html/3.php on line :
| |
|
|
|
|
|
|
|
для: Kien
(25.07.2007 в 14:17)
| | так исправьте. Точку-с-запятой сложно поставить чтоли? | |
|
|
|
|
|
|
|
для: Trianon
(25.07.2007 в 14:48)
| | Пардон, как-то затупил.....
Теперь пишет ошибку мол Column count doesn't match value count at row 1
Это может быть только со стороны базы (количество ячеек в таблице) или с кодом тоже могут бть проблемы? | |
|
|
|
|
|
|
|
для: Kien
(25.07.2007 в 14:17)
| | Поднимаю тему опять:
Все-таки не работает запись в базу.
ПОля массивов надо записать под определенными именами столбцов. Типа ID, DATE, NAME, SURNAME и т.д. Т.е. каждый массив в одну строку.
Помогите пожалуйста, горю. До понедельника надо сделать.
структура таблицы такова:
id | date | name | ........ |
array[0][5] | array[0][0] | array[0][6] | array[0][...] |
array[1][5] | array[1][0] | array[1][6] | array[1][...] |
|
Вот как выглядят массивы:
Array
(
[0] => Array
(
[0] => 01/07/2007
[1] => 2131422
[2] => 2131422
[3] => Transfer Delivered To Recv Branch
[4] => 0102131422
[5] => 061666DE
[6] => OLENA KOZLOVSKA
[7] => 562/147 CERNOKOSTELECKA PRAHA CZ, 15000, CZ
[8] => +420608110243
[9] => GALYNA TSYGULSKA
[10] => N
[11] => N
[12] => 9701.00
[13] => 0.05
[14] => 291.00
[15] => USD
[16] => 450.00
[17] => Ukraine
[18] => Ukrsibbank 22, Blukhera Str. Kharkov
[19] => Russlav Bank (C.I.S)
[20] => Infobus-I
[21] => 13/10 Pod vytopnou
[22] => czinfobusaa
)
[1] => Array
(
[0] => 01/07/2007
[1] => 2131423
[2] => 2131423
[3] => Paid
[4] => 0102131423
[5] => 061666DF
[6] => MYKHAYLO CHUDNYY
[7] => 3/498 U HELLADY PRAHA 4 , N , CESKA REPUBLIKA
[8] => 608068087
[9] => VALENTYNA CHUDNA
[10] => 453770
[11] => N
[12] => 10779.00
[13] => 0.05
[14] => 323.00
[15] => USD
[16] => 500.00
[17] => Ukraine
[18] => Ukrsibbank 270, Shevchenko Blv. Cherkassy
[19] => Russlav Bank (C.I.S)
[20] => Infobus-Iv
[21] => 13/10 Pod vytopnou
[22] => czinfobusad
)
[2] => Array
(
[0] => 01/07/2007
[1] => 2131426
[2] => 2131426
[3] => Transfer Delivered To Recv Branch
[4] => 0102131426
[5] => 061666E2
[6] => VASYL BOVHYRYA
[7] => 82 MASARYKOVO NAM. BELA POD BEZDEZEM , N, CZ
[8] => 776667569
[9] => KATERYNA BOVGYRYA
[10] => 00380509129968
[11] => KSYUKHA
[12] => 14445.00
[13] => 0.05
[14] => 433.00
[15] => USD
[16] => 670.00
[17] => Ukraine
[18] => Nadra Bank 6, Nezavisimosti Sq. Dubno
[19] => Russlav Bank (C.I.S)
[20] => Infobus-I
[21] => 13/10 Pod vytopnou
[22] => czinfobusaa
)
)
|
| |
|
|
|
|
|
|
|
для: Kien
(26.07.2007 в 13:19)
| | Вам осталось перечислить 23 точных имени столбца таблицы. Так?
UPD. И еще переделать формат столбца с датой. | |
|
|
|
|
|
|
|
для: Trianon
(26.07.2007 в 13:22)
| | я сделал, но он записывает только дату и то в формате 00-00-0000.
Я дико извиняюсь за то, что отвлекаю такими вопросами, но просто не особо в этом разбираюсь... | |
|
|
|
|
|
|
|
для: Kien
(26.07.2007 в 14:32)
| | Вы столбцы перечислите наконец, или нет?
А лучше - приведите дамп структуры таблицы (закладка Export в phpMyAdmin) | |
|
|
|
|
|
|
|
для: Trianon
(26.07.2007 в 14:51)
| | Вот дамп
CREATE TABLE `rec` (
`trans_date` date NOT NULL default '0000-00-00',
`send_trans_id` varchar(10) NOT NULL default '',
`rec_trans_id` varchar(10) NOT NULL default '',
`status` varchar(15) NOT NULL default '',
`id` varchar(20) NOT NULL default '',
`code` varchar(20) NOT NULL default '',
`sender` varchar(50) NOT NULL default '',
`sender_adres` varchar(100) NOT NULL default '',
`sender_phone` varchar(20) NOT NULL default '',
`reciever` varchar(50) NOT NULL default '',
`reciever_phone` varchar(20) NOT NULL default '',
`password` varchar(20) NOT NULL default '',
`sent_amount` varchar(20) NOT NULL default '',
`exchange_rate` varchar(5) NOT NULL default '',
`comission` varchar(10) NOT NULL default '',
`currency` varchar(20) NOT NULL default '',
`payout_amount` varchar(20) NOT NULL default '',
`country` varchar(20) NOT NULL default '',
`receiving_branch` varchar(100) NOT NULL default '',
`receiving_agent` varchar(100) NOT NULL default '',
`sending_agent` varchar(100) NOT NULL default '',
`sending_branch` varchar(100) NOT NULL default '',
`sending_operator` varchar(100) NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
|
| |
|
|
|
|
|
|
|
для: Kien
(26.07.2007 в 19:11)
| | первая строка кода:
$sql0 = "REPLACE INTO rec (`trans_date`
,`send_trans_id`
,`rec_trans_id`
,`status`
,`id`
,`code`
,`sender`
,`sender_adres`
,`sender_phone`
,`reciever`
,`reciever_phone`
,`password`
,`sent_amount`
,`exchange_rate`
,`comission`
,`currency`
,`payout_amount`
,`country`
,`receiving_branch`
,`receiving_agent`
,`sending_agent`
,`sending_branch`
,`sending_operator`
) VALUES";
|
замена даты с европейского на восточный формат:
$d = explode('/',$col);
$d = sprintf("%04d-%02d-%02d", $d[2], $d[1], $d[0]);
|
| |
|
|
|
|
|
|
|
для: Trianon
(26.07.2007 в 19:30)
| | млин, все равно не пишет.
Может дело в этом цикле?
foreach($records as $row)
{
$r = array();
foreach($row as $col)
$r[] = "'".mysql_escape_string($col)."'";
$r = '('.explode(',', $r).')';
mysql_query($sql0 .$r);
|
| |
|
|
|
|
|
|
|
для: Kien
(30.07.2007 в 13:13)
| | я бы не стал гадать на кофейной гуще, а посмотрел.
заменив строку mysql_query($sql0 .$r);
на
mysql_query($sql = $sql0.$r) or die(""Error in $sql : ".mysql_error());
|
| |
|
|
|
|
|
|
|
для: Trianon
(30.07.2007 в 13:34)
| |
Error in REPLACE INTO rec (`trans_date` ,`send_trans_id` ,`rec_trans_id` ,`status` ,`id` ,`code` ,`sender` ,`sender_adres` ,`sender_phone` ,
`reciever` ,`reciever_phone` ,`password` ,`sent_amount` ,`exchange_rate` ,`comission` ,`currency` ,
`payout_amount` ,`country` ,`receiving_branch` ,`receiving_agent` ,`sending_agent` ,`sending_branch` ,
`sending_operator` ) VALUES(Array) : Column count doesn't match value count at row 1
|
Что бы это могло значить? | |
|
|
|
|
|
|
|
для: Kien
(30.07.2007 в 13:42)
| | Скорее всего количество заменяемых записей больще количества столбцов | |
|
|
|
|
|
|
|
для: Kien
(30.07.2007 в 13:42)
| | explode на implode поменяйте. | |
|
|
|
|
|
|
|
для: Trianon
(30.07.2007 в 14:02)
| | Заработало, спасибо огромное за помощь!!!!
А можно ли сделать так, чтобы в базе записи заменялись а не добовлялись при обновлении страницы? | |
|
|
|
|
|
|
|
для: Kien
(30.07.2007 в 14:42)
| | они должны заменяться.
Как минимум, если первичный ключ сохраняет свое значение. | |
|
|
|
|
|
|
|
для: Trianon
(30.07.2007 в 14:59)
| | Класс, спасибо большое, все работает!!! | |
|
|
|
|
|
|
|
для: Kien
(30.07.2007 в 15:12)
| | а вот формат даты Вы, пожоже, не поменяли. | |
|
|
|
|
|
|
|
для: Trianon
(30.07.2007 в 15:23)
| | А дата нужна просто для отчета. Поиска по ней не будет.
И еще такой вопрос: PHP код в XML вставляeтся также как и вHTML? | |
|
|
|
|
|
|
|
для: Kien
(30.07.2007 в 15:28)
| | какая разница, для чего она нужна, если она У Вас формируется некорректно, и вполне вероятно, что некоторые записи из-за этого попадать в таблицу не будут? | |
|
|
|
|
|
|
|
для: Kien
(30.07.2007 в 15:28)
| | >И еще такой вопрос: PHP код в XML вставляeтся также как и вHTML?
Я бы ответил так:
XML-код формируется с помощью php-скриптов точно также как и HTML. | |
|
|
|
|
|
|
|
для: Trianon
(30.07.2007 в 15:34)
| | Просто надо сделать с базы вывод в XML страницу.....
Это можно сделать с запросами к базе через PHP? | |
|
|
|
|
|
|
|
для: Kien
(30.07.2007 в 15:41)
| | конечно. | |
|
|
|
|
|
|
|
для: Trianon
(30.07.2007 в 15:52)
| | Спасибо за помощь | |
|
|
|
|