in linea di massima, e vado a memoria:
semplifichiamo la faccenda per capire lo schema del file xml:
< ?xml version="1.0" encoding="UTF-8"?>
< dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2012-07-17T12:34:02">
< nome_tabella>
< campo1>testo1< /campo1>
< campo2>testo2< /campo2>
< campo3>testo3< /campo3>
< /nome_tabella>
< nome_tabella>
< campo1>testo1< /campo1>
< campo2>testo2< /campo2>
< campo3>testo3< /campo3>
< /nome_tabella>
< /dataroot>
Vediamo cosa vogliono dire i tag XML per capire meglio cosa stiamo facendo:
- < ?xml : Iniziamo dicendo che il documento che stiamo aprendo è un file in formato XML, versione 1.0 codificato in UTF-8.
- <dataroot> : Tutto quello che scriviamo dovrà essere inserito all'interno di questo tag, altrimenti non riusciremo a recuperare i valori in PHP.
- <nome_tabella> : Questo tag definisce il nome di una proprietà, con all'interno dei dati. Nel nostro caso sarà il nome della tabella di riferimento, con i campi di quella tabella.
- <campo> : Qui decidiamo i campi che definiscono quella determinata proprietà. Sarebbe corretto avere lo stesso numero di campi con lo stesso nome, per ogni proprietà.
adesso, mettiamo che tu abbia una tabella nel database così composta:
- id: identificativo univoco dell'utente (non segnato nell'XML perché creato in automatico)
- nome
- cognome
- indirizzo
- mail
- telefono
Creiamo un form in una pagina html per fare l'upload del file, quindi con un enctype "multipart/form-data".
Creeremo 2 file, il primo upload.html, ed il secondo importa_xml.php
codice del file upload.html< html>
< head>
< title>Upload ed importazione XML< /title>
< /head>
< body>
< form enctype="multipart/form-data" method="post" action="importa_xml.php">
File XML: < input type="file" name="filexml" value="" />
< input type="submit" name="" value="Upload" />
< /form>
< /body>
< /html>
Upload ed importazione in MySQL del file XML in PHP
Ora dobbiamo creare la pagina per logica del programma, e quindi nel nostro caso per l'upload del file e del caricamento dei dati in MySQL nella tabella utenti
Nome file: importa_xml.php// Apro la connessione al DB
// ------
// ------
// Recupero il file
$file = $_FILES['filexml'];
// Controllo che il file sia stato inserito
if ( $file['tmp_name'] != '' ) {
// Carica il file in una variabile $xml
$xml = simplexml_load_file( $file['tmp_name'] );
// Controllo tutti i tag "utenti"
foreach( $xml->utenti as $value ) {
// Recupero tutti i campi da ogni tag "utenti"
$nome = $value->NOME;
$cognome = $value->COGNOME;
$indirizzo = $value->INDIRIZZO;
$mail = $value->MAIL;
$telefono = $value->TELEFONO;
// Creo una query di inserimento e la eseguo
$sql = "
INSERT INTO utenti SET
nome = '$nome',
cognome = '$cognome',
indirizzo = '$indirizzo',
mail = '$mail',
telefono = '$telefono'
";
$rssql = mysql_query( $sql );
// Controllo che l'importazione sia avvenuta con successo
echo ( $rssql ) ? "Importazione avvenuta con successo" : "Errore nella query o connessione al DB mancante";
}
}
else
echo "Nessun file inserito";
ti consiglio di fare delle prove di importazione prima, magari su un database vuoto con questa tabella che crerai direttamente in phpmyadmin:
CREATE TABLE IF NOT EXISTS `utenti` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nome` varchar(255) NOT NULL,
`cognome` varchar(255) NOT NULL,
`indirizzo` varchar(255) NOT NULL,
`mail` varchar(255) NOT NULL,
`telefono` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
capito e verificato il funzinamento con l'esempio, lo potrai implementare a secondo del contenuto del file generato da wordpress.