-
Lista di punti XML
Buonasera,
Ho questo codice in una pagina "lista_punti.php" dove prelevo dal archivio tutti o una parte dei punti e in una seconda pagina "mappa.php" recupero la lista dei punti ottenuta nella prima pagina e li graficizzo nella mappa di Google Earth.
Il codice nella pagina "lista_punti.php" dove mi viene mostrato l'errore:
Codice PHP:
function parseToXML($htmlStr)
{
$xmlStr=str_replace('<','<',$htmlStr);
$xmlStr=str_replace('>','>',$xmlStr);
$xmlStr=str_replace('"','"',$xmlStr);
$xmlStr=str_replace("'",''',$xmlStr);
$xmlStr=str_replace("&",'&',$xmlStr);
return $xmlStr;
}
if ($selezione_punti == "TUTTI") {
$result = mysqli_query($db_connessione, "SELECT * FROM ARCHIVIO WHERE latitudine <> '' and longitudine <> ''");
}
header("Content-type: text/xml");
// Start XML file, echo parent node
echo "<?xml version='1.0' ?>";
echo '<markers>';
$ind=1;
// Iterate through the rows, printing XML nodes for each
while($row = mysqli_fetch_array($result)) {
// Add to XML document node
echo '<marker ';
echo 'id="' . $ind . '" ';
echo 'name="' . parseToXML($row['nome']) . '" ';
echo 'x="' . parseToXML(round($row['x'],3)) . '" ';
echo 'y="' . parseToXML(round($row['y'],3)) . '" ';
echo 'z="' . parseToXML(round($row['z'],3)) . '" ';
echo 'descrizione="' . parseToXML($row['descrizione']) . '" ';
echo 'lat="' . $row['latitudine'] . '" ';
echo 'lng="' . $row['longitudine'] . '" ';
echo 'quota="' . round($row['quota'],3) . '" ';
echo 'h_antenna="' . round($row['h_antenna'],3) . '" ';
echo 'type="' . $row['type'] . '" ';
echo '/>';
$ind = $ind + 1;
}
// End XML file
echo '</markers>';
Errore mostrato nella pagina "lista_punti.php":
This page contains the following errors:
error on line 2 at column 1: Extra content at the end of the document
Below is a rendering of the page up to the first error.
Da cosa è dovuto quest'errore?
-
Un file .php deve cominciare con <?php :wink:
[edit]
Avrai un altro errore poche righe sotto però, perché ''' non è una stringa valida. Ti serve "'" oppure '\''.
Inoltre parseToXML è un nome interessante ma... incorretto. Quello che fa è escapeForXml, che d'altra parte esiste già come
Codice PHP:
$escaped = htmlspecialchars($stringa, ENT_XML1 | ENT_COMPAT, "UTF-8");
Usando quello ed extract() per accedere alle colonne del database, potresti riscrivere il tuo ciclo come:
Codice PHP:
<?php
// [...]
$ind=1;
// Iterate through the rows, printing XML nodes for each
while($row = mysqli_fetch_array($result)) {
print_marker($ind, $row);
$ind++;
}
function print_marker($markerId, $data)
{
extract($data);
?>
<marker id="<?= $markerId ?>"
name="<?= escape($nome) ?>"
x="<?= escape($x) ?>"
y="<?= escape($y) ?>"
z="<?= escape($z) ?>"
descrizione="<?= escape($descrizione) ?>"
lat="<?= $latitudine ?>"
lng="<?= $longitudine ?>"
quota="<?= round($quota, 3) ?>"
h_antenna="<?= round($h_antenna, 3) ?>"
type="<?= $type ?>"
/>
<?php
}
function escape($string) {
return htmlspecialchars($string, ENT_XML1 | ENT_COMPAT, "UTF-8");
}
-
Grazie per la risposta, ho risolto rimuovendo
Codice PHP:
error_reporting(-1);
presente in un altra pagina collegata che interferiva mostrando quel messaggio.
Domani proverò anche il tuo codice, non conoscevo
Codice PHP:
$escaped = htmlspecialchars($stringa, ENT_XML1 | ENT_COMPAT, "UTF-8");
ma la utilizzerò.
-
Occhio che rimuovere error_reporting non risolve il problema, ma lo nasconde soltanto. In più, nasconde possibili errori che puoi introdurre in futuro, rendendo la tua via più difficile.
Io lascerei error_reporting al suo posto, magari nella sua forma più leggibile error_reporting(E_ALL), e cercherei di correggere il problema.