Проблема в регулярных выражениях в PHP
а зачем tinytext? Чем не катит varchar или вообще int? Я так полагаю, sms_id - число?
да, и $status закавычить не мешало бы
10-ти значное число, и данный XML получается извне и ничего не мешает ему завтра стать 20-ти значным, так что проще текст хранить. Своего места не очень жалко.
Если напечатать $query через echo. Запрос выглядит так как и должен.Не-а. Посмотри на исходный код странички и ты увидишь там
<sms_id>1111111111</sms_id>
Просто браузер не показывает неизвестные теги.
Закавычкание не решает проблемы
Но все равно зпасибо за замечание.
Но все равно зпасибо за замечание.Ээээ....
А зачем здесь file_get_contents?
А зачем здесь file_get_contents?
Точно не печатает теги. До самого очевидного взглянуть в исходник я и не догадался.
А можно как-то решить эту проблему? (Вытаскивать именно серединку)
А можно как-то решить эту проблему? (Вытаскивать именно серединку)$pattern = "#<status>([^<]+)</status>#i";
$result = preg_match_all($pattern, $r, $out, PREG_SET_ORDER);
$status = $out[0][1];
Это я не оттуда строчку скопировал. должно быть так же как и 3-мя строчками выше.
Ничего не понимаю.
Сделал вот так:
Смотрю в исходник и вижу:
Статус: Delivered Id: <sms_id>1021494518</sms_id>
Почему?
Извиняюсь за беспокойство.
Сделал вот так:
$pattern = "#<status>([^<]+)</status>#i";
$result = preg_match_all($pattern, $r, $out, PREG_SET_ORDER);
$status = $out[0][1];
$pattern = "#<sms_id>([^<]+)</sms_id>#i";
$result = preg_match_all($pattern, $r, $out, PREG_SET_ORDER);
$sms_id = $out[0][0];
echo "Статус: " . $status . " Id: " . $sms_id;
Смотрю в исходник и вижу:
Статус: Delivered Id: <sms_id>1021494518</sms_id>
Почему?
Извиняюсь за беспокойство.$sms_id = $out[0][1];
Всем спасибо. Сам увидел.
Еще раз извиняюсь.
Еще раз извиняюсь.Добрый день! Хочется еще проконсультироваться. Оказывается XML-документ может быть не только таким:
Но и таким:
В последнем случае следующий кусок кода выдает ошибку на последней строчке:
Можно ли как-то изменить шаблон? Заранее спасибо за помощь.
<?xml version="1.0" ?>
- <reply>
<submition_date>2006-02-22 11:01:40</submition_date>
<send_date />
<last_status_change_date>2006-02-22 11:01:42</last_status_change_date>
<status>Доставлено</status>
<error />
<sms_id>1111111111</sms_id>
</reply>
Но и таким:
<?xml version="1.0" ?>
- <reply>
<submition_date>2006-02-22 11:01:40</submition_date>
<send_date />
<last_status_change_date>2006-02-22 11:01:42</last_status_change_date>
<status />
<error />
<sms_id>1111111111</sms_id>
</reply>
В последнем случае следующий кусок кода выдает ошибку на последней строчке:
$pattern = "#<status>([^<]+)</status>#i";
$result = preg_match_all($pattern, $r, $out, PREG_SET_ORDER);
$status = $out[0][1];
Можно ли как-то изменить шаблон? Заранее спасибо за помощь.
$pattern = "#<status>([^<]+)</status>#i";
$result = preg_match_all($pattern, $r, $out, PREG_SET_ORDER);
if ($result) {
$status = $out[0][1];
} else {
$status = ''; # здесь надо написать что-то для случая <status />
}
Спасибо.
Оставить комментарий
RealFikus
С помощью регулярных выражений обрабатываю следующий XML-файл:<?xml version="1.0" ?>
- <reply>
<submition_date>2006-02-22 11:01:40</submition_date>
<send_date />
<last_status_change_date>2006-02-22 11:01:42</last_status_change_date>
<status>Доставлено</status>
<error />
<sms_id>1111111111</sms_id>
</reply>
Вытаскиваю sms_id и status с помощью следующего кода:
$r содержит вышеприведенный XML.
Затем выполняю запрос обновления к существующей таблице MySQL:
В таблице main точно есть соответсвующий sms_id, но обновления не происходит.
Если напечатать $query через echo. Запрос выглядит так как и должен. Если его скопировать и вставить в phpMyAdmin, то он выполниться. Я так думаю, что дело в типе данных, но не разобрался как их привести.В MySQL у полей sms_id и status тип tinytext.
Заранее благодарен за помощь.