XML-данные не могут отображаться из mysql с помощью php

Я следую этому руководству, когда узнал, что могу не просматриваю ожидаемый результат, потому что не могу просмотреть свои данные в формате xml. Я немного изменил данные конфигурации, не знаю, было ли это причиной неисправности?

<?php  

// Get parameters from URL
$center_lat = $_GET["lat"];
$center_lng = $_GET["lng"];
$radius = $_GET["radius"];

// Start XML file, create parent node
$dom = new DOMDocument("1.0");
$node = $dom->createElement("markers");
$parnode = $dom->appendChild($node);

// Opens a connection to a mySQL server
$connection=mysql_connect (localhost, 'root', '12345678');
if (!$connection) {
  die("Not connected : " . mysql_error());
}

// Set the active mySQL database
$db_selected = mysql_select_db('demo', $connection);
if (!$db_selected) {
  die ("Can\'t use db : " . mysql_error());
}

// Search the rows in the markers table
$query = sprintf("SELECT address, name, lat, lng, ( 3959 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20",
  mysql_real_escape_string($center_lat),
  mysql_real_escape_string($center_lng),
  mysql_real_escape_string($center_lat),
  mysql_real_escape_string($radius));
$result = mysql_query($query);

if (!$result) {
  die("Invalid query: " . mysql_error());
}

header("Content-type: text/xml");

// Iterate through the rows, adding XML nodes for each
while ($row = @mysql_fetch_assoc($result)){
  $node = $dom->createElement("marker");
  $newnode = $parnode->appendChild($node);
  $newnode->setAttribute("name", $row['name']);
  $newnode->setAttribute("address", $row['address']);
  $newnode->setAttribute("lat", $row['lat']);
  $newnode->setAttribute("lng", $row['lng']);
  $newnode->setAttribute("distance", $row['distance']);
}

echo $dom->saveXML();
?>

Я ожидаю получить аналогичный результат, подобный этому http://gmaps-samples.googlecode.com/svn/trunk/articles-phpsqlsearch/phpsqlsearch_expectedoutput.xml, но ничего не появляется. Кажется, что у него нет данных, но я уже импортировал данные в свой mysql.


person woninana    schedule 04.07.2011    source источник
comment
Я не могу просмотреть свои данные в формате xml, они недостаточно информативны, чтобы найти ошибку. Объясните, что вы ожидаете получить на выходе и каков фактический результат, включая любые сообщения об ошибках. Убедитесь, что вы удалили все операторы подавления ошибок. Вы также можете рассмотреть возможность обслуживания XML как application/xml.   -  person Gordon    schedule 04.07.2011
comment
@Gordon Гордон, я отредактировал вопрос, он в последней части.   -  person woninana    schedule 04.07.2011
comment
Проверьте свой журнал ошибок и/или включите отчеты об ошибках и убедитесь, что вы удалить все операторы подавления ошибок. var_dump строку $, чтобы увидеть, есть ли в ней содержимое   -  person Gordon    schedule 04.07.2011
comment
Попробуйте закомментировать заголовок (тип содержимого: text/xml), затем, во-первых, удалите @ из начала @mysql_fetch_assoc (поскольку @ подавляет ошибки), а затем внутри этого цикла while добавьте echo '<pre>'.print_r($row,true).'</pre>';. запрос фактически возвращает какие-либо данные. Также убедитесь, что широта/долгота/радиус заданы как переменные $_GET в URL-адресе, например. page.php?lat=27.3748&lng=127.7475&radius=50   -  person Benno    schedule 04.07.2011
comment
@Gordon У меня есть эта ошибка для включения отчета об ошибке Undefined index: lat in C:\xampp\htdocs\demo\map\phpsqlsearch_genxml.php on line 4 три из этой ошибки.   -  person woninana    schedule 05.07.2011
comment
@Benno, о каком URL вы говорите?   -  person woninana    schedule 05.07.2011
comment
Если вы пытаетесь вывести XML-данные на страницу, на которой находитесь (phpsqlsearch_genxml.php), вам необходимо указать параметры $_GET, потому что вы передаете переменные $_GET (строки 4-6) поисковому запросу (строка 27- 30). Итак, Э.Г. Если вы открываете эту страницу по адресу /demo/map/phpsqlsearch_genxml.php, вместо этого вам нужно загрузить этот URL-адрес: /demo/map/phpsqlsearch_genxml.php?lat=127.4364636&lng=26.23523&radius=50 (за исключением изменения других параметров широты и долготы, которые находятся в вашей базе данных). НАПРИМЕР. $_GET['радиус'] здесь равен 50. Затем будут установлены параметры широты, длины и радиуса, которые ваш запрос использует для возврата информации.   -  person Benno    schedule 05.07.2011


