Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Import xml in mysql

  1. #1

    Import xml in mysql

    Ragazzi io ho necessità di importare dati in xml nel database mysql.

    ho creato questo script
    Codice PHP:
    <?php
    //generatore automatico di codice crud Come generare in modo automatico il codice, creare, leggere, aggiornare  e cancellare tabelle in un dababase. Questo libro contiene vari hack in grado di velocizzare la realizzazione del codice di accesso ai database tramite la generazione automatica delle istruzioni php e sql necessarie alla creazione, lettura, aggiornamento cancellazione del record (in gergo crud). IN quest esempio crea delle classi in grado di creare codice
    $tables=array();
    function 
    start_element($parser,$name,$attribs)
    {
    global 
    $tables;
    if(
    $name=="TABLE")
    {
    $table=array();
    $fields=array();
    $table['name']=$attribs['NAME'];
    $table['fields']=array();
    $tables[]=$table;
    }
    if(
    $name== "FIELD")
    {
    $field=array();
    $field['name']=$attribs['NAME'];
    $field['type']=$attribs['TYPE'];
    $field['pk']=($attribs['PRIMARY-KEY']=="true")? 1:0;
    $tables[count($tables)-1]['fields'][]=$field;
    }
    }
    function 
    end_element($parser$name){}
    $parser=xml_parser_create();

    xml_set_element_handler($parser"start_element","end_element");
    $file fopen("prova.xml""r");
    while(!
    feof($file)){
    $text=fgets($file);
    xml_parse($parser$text);
    }
    xml_parser_free($parser);
    ob_start();
    echo(
    "<?php\n");
    ?>
    require_once("dbwrap.php");
    <?php
    foreach($tables as $table){
    $pk=null;
    $updsets=array();
    $ufdfields=array();
    $insfields=array();
    $insvalues=array();
    $insvars = array();
    foreach(
    $table['fields'] as $field){
            
    $insfields[]=$field['name'];
        if(
    $field['pk'])
        
        {
        
    $pk=$field['name'];
        
    $insvalues[]=0;
    }
    else
    {
    $updsets[]=$field['name']."=?";
    $updfields[]= '$this->'.$field['name'];
    $insvalues[]='?';
    $insvars[]='$this->'.$field['name'];
    }
    }
    $insvars=join($insvars,",");
    $insvalues=join($insvalues,",");
    $insfields=join($insfields,",");
    $updfields[]='$this->'.$pk;
    $updfields=join(updfields,",");
    $updsets=join($updsets,",");
    ?>
    class <?php echo(ucfirst($table['name']))?>
    {
    <?php
    foreach($table['fields'] as $$field){
    ?>
    var $<?php echo($field['name']);?>;
    <?php
    }
    ?>
    function <?php echo($ucfirst['name']);?>()
    {    
    $this->id=null;
    }
    function load($id)
    {
    $data=selectOne("SELECT * FROM <?php echo($table['name'])?>WHERE <?php echo($pk);?>= ?", array($id));
    <?php
    foreach($table['fields']as $field){
    ?>
    $this-><?php echo($field['name']); ?> =$data['<?php echo($field['name']);
    ?>'];
    <?php
    }
    ?>
    }
    <?php
    foreach($table['fields']as $field){
    ?>
    function get_<?php echo($field['name'])?>(){ return $this-><?php echo(
    $field['name'])?>;}
    function set_<?php echo($field['name'])?>($val){$this-><?php echo($field['name'])?>=$val;}
    <?php
    }
    ?>
    function update()
    {
    if($this->id !=null){$this->updateRecord();}
    else {$this->insertRecord();}
    }
    function insertRecord()
    {
    return executeCommand("INSERT INTO <?php echo($table['name'])?>(<?php 
    echo($insfields);?>)VALUES (<?php echo($insvalues); ?>)", 
    array(<?php echo ($insvars);?>));
    }
    function updateRecord()
    {
    return executeCommand("UPDATE <?php echo($table['name'])?> SET <?php
    echo($updsets);?>WHERE <?php echo($pk);?>=?",
    array(<?php echo($updfields);?>));
    }
    function deleteRecord($id)
    {
    return executeCommand("DELETE FROM <?php echo($table['name'])?>WHERE
    <?PHP echo ($pk);?>=?",array($id));
    }
    }
    <?php }
    echo(
    "?>");
    $php=ob_get_clean();
    echo 
    $php;
    $fh=fopen("mydb.php","w");
    fwrite($fh$php);
    fclose($fh);
    ?>
    questo file collegato ad un altro file, dovrebbe legger xml e poi creare mybd.php e riportare i dati da poi inserire nel dabatabase. Il file lo genera, mette
    Codice PHP:
    <?php
    require_once("dbwrap.php");
    ?>
    e basta invece dovrebbe mettere anche i dati di xml
    pronti poi per essere o aggiornati o cancellati o inseriti, come posso risolvere? o questo file è completamente sbagliato e non mi serve a nulla?

    la pagina dbwrap.php è questa:
    Codice PHP:
    <?php
    //gestisce la connessione ad un database specifico. Dovrete avere uno di questi script per ciascun database a cui volete connettervi


    require_once("DB.php");
    $dns='mysql://root:password@localhost/amministratore';
    $db=& DB::Connect($dsn, array());
    if(
    PEAR::isError($db)){die($db->getMessage());}
    function 
    selectOne($sql$args)
    {
    global 
    $db;
    $res=$db->query($sql$args);
    $res->fetchInto($rowDB_FETCHMODE_ASSOC);
    return 
    $row;
    }
    function 
    selectBlock($sql$args);
    global 
    $db;
    $res=$db->query($sql$args);
    $rows=array();
    while(
    $res->fetchInto($rowDB_FETCHMODE_ASSOC)){$rows[]=$row;}
    return 
    $rows;
    }
    function 
    executeCommand($sql$args);
    global 
    $db;
    $sth=$db->prepare($sql);
    return 
    $db->execute($sql$args);

    ?>

  2. #2
    Ragazzi ho fatto uesto per importare un flusso xml di dati nel database, ma non mi legge il file xml come mai?
    Codice PHP:
    <?php
    //conversione dei dati in xml in sql
    include ('../config.php');
    $tables=array();
    $indata=0;
    function 
    encode($text)
    {
    $text=preg_replace("/'/","''",$text);
    return 
    "'".$text."'";
    }
    function 
    start_element($parser,$name,$attribs)
    {
    global 
    $tables$indata;
    if(
    $name =="WORKSHEET")
    {
    $tables[]=array(
                     
    'name'=>$attris['SS:NAME'],
                     
    'data'=>array()
                     );
                     
    }
    if(
    $name=="ROW")
    {
        
    $tables[count($tables)-1]['data'][]=array();
    }
    if(
    $name=="DATA")
    {
        
    $indata=1;
    }
    }
    function 
    text($parser$text)
    {
    global 
    $tables$indata;
    if(
    $indata)
    {
    $data=& $tables[count($tables)-1]['data'];
    $data[count($data)-1][]=$text;
    }
    }
    function 
    end_element($parser,$name)
    {
    global 
    $indata;
    if(
    $name=="DATA")
    $indata=0;
    }
    $parser=xml_parser_create();
    xml_set_element_handler($parser"start_element","end_element");
    xml_set_character_data_handler($parser"text");

    $file fopen("amministratore.xml""r");
    while(!
    feof($file)){
        
    $text=fgets($file);
        
    xml_parse($parser$text);
    }
    xml_parser_free($parser);
    foreach(
    $tables as $table){
    $name=$table['NAME'];
    $data=& $table['data'];
    $cols=implode(",",$data[0]);
    for(
    $in=1$in<count($data); $in++)    {
        
    $sqldata=implode(",",array_map("encode",$data[in]));
        
        
    echo 
    $name;
     
    $sqldata="INSERT INTO $name($cols) VALUES($sqldata)";
      echo 
    $name;
     
    $result mysql_query($query); 
    if(!
    $result) die("Errore MySQL: ".mysql_error().'"
    Query:
    "'
    .$query);
    }
    }
    ?>

  3. #3
    mmm, conosci in anticipo il nome dei campi del file xml? perchè puoi ridurre di 100 volte il tuo codice attuale se li conosci in anticipo o.0

  4. #4
    si certo i campi sono quelli del db , come posso farlo funzionare?

  5. #5
    no, io dico, conosci in anticipo sia i campi di mysql sia del file xml? se si diventa semplice con simple_xml

  6. #6
    si, il flusso generato dal software gestionale in xml sono standard , si praticamente conosco tutto.

  7. #7

  8. #8
    grazie ^^ mi sei stato davvero molto utile

  9. #9
    figurati ^__^ l'importante è aiutarsi a vicenda

  10. #10
    ciao ascolta ho usato l'esempio che mi ha indicato ma mi da tale problema

    ti posto il flusso in xml

    Codice PHP:
    <?xml version="1.0" encoding="utf-8"?> 
    <vini> 
       
        <amministratore> 
            <id>2</id> 
            <id_amministratore>1050</id_amministratore> 
            <denominazione>esp</denominazione> 
            <indirizzo>milano</indirizzo> 
            <cap>00146 Roma</cap> 
            <iva>343534343</iva> 
            <codicefiscale>0</codicefiscale> 
            <tel_cell>0</tel_cell> 
            <tel_ufficio>0</tel_ufficio> 
            <tel_casa>0</tel_casa> 
            <fax>0</fax> 
            <email>nessuna</email> 
            <homepage>nessuna</homepage> 
            <username>pippo</username> 
            <password>0c88028bf3aa6a6a143ed846f2be1ea4</password> 
        </amministratore> 
    </vini>
    la pagina che dovrebbe elaborare il tutto

    Codice PHP:
    <?php
    include("config4.php");
    include(
    "amministratore.xml");

    $xml simplexml_load_string($xmlstr);

    foreach(
    $xml->amministratore as $amministratore) {
            
    $id $amministratore->id;
            
    $id_amministratore $amministratore->id_amministratore;
            
    $denominazione $amministratore->denominazione;
            
    $indirizzo $amministratore->indirizzo;
            
    $cap $amministratore->cap;
            
    $iva $amministratore->iva;
            
    $codicefiscale $amministratore->codicefiscale;
            
    $tel_cell $amministratore->tel_cell;
            
    $tel_ufficio $amministratore->tel_ufficio;
            
    $tel_casa $amministratore->tel_casa;
            
    $fax $amministratore->fax;
            
    $email $amministratore->email;
            
    $homepage $amministratore->homepage;
            
    $username $amministratore->username;
            
    $password $amministratore->password;
            
            
    $check_sql "SELECT * FROM amministratore WHERE id = $id";
            
    $check_query = @mysql_query($check_sql);
            
            if(@
    mysql_num_rows($check_query) > 0) {
                    
    $update_sql "UPDATE amministratore SET id_amministratore = $id_amministratore, denominazione = $denominazione, indirizzo = $indirizzo, cap = $cap, iva = $iva, codicefiscale = $codicefiscale, tel_cell = $tel_cell, tel_ufficio = $tel_ufficio, tel_casa = $tel_casa, fax = $fax, email = $email, homepage = $homepage, username = $username, password = $password WHERE id = $id";
                    
                    
    $update_query = @mysql_query($update_sql);
            } else {
                    
    $insert_sql "INSERT INTO amministratore (id_amministratore, denominazione, indirizzo, cap, iva, codicefiscale, tel_cell, tel_ufficio, tel_casa, fax, email, homepage, username, password) VALUES ('$id_amministratore', '$denominazione', '$indirizzo', '$cap', '$iva', '$codicefiscale', '$tel_cell', '$tel_ufficio', '$tel_casa', '$fax', '$email', '$homepage', '$username', '$password')";
            }
    }

    ?>

    l'errrore

    Codice PHP:
    The XML page cannot be displayed 
    Cannot view XML input using XSL style sheet
    Please correct the error and then click the Refresh button, or try again later


    -------------------------------------------------------------------------------- 

    Nei documenti XML è consentito un solo elemento di primo livelloErrore durante l'elaborazione della risorsa "http://local... 

    </vini>
     
    --------^ 

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.