Hi all, I need some of your help, I'm working on my PHP script to create the XML document with encoding utf8 so I can generate the XML file to allow me to save the XML file in my web host. I want to make the xml output to something like this: <?xml version="1.0" encoding="UTF-8" ?> <tv generator-info-name="www.mysite.com/xmltv"> <channel id=""> <display-name>Information from database</display-name> <programme channel="Information from database" start="" stop=""> <title lang="en"></title> <sub-title lang="en"> </sub-title> <desc lang="en"></desc> <category lang="en"></category> </programme> </channel> </tv> PHP: Here's what my XML output looks like: <?xml version="1.0" encoding="UTF-8"?> <tv generator-info-name="www.mysite.com/xmltv"><channel><display-name>Information from database</display-name><programme/><desc/></channel></tv>[PHP] Here's the current code: [PHP]<?php function db_connect() { define('DB_HOST', 'localhost'); define('DB_USER', 'myusername'); define('DB_PASSWORD', 'mypassword'); define('DB_DATABASE', 'mydbname'); $errmsg_arr = array(); $errflag = false; $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); if(!$link) { die('Failed to connect to server: ' . mysql_error()); } $db = mysql_select_db(DB_DATABASE); if(!$db) { die("Unable to select database"); } } db_connect(); function clean($var) { return mysql_real_escape_string(strip_tags($var)); } $channels = clean($_GET['channels']); $id = clean($_GET['id']); if($errflag) { $_SESSION['ERRMSG_ARR'] = $errmsg_arr; echo implode('<br />',$errmsg_arr); } else { $insert = array(); if(isset($_GET['channels'])) { $insert[] = 'channels = \'' . clean($_GET['channels']) .'\''; } if(isset($_GET['id'])) { $insert[] = 'id = \'' . clean($_GET['id']) . '\''; } if($channels && $id) { $qrytable1="SELECT id, channels, links FROM tvguide WHERE channels='$channels' && id='$id'"; $result1=mysql_query($qrytable1) or die('Error:<br />' . $qry . '<br />' . mysql_error()); echo '<?xml version="1.0" encoding="UTF-8" ?> <tv generator-info-name="www.mysite.com/xmltv"> <channel id=""> <display-name></display-name> <programme channel="" start="" stop=""> <title lang="en"></title> <sub-title lang="en"></sub-title> <desc lang="en"></desc> <category lang="en"></category> </programme> </channel> </tv>'; while ($row = mysql_fetch_array($result1)) { } mysql_close(); } else if(!$channels && ! $id) { $qrytable1="SELECT id, channels, links, streams FROM tvguide"; $result1=mysql_query($qrytable1) or die('Error:<br />' . $qry . '<br />' . mysql_error()); while ($row = mysql_fetch_array($result1)) { } mysql_close(); } } // create a dom document with encoding utf8 $domtree = new DOMDocument('1.0', 'UTF-8'); // create a root element of the xml tree $tv = $domtree->createElement('tv'); //create attributes for element $generator_info_name = $domtree->createAttribute('generator-info-name'); $generator_info_name->value = 'mysite.com/xmltv'; //append attribute $tv->appendChild($generator_info_name); // append element to the doc $tv = $domtree->appendChild($tv); //add a channel as a child of the root $channel = $domtree->createElement('channel'); $channel_id = $domtree->createAttribute('id'); $channel_id->value = '""'; $channel = $tv->appendChild($channel); //append children to channel $channel->appendChild($domtree->createElement('display-name','Information from database')); $channel->appendChild($domtree->createElement("programme")); $channel->appendChild($domtree->createElement('desc')); //finally, save the file echo $domtree->saveXML(); $domtree->save('myChannel.xml'); ?>[PHP] Do you know how I can make the same XML output as the first code? And how I can output for each data from mysql database to put it in each channel tag and I want to add the tags under the channel tag including the display-name, programme-channel, title, sub-title, desc and category tags when I output for each data from mysql? Any advise would be much appreciated. Thanks in advance PHP:
I'm hoping I have what you need First I have to say I looked mainly on xml part of this code. However I recommend you a few things - 1) don't use mysql, it'll be deprecated in php 5.5.0 but you can use mysqli* or pdo**, 2) learn use isset function*** when you do conditional statement <?php function db_connect() { define('DB_HOST', 'localhost'); define('DB_USER', 'xxx'); define('DB_PASSWORD', 'xxx'); define('DB_DATABASE', 'xml'); $errmsg_arr = array(); $errflag = false; $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); if(!$link) { die('Failed to connect to server: ' . mysql_error()); } $db = mysql_select_db(DB_DATABASE); if(!$db) { die("Unable to select database"); } } db_connect(); function clean($var) { return mysql_real_escape_string(strip_tags($var)); } if(isset($_GET['channels']))$channels = clean($_GET['channels']); if(isset($_GET['id'])) $id = clean($_GET['id']); if(isset($errflag)){ $_SESSION['ERRMSG_ARR'] = $errmsg_arr; echo implode('<br />',$errmsg_arr); } else { $insert = array(); if(isset($_GET['channels'])) { $insert[] = 'channels = \'' . clean($_GET['channels']) .'\''; } if(isset($_GET['id'])) { $insert[] = 'id = \'' . clean($_GET['id']) . '\''; } // create a dom document with encoding utf8 $domtree = new DOMDocument('1.0', 'UTF-8'); $domtree->formatOutput = true; // create a root element of the xml tree $tv = $domtree->createElement('tv'); $generator_info_name = $domtree->createAttribute('generator-info-name'); $generator_info_name->value = 'mysite.com/xmltv'; //append attribute $tv->appendChild($generator_info_name); // append element to the doc $tv = $domtree->appendChild($tv); if(isset($channels) && isset($id)){ $qrytable1="SELECT id, channels, links FROM tvguide WHERE channels='$channels' && id='$id'"; } elseif(!isset($channels) && !isset($id)) { $qrytable1="SELECT id, channels, links, streams FROM tvguide"; } $result1=mysql_query($qrytable1) or die('Error:<br />' . $qry . '<br />' . mysql_error()); while ($row = mysql_fetch_array($result1)) { //create channel elememt and attribute $channel = $domtree->createElement('channel'); $channel_id = $domtree->createAttribute('id'); //channel's value $channel_id->value = ""; //append channel to tv element $channel->appendChild($channel_id); $channel = $tv->appendChild($channel); //create display-name element $display_name = $domtree->createElement('display-name',$row['links']); //append display-name to tv channel element $channel->appendChild($display_name); //create programme element and channel attribute $programme = $domtree->createElement('programme',''); $programme_data = $domtree->createAttribute('channel'); //value for programme channel attribute from db $programme_data->value = $row['channels']; //create start attribute in programme element $programme_start_data = $domtree->createAttribute('start'); //create stop attribute in programme element $programme_stop_data = $domtree->createAttribute('stop'); //append attributes to programme element $programme->appendChild($programme_data); $programme->appendChild($programme_start_data); $programme->appendChild($programme_stop_data); //append programme element to channel element $programme = $channel->appendChild($programme); //create title element and atribute $title = $domtree->createElement('title', ''); $title_data = $domtree->createAttribute('en'); $title->appendChild($title_data); //append title to programe element $title = $programme->appendChild($title); //create sub-title element and atribute $subtitle = $domtree->createElement('sub-title',''); $subtitle_data = $domtree->createAttribute('en'); $subtitle->appendChild($subtitle_data); $subtitle = $programme->appendChild($subtitle); //create desc element and atribute $desc = $domtree->createElement('desc',''); $desc_data = $domtree->createAttribute('lang'); //value for desc attribute $desc_data->value = "en"; $desc->appendChild($desc_data); $desc = $programme->appendChild($desc); //create category element and atribute $category = $domtree->createElement('category',''); $category_data = $domtree->createAttribute('lang'); //value for category lang attribute $category_data->value = "en"; $category->appendChild($category_data); $category = $programme->appendChild($category); } //finally, save the file echo $domtree->saveXML(); } ?> PHP: my output <?xml version="1.0" encoding="UTF-8"?> <tv generator-info-name="mysite.com/xmltv"> <channel id=""> <display-name>nova</display-name> <programme channel="2" start="" stop=""> <title en=""></title> <sub-title en=""></sub-title> <desc lang="en"></desc> <category lang="en"></category> </programme> </channel> <channel id=""> <display-name>gd</display-name> <programme channel="45" start="" stop=""> <title en=""></title> <sub-title en=""></sub-title> <desc lang="en"></desc> <category lang="en"></category> </programme> </channel> </tv> Code (markup): * mysqli - http://php.net/mysqli ** pdo - http://php.net/pdo *** isset - http://php.net/isset isset example When you use this code $errflag = false; if($errflag){ //whatever } PHP: it'll show you on the page this but if you use this if(isset($errflag)){ //whatever } PHP: there won't be notice on the page