aggiornare valore di un elemento xml con php

simo94n6

Nuovo Utente
5 Ott 2018
10
0
1
esempio di struttura di un file.xml
<libro>
<id>..</id>
<titolo>...</titolo
...
<totvalu>2</totvalu>
<numvalu>1</numvalu>
<valutazione>2</valutazione>
</libro>
vi volevo chiedere come devo procedere per poter aggiornare il file xml dopo che un visitatore nel mio sito attraverso un form php dia una sua valutazione. (in precedenza cancellavo il nodo e lo riscrivevo aggiornato ma non credo sia la soluzione migliore)
 

Jonn

Utente Attivo
29 Dic 2012
352
3
18
Pistoia
Questo codice aggiorna il valore del tag <valutazione> del file libri.xml basandosi sul solo ID del libro.
Crea una pagina PHP e ci metti dentro:
PHP:
<!DOCTYPE html>
<html>
   <head>
       <title></title>
   </head>
   <body><?php
       /*Conto il numero dei "libri" per impostare il limite di scelta nella form ***ELIMINABILE*** */
       $libri_arr = json_decode(json_encode(simplexml_load_file('libri.xml')),true);
       $max_books_num = count($libri_arr['libro']);echo "\n";?>
       <form method="POST" action=''>
           ID Libro <input type="number" min="1" max="<?php echo $max_books_num; ?>" value="<?php echo $id->nodeValue  ?>" name="id" />
           Valutazione  <input type="number" min="1" max="5" value="<?php echo $valutazione->nodeValue  ?>"  name="valutazione"/>
           <input name="submit" type="submit" value="Aggiorna" />
       </form>
       <?php
           if(file_exists('libri.xml')){
               if(isset($_POST['submit'])){/*Se il pulsante "Modifica è stato premuto:*/
                   /*Recupero i valori della form*/
                   $nuova_valutazione = $_POST["valutazione"];
                   $id_libro = $_POST["id"];
                   $id_vettore = --$id_libro;
                   /*Creo un nuovo documento con tutti i dati di libri.xml*/
                   $xml = new DOMDocument('1.0', 'utf-8');
                   $xml->formatOutput = true;
                   $xml->preserveWhiteSpace = false;
                   $xml->load('libri.xml');
                   //Recupero l'ID del Libro
                   $libro = $xml->getElementsByTagName('libro')->item($id_vettore);
                   //Recupero tutti i nodi dell' ID libro interessato
                   $id = $libro->getElementsByTagName('id')->item(0);
                   $titolo = $libro->getElementsByTagName('titolo')->item(0);
                   $totvalu = $libro->getElementsByTagName('totvalu')->item(0);
                   $numvalu = $libro->getElementsByTagName('numvalu')->item(0);
                   $valutazione = $libro->getElementsByTagName('valutazione')->item(0);
                   //Sovrascrivo il nodo <valutazione> con il nuovo valore
                   $libro->replaceChild($valutazione, $valutazione);
                   $valutazione->nodeValue = $nuova_valutazione;
                   htmlentities($xml->save('libri.xml'));
               }
           }else{echo 'Impossibile aprire libri.xml';}
           /*Stampo il risultato dei libri aggiornato ***ELIMINABILE*** */
           $libri_arr = json_decode(json_encode(simplexml_load_file('libri.xml')),true);
           echo '<pre>'."\n";
           print_r($libri_arr);
           echo "\t\t".'</pre>'."\n";
       ?>
   </body>
</html>
Poi crei il file libri.xml e ci metti dentro come esempio:
Codice:
<?xml version="1.0" encoding="UTF-8"?>
<libri>
  <libro>
    <id>1</id>
    <titolo>Titolo libro 1</titolo>
    <totvalu>1</totvalu>
    <numvalu>2</numvalu>
    <valutazione>3</valutazione>
  </libro>
  <libro>
    <id>2</id>
    <titolo>Titolo libro 2</titolo>
    <totvalu>4</totvalu>
    <numvalu>5</numvalu>
    <valutazione>6</valutazione>
  </libro>
  <libro>
    <id>3</id>
    <titolo>Titolo libro 3</titolo>
    <totvalu>7</totvalu>
    <numvalu>8</numvalu>
    <valutazione>9</valutazione>
  </libro>
  <libro>
    <id>4</id>
    <titolo>Titolo libro 4</titolo>
    <totvalu>10</totvalu>
    <numvalu>11</numvalu>
    <valutazione>12</valutazione>
  </libro>
  <libro>
    <id>5</id>
    <titolo>Titolo libro 5</titolo>
    <totvalu>13</totvalu>
    <numvalu>14</numvalu>
    <valutazione>15</valutazione>
  </libro>
