Generating XML using PHP issues

Discussion in 'PHP' started by mark103, Mar 12, 2014.

  1. #1
    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:

     
    mark103, Mar 12, 2014 IP
  2. mark103

    mark103 Active Member

    Messages:
    110
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    53
    #2
    does anyone know how????
     
    mark103, Mar 13, 2014 IP
  3. Tomve

    Tomve Active Member

    Messages:
    18
    Likes Received:
    1
    Best Answers:
    2
    Trophy Points:
    70
    #3
    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
     
    Tomve, Mar 13, 2014 IP