[SOLVED][php] Wyświetlenie XMLa

0

Witam
Na początek rzucę kodem:

<?php 
$dbhost = "localhost";  
$dbuser = "user";  
$dbpass = "";  
$dbname = "baza";  

error_reporting(E_ALL);
header("Content-type: text/xml");  
header("Cache-Control: no-cache");  
$dbconn = mysql_connect($dbhost,$dbuser,$dbpass);  
mysql_select_db($dbname,$dbconn); 
foreach($_GET as $key => $value) $$key = mysql_real_escape_string($value,$dbconn);
if($action == "update_news") {
	$news = mysql_query("SELECT autor,news,data	FROM news LIMIT 5;",$dbconn);
	if(mysql_num_rows($news) == 0) $status_code = 0;
	else $status_code = 1;
	
	echo "<?xml version=\"1.0\"?>\n";
	echo "<status>$status_code</status>\n";
	echo "<messages>\n";
	while($message = mysql_fetch_array($news)) {
		echo "\t<news>\n";
		echo "\t\t<autor>$message[autor]</autor>\n";
		echo "\t\t<data>$message[data]</data>\n";
		echo "\t\t<text>$message[news]</text>\n";
		echo "\t</news>\n";	
	}
	echo "</messages>\n";
	
}
?>

Jedyny wpis w bazie to:

+------------+-------+---------------+
| data       | autor | news          |
+------------+-------+---------------+
| 0000-00-00 | ja    | pierwszy news |
+------------+-------+---------------+

Po otwarciu adresu http://localhost/news.php?action=update_news w Firefox 3.6.6 dostaję:

Błąd parsowania XML: nie znaleziono elementu
Obszar: http://localhost/news.php?action=update_news
Numer linii: 1, kolumna 1:
^

Czemu to nie działa? Dziękuję z góry za wszelką pomoc.

0
<?xml sie nie parsuje jako short open tag PHP? Zrób to tak: ```php echo('<' . '?' . 'version="1.0"' . '?' . '>' . "\n"); ``` I naucz się że jest coś takiego jak apostrof i nie trzeba backslashować jak nie trzeba to po pierwsze. Po drugie: Nigdy w życiu nie wstawiaj zmiennych do stringa! To morderstwo. Jeszcze wczyta nie to co trzeba albo w ogóle jej nie zobaczy i będzie tak jak w mailach od UPC. > Termin płatności: $lastPaymentDate Lepiej tak: ```php echo('<autor>' . $message['autor'] . '</autor>' . "\n"); ```
0

Napotkałem na kolejny problem. news.php, pomimo, że generuje poprawny dokument XML w odpowiedzi, to zarówno FF jak i Chrome mają problemy z jego parsowaniem.
News.php:

<?php 

header("Cache-Control: no-cache");  
header("Content-Type: text/xml");
$dbconn = mysql_connect($dbhost,$dbuser,$dbpass) or die("Nie można połączyć z bazą.");  
mysql_select_db($dbname,$dbconn); 
foreach($_POST as $key => $value) $$key = mysql_real_escape_string($value,$dbconn);
//print('Action is: '.$action."\n");
if($action == 'update_news') {
	$news = mysql_query("SELECT autor,news,data	FROM news LIMIT 5;",$dbconn);
	if(mysql_num_rows($news) == 0) $status_code = 0;
	else $status_code = 1;
	
	echo '<?xml version="1.0" encoding="UTF-8"?>'."\n";
	echo '<status>'.$status_code.'</status>'."\n";
	echo '<messages>'."\n";
	while($message = mysql_fetch_array($news)) {
		echo '<news>'."\n";
		echo '<autor>'.$message[autor].'</autor>'."\n";
		echo '<data>'.$message[data].'</data>'."\n";
		echo '<text>'.$message[news].'</text>'."\n";
		echo '</news>'."\n";	
	}
	echo '</messages>';
	
}
//else print('Error!');
?>

Kod XML:

<?xml version="1.0" encoding="UTF-8"?>
<status>1</status>
<messages>
<news>
<autor>ja</autor>
<data>0000-00-00</data>
<text>pierwszy news</text>
</news>
</messages>

Skrypt dodający newsy:

$(document).ready(function(){
	$("a#dlnews").click(function(){
		$.post("news.php", {action: "update_news"}, function(xml){
			if($("status",xml).text() == 0) $("div#news_box").append("<span>Nie ma wiadomości</span>");
			else {
				$("news",xml).each(function(id){
					news = $("news",xml).get(id);
					alert(news);
					$("div#news_box").append("<span class=\"date\">" + $("data",news).text() + "</span><span class=\"author\">" + $("autor",news).text() + "</span><span class=\"title\">" + $("text",news).text() + "</span>");
				});
			};
		}, "xml");
		return false;
	});
});

W efekcie działania powyższego skryptu coś powinno się stać, a tak się nie dzieje. Stąd wnoszę że niemożność parsowania XML jest tu przeszkodą.

0

Nic się nie pokazuje? To zły content type.

header('Content-Type: text/xml');
0

To co miałem za XML wcale nim nie było: brakowało znacznika-korzenia. Dzięki stokrotne za wskazówki!

1 użytkowników online, w tym zalogowanych: 0, gości: 1