</libri>
 

Jonn

Utente Attivo
29 Dic 2012
352
3
18
Pistoia
Correggendo il file XML nelle varie parti, non può fartelo qualcun altro, lo sai solo tu come deve essere strutturato.
 

simo94n6

Nuovo Utente
5 Ott 2018
10
0
1
Warning: simplexml_load_file(): libri.xml:1: parser error : XML declaration allowed only at the start of the document in .... on line 8

Warning: simplexml_load_file(): <?xml version="1.0" encoding="UTF-8"?> in .... on line 8

Warning: simplexml_load_file(): ^ in .... on line 8
 

Jonn

Utente Attivo
29 Dic 2012
352
3
18
Pistoia
Basta leggere, te lo dice:
XML declaration allowed only at the start of the document == La dichiarazione XML è consentita solo all'inizio del documento.
on line 8 == alla linea 8.
Significa che ha trovato questa dichiarazione alla linea 8 del documento e non all'inizio (oppure duplicata).
PS. controlla anche che non ci siano spazi superflui prima della dichiarazione stessa.
 
Discussioni simili
Autore Titolo Forum Risposte Data
giancadeejay [PHP] Aggiornare un valore del database tramite form PHP 26
G Aggiornare le differenze di valore a video Javascript 2
S Aggiornare percorso file collegati MS Access 0
otto9due Inserire o aggiornare tabella my sql controllando una coppia di valori PHP 7
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
F Leggere e aggiornare dati di campi <input text> su file di test PHP 0
M Aggiornare stesso campo in due tabelle PHP 0
Alex_70 Aggiornare campo da un altro campo PHP 16
M Aggiornare simultaneamente i campi di due tabelle collegate con id PHP 4
L aggiornare 2 campi di una tabella insieme PHP 6
Leshabituelles Non riesco ad aggiornare PHP PHP 0
M [Javascript] Aggiornare like totali dopo click Javascript 0
P [PHP] Intercettare ed aggiornare campi di un database PHP 5
C [PHP] scrivere o aggiornare record in tabella PHP 7
T Aggiornare una tabella db richiamando da file php PHP 3
Q Problema su come far aggiornare i campi su un database Mysql PHP 17
M [Javascript] [PHP] aggiornare pagina ogni ora Javascript 2
B [Javascript] Cambiare classe ed aggiornare relativi eventi Javascript 3
S Aggiornare una tabella db richiamando da file php PHP 3
S [PHP]Aggiornare pagina in maniera trasparente... PHP 3
M [PHP] Aggiornare i dati dei record selezionati PHP 3
X come aggiornare codice php? PHP 5
ste80 [PHP] cancellare/aggiornare record DB PHP 24
WebDr [ASP] Aggiornare una pagina in un div da un altro div su pagina diversa Classic ASP 3
C Aggiornare App Html5 HTML e CSS 2
D [Javascript] aggiornare numero caratteri se campo già popolato Javascript 5
S [Javascript] Aggiornare solo un DIV una sola volta con un click di un bottone Javascript 9
Metazoo Recuperare variabile php da javascript senza aggiornare pagina PHP 5
Magenta [WordPress] Dati ftp per aggiornare in locale WordPress 10
giancadeejay Aggiornare tabella db con php PHP 10
giancadeejay [PHP] Aggiornare DB tramite UPLOAD file .csv PHP 39
L [PHP] Sommare campi e aggiornare tabella PHP 14
F Aggiornare marker su mappa google con una funzione ajax richiamata al cambio di una select Ajax 2
N eseguire pagina php senza aggiornare la pagina Ajax 3
M Aggiornare Plesk e PHP su VPS Linux OVH Server Dedicati e VPS 3
P Aggiornare Tabella con form ma senza Mysql HTML e CSS 0
P Aggiornare tabella tramite form PHP 17
garimpeiro Errore di sintassi si tenta di aggiornare file in formato dbf Programmazione 2
L Script per aggiornare pagina html Javascript 2
G Aggiornare immagine caricata nel DB Classic ASP 1
K mysql aggiornare campo Database 4
Marco_88 Aggiornare elemento DOM jQuery 9
J Aggiornare 2 tabelle PHP 3
R Aggiornare WP e riuscire poi a tornare indietro. WordPress 24
I come aggiornare il codice jQuery 1
P aggiornare div con un clic senza reload Ajax 2
M Aggiornare grafico con i dati inseriti in tabella PHP 0
A aggiornare pagina1 da link di pag2 Javascript 1
M Aggiornare valori in mysql (classifica) PHP 8
K Aggiornare solo una parte di Layout Sviluppo app per Android 0

Discussioni simili