1. Advertising
    y u no do it?

    Advertising (learn more)

    Advertise virtually anything here, with CPM banner ads, CPM email ads and CPC contextual links. You can target relevant areas of the site and show ads based on geographical location of the user if you wish.

    Starts at just $1 per CPM or $0.10 per CPC.

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