Ответы (3)


Первый проход для задач:

<?php  

// Get parameters from URL
$center_lat = ( isset( $_GET["lat"] ) ? $_GET["lat"] : 0 ); # You could replace these "0"s with the
$center_lng = ( isset( $_GET["lng"] ) ? $_GET["lng"] : 0 ); # Lat/Lng of a default location.
$radius     = ( isset( $_GET["radius"] ) ? $_GET["radius"] : 10 ); # Again, default radius.

// Start XML file, create parent node
$dom = new DOMDocument("1.0");
$node = $dom->createElement("markers");
$parnode = $dom->appendChild($node);

// Opens a connection to a mySQL server
if( !( $connection = mysql_connect( 'localhost' , 'root' , '12345678' ) ) ) # The SQL Server address must be a string or IP address
  die( "MySQL Error - Failed to connect to Server : " . mysql_error() );

// Set the active mySQL database
if( !mysql_select_db( 'demo' , $connection ) );
  die( "MySQL Error - Failed to connect to Database : " . mysql_error() );

// Search the rows in the markers table
$query = sprintf( "SELECT address, name, lat, lng, ( 3959 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20",
  mysql_real_escape_string( $center_lat ),
  mysql_real_escape_string( $center_lng ),
  mysql_real_escape_string( $center_lat ),
  mysql_real_escape_string( $radius ) );
$result = mysql_query( $query );

if( !$result )
  die( "MySQL Error - Invalid query: " . mysql_error() . ' "'.$query.'"' ); # During debugging, echo the SQL Statement on Error

if( !headers_sent() )
  header( "Content-type: text/xml" );

// Iterate through the rows, adding XML nodes for each
if( mysql_num_rows( $result ) ){
  while ($row = @mysql_fetch_assoc($result)){
    $node = $dom->createElement("marker");
    $newnode = $parnode->appendChild($node);
    $newnode->setAttribute("name", $row['name']);
    $newnode->setAttribute("address", $row['address']);
    $newnode->setAttribute("lat", $row['lat']);
    $newnode->setAttribute("lng", $row['lng']);
    $newnode->setAttribute("distance", $row['distance']);
  }
}else
  die( 'MySQL Error - No Records Returned "'.$query.'"' );

echo $dom->saveXML();
?>

Попробуйте и сообщите нам о любых дальнейших сообщениях об ошибках, которые вы видите.

person Luke Stevenson    schedule 05.07.2011
comment
У него есть это предупреждение: Warning: Cannot modify header information - headers already sent by в строке, где есть header( "Content-type: text/xml" ); - person woninana; 05.07.2011
comment
Это просто означает, что что-то было выведено на страницу до того, как вы установили тип содержимого... Это может быть пробел, табуляция или что-то еще, что вы выводите перед тем, как установить тип содержимого. У вас нет пробела перед ‹?php ? в вашем файле? - person Benno; 05.07.2011
comment
Добавлена ​​проверка заголовков, уже отправленных до вызова header(), чтобы избежать проблем, о которых сообщает @Stupefy101. - person Luke Stevenson; 06.07.2011

У меня такая же проблема, нет данных, вот ошибка

Ошибка MySQL - нет возвращенных записей «ВЫБЕРИТЕ адрес, имя, широту, длину, (3959 * acos (cos (радианы ('37')) * cos (радианы (лат)) * cos (радианы (lng) - радианы ('- 122')) + sin( радианы('37')) * sin( радианы(широта) )) ) КАК расстояние ОТ маркеров, ИМЕЮЩИХ расстояние ‹ '25' ORDER BY LIMIT расстояния 0, 20"

база данных заполнена, и я отправляю вары для получения, например: localhost/superga/lib/phpsqlsearch_genxml.php?lat=37&lng=-122&radius=25

спасибо

person Fulvio Futre Corsini    schedule 26.04.2012

Я следую тому же учебнику и попал на поворот в той же точке. Я выполнил все приведенные выше предложения и до сих пор не решил. Моя ошибка;

На этой странице обнаружены следующие ошибки: ошибка в строке 1 в столбце 1: документ пуст. Ниже представлен рендеринг страницы до первой ошибки.

Кто-нибудь заставить его работать?

Паула

person Phughes    schedule 14.04.2014
comment
Если кто-то по-прежнему не получает результатов, используя радиус 25, увеличьте его до 25000, и он должен работать. Я потратил много дней, пытаясь понять это. Надеюсь, это спасет некоторых из вас. - person Phughes; 16.04.2014