iam пытается сделать файл php для импорта xml в базу данных sql, но у меня есть эта ошибка:
Предупреждение: неверный аргумент, предоставленный foreach () в /home/morrisse/public_html/xml_to_database.php в строке 18
Мой код:
$url ="http://www.example/example.xml"; $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $URL); //GET THE URL CONTENDS $data = curl_exec ($ch); //execute the curl request curl_close($ch); $xml = simplexml_load_string($data); foreach ($xml -> track as $row) { $title = $row -> name; $artist = $row -> artist; $duration = $row -> duration; // performing sql query $sql = "INSERT INTO 'test_xml' ('title', 'artist', 'duration')" . "VALUES ('$title', '$artist', '$duration')"; $result = mysql_query($sql); if (!result) { echo 'MYSQL ERROR'; } else { echo 'SUCESSO'; } }
мой xml:
<lfm status="ok"> <track> <id>602366984</id> <name>Barbarism Begins At Home (BBC TV Tube performance)</name> <mbid/> <url>http://www.last.fm/music/The+Smiths/_/Barbarism+Begins+At+Home+(BBC+TV+Tube+performance)</url> <duration>384000</duration> <streamable fulltrack="0">0</streamable> <listeners>10</listeners> <playcount>24</playcount> <artist> <name>The Smiths</name> <mbid>40f5d9e4-2de7-4f2d-ad41-e31a9a9fea27</mbid> <url>http://www.last.fm/music/The+Smiths</url> </artist> <toptags> </toptags> </track> </lfm>
Помоги пожалуйста?
Полный код:
<?php $url ="http://www.morrisseyradio.com/shoutcastinfo/cache/track.xml"; $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $URL); //GET THE URL CONTENDS $data = curl_exec ($ch); //execute the curl request curl_close($ch); $con=mysql_connect("localhost", "", ""); //connect to database mysql_select_db("morrisse_forum", $con) if (!$con) { die('Could not connect: ' . mysql_error()); }; // select database libxml_use_internal_errors(true); $xml = simplexml_load_string($data); if ($xml === false) { $errors = libxml_get_errors(); foreach ($errors as $error) { echo "XML Error at line $error->line: $error->message\n"; } } else { foreach ($xml -> track as $row) { $title = $row -> name; $artist = $row -> artist; $duration = $row -> duration; // performing sql query $sql = "INSERT INTO 'test_xml' ('title', 'artist', 'duration')" . "VALUES ('$title', '$artist', '$duration')"; $result = mysql_query($sql); if (!result) { echo 'MYSQL ERROR'; } else { echo 'SUCESSO'; } } } ?>
Для кого-то ответ: Первое: в строке:
curl_setopt($ch, CURLOPT_URL, $URL);
«URL-адрес URL» должен быть ниже
Второе: в этой строке:
$sql = "INSERT INTO 'test_xml' ('title', 'artist', 'duration')"
«» должен быть «"
Довольно ясно, что ваш вызов simplexml_load_string()
не удался, потому что xml не был правильно сформирован. Когда это произойдет, вы вернетесь назад, а не в полезный xml-элемент.
Вот что я предлагаю вам сделать по этому поводу. Добавьте код отслеживания ошибок следующим образом.
libxml_use_internal_errors(true); $xml = simplexml_load_string($data); if ($xml === false) { $errors = libxml_get_errors(); foreach ($errors as $error) { echo "XML Error at line $error->line: $error->message\n"; } } else { foreach ( $xml->track as $row ) { /* your code continues here ... */
Очевидно, что что-то не так с xml, который вы возвращаете с того сервера, с которым вы работаете, с curl
. Этот код поможет вам понять, что не так.