importare dati xml a mysql

  • Creatore Discussione Creatore Discussione luigi777
  • Data di inizio Data di inizio
facciamo con il clico for con php ,

solo che non so come fare ad integrarlo con il codice che mi hai scritto.
ti ringrazio buona giornata.
 
Fai delle prove di questo tipo

PHP:
<?php
$write = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<michele>';

$tables = array('news','photo','pagine');

foreach($tables as $table){
    
    $write.="<table_$table>\n";
    
    for($i=0;$i<100;$i++) $write.="<$table>
                                        <id>$i</id>
					<_userid>2</_userid>
					<_catid>1</_catid>
					<titolo>Test_01</titolo>
					<intro>Test_01</intro>
					<testo>Test_01</testo>
					<tag></tag>
					<data>2013-01-07 22:32:33</data>
					<active>1</active>
					<_update>2013-01-07 22:32:59</_update>
                                        </$table>";
    $write.="</table_$table>";
}
$write.="</michele>";
file_put_contents('file.xml',$write);
?>
In questo esempio le 3 tabelle devono avere tutti i campi uguali ora potresti fare 3 cicli for senza foreach mettendo i campi che vuoi per ogni tabella
 
ho generato solo la tabella news e lo importata .. prima ho svuotato l'utente e dopo lo importato e riasalta fuori questo problema:

Errore nella query: INSERT INTO news SET id='19',_userid='2',_catid='1',titolo='Test_01',intro='Test_01',testo='Test_01',data='2013-01-07 22:32:33',active='1',_update='2013-01-07 22:32:59' Duplicate entry '19' for key 'PRIMARY'

si blocca l'inserimento .. ed mi inserisce solo 15 dati.

qualche idea per risolvere il problema?

grazie mille e buona giornata a stasera.
 
ciao, nel file xml generato hanno tutti l'id diverso e nel db non esistono vero? Se è tutto ok, allora aggiungi questo controllo per saltare la query nel caso ci siano 2 id uguali
PHP:
$id = '';
    foreach($current_array[$table] as $insert){
        $query = "INSERT INTO ".$table." SET ";
        if(isset($insert['id'])){
            if($insert['id']==$id) continue;
            $id = $insert['id'];
       }
        OttieniDati(is_array($insert) ? $insert : $current_array[$table]);

        if($query!="INSERT INTO ".$table." SET ")
        $db->query($query) or die('Errore nella query: '.$query.' '.$db->error);

        if(!is_array($insert)) break;
    }
 
si i dati non ci sono perché li svuoto prima di importare i dati salvati in xml,
però mi da il solito problema .. vedi se ho messo il codice nel punto giusto:

PHP:
<?php
// Includo 
require_once(dirname(__FILE__) . '/../inc.php');
require_once(dirname(__FILE__) . '/admin.php');

$xml = simplexml_load_file('michele.xml');
$tables = array('news','photo','pagine');

function OttieniDati($insert){
    global $db,$query;
    foreach($insert as $key => $value)
            if(!is_array($value))
             $query .= $db->real_escape_string($key)."='".$db->real_escape_string($value).(end($insert)==$value?'\'':'\',');
}

foreach($tables as $table){
    
    $current_array = json_decode(json_encode($xml->{'table_'.$table}),true);
    
  
 $id = '';
    foreach($current_array[$table] as $insert){
        $query = "INSERT INTO ".$table." SET ";
        if(isset($insert['id'])){
            if($insert['id']==$id) continue;
            $id = $insert['id'];
       }
        OttieniDati(is_array($insert) ? $insert : $current_array[$table]);

        if($query!="INSERT INTO ".$table." SET ")
        $db->query($query) or die('Errore nella query: '.$query.' '.$db->error);

        if(!is_array($insert)) break;
    }
 
  }


?>

ti ringrazio molto.
 
Aggiungi un echo sull'id e dimmi quali stampa, se non ci sono doppioni vuol dire che c'è qualcosa nel database con lo stesso id
PHP:
if(isset($insert['id'])){ 
            if($insert['id']==$id) continue; 
            $id = $insert['id']; 
       } 
        echo "$id $table <br>";
        OttieniDati(is_array($insert) ? $insert : $current_array[$table]);
 
Ultima modifica:
ecco l'output :
0 news1 news2 news3 news4 news5 news6 news7 news8 news9 news10 news11 news12 news13 news14 news15 news16 news17 news18 news19 news20 news21 news22 news23 newsErrore nella query: INSERT INTO news SET id='23',_userid='2',_catid='1',titolo='Test_01',intro='Test_01',testo='Test_01',data='2013-01-07 22:32:33',active='1',_update='2013-01-07 22:32:59' Duplicate entry '23' for key 'PRIMARY'

quindi? come mai ripete quello che vuole.. perché ogni volta importo cambia sempre l'id di quella che non vuole inserire.

ti ringrazio molto e buona serata.
 
questo è l'immagine del db che sto provando nel sito online per essere sicuri che funzioni

Cattura.jpg

ti ringrazio molto.
 
Bah sembrerebbe tutto corretto :confused:, non so da cosa dipenda allora c'è qualcosa che ci sfugge, puoi provare a non settare l'id nei campi perché se è come chiave primaria sarà automaticamente auto_increment e quindi puoi anche non settarlo
 
scusa, molto ma sono confuso sulla protezione dell'utente..

quindi abbiamo lavorato per nulla..

perché ho capito che devo solamente salvare i dati dell'utente perché essendo che ha chiesto di svuotare il database dai suoi dati che ha scritto.

quindi mi sa che l'importazione dei dati dell'utente disabilitato "avendo chiesto la cancellazione", non serve.

giusto?

grazie mille e scusate per il lavoro che vi ho fatto fare.
buona serata.
 

Discussioni simili