Petits soucis avec le fonction echo

WRInaute discret
Bonjour,

J'ai un petit soucis avec la fonction echo !

J'ai créer une table spéciale dans laquelle les adresses url rewrités sont automatiquement insérée.

Je souhaite maintenant générer un sitemap en utilisant ces données.

J'ai donc créé un fichier sitemap.php qui est le suivant :

Code:
<? echo '<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="https://www.google.com/schemas/sitemap/0.84">'
?>
<? include ('dbconnect.php'); 

// on crée la requete SQL
$sql = "SELECT lien, datecreation FROM sitemap"; 

// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 

if (mysql_num_rows($req) > 0)
{

// on fait une boucle qui va faire un tour pour chaque enregistrement
while($data = mysql_fetch_array($req)) 
	{	
echo '<url><br>
<loc>'.$data['lien'].'</loc><br>
<lastmod>'.$data['datecreation'].'</lastmod><br>
</url><br>';
	}
	}
echo '</urlset>';

// on ferme la connexion à mysql
mysql_close(); 
?>

Et j'ai mis en place dans mon fichier .htaccess :

Code:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^sitemapconcours\.xml$ /sitemapconcours.php [QSA,L]

Les données sont bien récupérée de la base et j'ai bien accès au fichier sitemapconcours.xml...Mais par contre il n'affiche que le lien et la date de création...

EX :

http://www.monsite.fr/loteries-argent-4 ... -test.html
2007-11-29

Et je voudrais qu'il affiche :

Code:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="https://www.google.com/schemas/sitemap/0.84">
<url>
<loc>http://www.voilou.fr/loteries-argent-44-jeu-concours-voiloutest.html</loc>
<lastmod>2007-11-29</lastmod>
</url>
<urlset>

Je ne comprends pas pourquoi il n affiche pas les autres données car elles sont aussi englobée dans le 'echo'...

Quelqu un pourrait il m'éclairer?

Ah oui j'ai aussi essayé en mettant des double quotes autour de chaque mot mais en vain...

Merci
 
WRInaute discret
Mais il y a bien la virgule...si je l enleve cela ne marche plus et j aurai une page blanche....

J'ai trouvé la solution....

J'ai fait:

Code:
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br>
&lt;urlset xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;<br>
xsi:schemaLocation=&quot;http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd&quot; xmlns=&quot;http://www.sitemaps.org/schemas/sitemap/0.9&quot;&gt;<br>
<? include ('dbconnect.php'); 

// on crée la requete SQL
$sql = "SELECT lien, datecreation FROM sitemap"; 

// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 

if (mysql_num_rows($req) > 0)
{

// on fait une boucle qui va faire un tour pour chaque enregistrement
while($data = mysql_fetch_array($req)) 
	{	
echo '&lt;url&gt;<br>
&lt;loc&gt;'.$data['lien'].'&lt;/loc&gt;<br>
&lt;lastmod&gt;'.$data['datecreation'].'&lt;/lastmod&gt;<br>
&lt;/url&gt;<br>';
	}
	}
echo '&lt;/urlset&gt;';

// on ferme la connexion à mysql
mysql_close(); 
?>

Par contre juste une question...

En allant sur :

http://www.voilou.fr/sitemap.xml > sitemap généré manuellement
http://www.voilou.fr/sitemapconcours.xml > sitemap généré en urlrewriting....

Le premier est reconnu sous le format xml et est en couleur...Alors que pour le second, ce n est pas le cas...cela posera t il probleme?

Merci
 
WRInaute discret
arf...Je me suis réjouis trop vite...google a refusé le sitemap...Da illeurs sous IE on me dit que le fichier n est pas valide...sous Firefox il affiche le fichier...
 
WRInaute impliqué
Je n'y connais rien en url rewriting, donc je ne sais pas exactement ce que cela produit en utilisant cette méthode :wink:

Pour tes caractères spéciaux en utf 8 tu peux utiliser utf8_encode() et utf8_decode() pour l'affichage, c'est moins prise de tête.

Sinon, c'est pas une histoire de header, vu que tu génères le fichier avec du php ?

En première ligne :

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

Puis tu affiches ton code et tu fais ta requête.

Chuis pas sûr mais bon :lol:
 
WRInaute discret
Hello merci de ton aide !

Voila j ai enfin réussi !

Alors le code de la page sitemap.php est :

Code:
<?
echo'<'.'?xml version="1.0" encoding="UTF-8"?'.'>
<urlset xmlns="https://www.google.com/schemas/sitemap/0.84">
'; ?>
<? include ('dbconnect.php'); 

// on crée la requete SQL
$sql = "SELECT lien, datecreation FROM sitemap"; 

// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.''.mysql_error()); 

if (mysql_num_rows($req) > 0)
{

// on fait une boucle qui va faire un tour pour chaque enregistrement
while($data = mysql_fetch_array($req)) 
	{	
echo '<url>
<loc>'.$data['lien'].'</loc>
<lastmod>'.$data['datecreation'].'</lastmod>
</url>';
	}
	}
echo '</urlset>';

// on ferme la connexion à mysql
mysql_close(); 
?>

Apres j'ai fait dans un fichier .htaccess :

Code:
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^sitemapconcours\.xml$ /sitemapconcours.php [QSA,L]

Et voila...Maintenant ca récupère les liens et la date de création dans la base de donnée...Etant donné que j'ai quasi que des jeux concours sur mon site, j ai egalement créé un cronjob qui se charge de supprimer les entrées obsolètes de la table sitemap...Ce qui supprime automatiquement les données du sitemap !

Bonne soirée !
 
Discussions similaires
Haut