Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Editar XML con base de datos.

Estas en el tema de Editar XML con base de datos. en el foro de PHP en Foros del Web. Saludos. Eh creado un pequeño codigo para editar un XML con simpleXML. Me gustaria me apoyaran a verificar si mi codigo tiene algun problema, ya ...
  #1 (permalink)  
Antiguo 17/06/2015, 10:41
Avatar de BREIQ  
Fecha de Ingreso: diciembre-2011
Mensajes: 36
Antigüedad: 12 años, 4 meses
Puntos: 2
Pregunta Editar XML con base de datos.

Saludos. Eh creado un pequeño codigo para editar un XML con simpleXML. Me gustaria me apoyaran a verificar si mi codigo tiene algun problema, ya que en algunas ocasiones tengo bugs.

No soy muy experto, asi que solicito su apoyo, saludos.

Código PHP:
<?php
  $db 
simplexml_load_file("xml/radioControl.xml");
  
$countID count($db->radios->radio);

  if(
$_POST[id] == 'nuevaEntrada'){
    
$_POST[id] = $countID;

    
$radioNueva $db->radios->addChild('radio');
    
$radioNueva->addChild('id''R'.$_POST[id]);
    
$radioNueva->addChild('modelo'$_POST[modelo]);
    
$radioNueva->addChild('marca'$_POST[marca]);
    
$radioNueva->addChild('sn'$_POST[sn]);
    
$radioNueva->addChild('ubicacion'$_POST[ubicacion]);
    
$radioNueva->addChild('notas'$_POST[notas]);

    
$piezas $radioNueva->addChild('piezas');
    
$piezas->addChild('radio'$_POST[radio]);
    
$piezas->addChild('bateria'$_POST[bateria]);
    
$piezas->addChild('antena'$_POST[antena]);
    
$piezas->addChild('base'$_POST[base]);
    
$piezas->addChild('cargador'$_POST[cargador]);
    
$piezas->addChild('caja'$_POST[caja]);
    
  }else{
    
$numeroNodo substr($_POST[id], 1);

    
$editarRadio $db->radios->addChild('radio');
    
$db->radios->radio[$numeroNodo]->id .=$_POST[id];
    
$db->radios->radio[$numeroNodo]->modelo .=$_POST[modelo];
    
$db->radios->radio[$numeroNodo]->marca .=$_POST[marca];
    
$db->radios->radio[$numeroNodo]->sn .=$_POST[sn];
    
$db->radios->radio[$numeroNodo]->ubicacion .=$_POST[ubicacion];
    
$db->radios->radio[$numeroNodo]->notas .=$_POST[notas];
    
    
$db->radios->radio[$numeroNodo]->piezas->radio .=$_POST[radio];
    
$db->radios->radio[$numeroNodo]->piezas->bateria .=$_POST[bateria];
    
$db->radios->radio[$numeroNodo]->piezas->antena .=$_POST[antena];
    
$db->radios->radio[$numeroNodo]->piezas->base .=$_POST[base];
    
$db->radios->radio[$numeroNodo]->piezas->cargador .=$_POST[cargador];
    
$db->radios->radio[$numeroNodo]->piezas->caja .=$_POST[caja];

  };

  
$db->saveXML('xml/radioControl.xml');
  
header('Location: http://127.0.0.1');

?>
  #2 (permalink)  
Antiguo 17/06/2015, 10:53
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Editar XML con base de datos.

Cita:
ya que en algunas ocasiones tengo bugs.
¿Qué bugs? ¿Cómo se manifiestan? ¿Qué mensajes de error se visualizan? ¿QUé hiciste para verificarlo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 17/06/2015, 10:57
Avatar de BREIQ  
Fecha de Ingreso: diciembre-2011
Mensajes: 36
Antigüedad: 12 años, 4 meses
Puntos: 2
Respuesta: Editar XML con base de datos.

Me aparece este error.

Que no puedo modificar nodos existentes. No tengo problemas para crearlos, aun que aveces se me duplican, pero se lo achaco mas a mi navegador.

Cita:
Error:
"Indirect modification of overloaded element of SimpleXMLElement has no effect"
Saludos y gracias por la pronta respuesta.


Edito:

Update del codigo. Gracias.

Código PHP:
Ver original
  1. <?php
  2.   $db = simplexml_load_file("xml/radioControl.xml");
  3.   $countID = count($db->radios->radio);
  4.  
  5.   if($_POST[id] == 'nuevaEntrada'){
  6.     $_POST[id] = $countID;
  7.  
  8.     $radioNueva = $db->radios->addChild('radio');
  9.     $radioNueva->addChild('id', 'R'.$_POST[id]);
  10.     $radioNueva->addChild('modelo', $_POST[modelo]);
  11.     $radioNueva->addChild('marca', $_POST[marca]);
  12.     $radioNueva->addChild('sn', $_POST[sn]);
  13.     $radioNueva->addChild('ubicacion', $_POST[ubicacion]);
  14.     $radioNueva->addChild('notas', $_POST[notas]);
  15.  
  16.     $piezas = $radioNueva->addChild('piezas');
  17.     $piezas->addChild('radio', $_POST[radio]);
  18.     $piezas->addChild('bateria', $_POST[bateria]);
  19.     $piezas->addChild('antena', $_POST[antena]);
  20.     $piezas->addChild('base', $_POST[base]);
  21.     $piezas->addChild('cargador', $_POST[cargador]);
  22.     $piezas->addChild('caja', $_POST[caja]);
  23.  
  24.   }else{
  25.     $numeroNodo = substr($_POST[id], 1);
  26.  
  27.     $db->radios->radio[$numeroNodo]->id =$_POST[id];
  28.     $db->radios->radio[$numeroNodo]->modelo =$_POST[modelo];
  29.     $db->radios->radio[$numeroNodo]->marca =$_POST[marca];
  30.     $db->radios->radio[$numeroNodo]->sn =$_POST[sn];
  31.     $db->radios->radio[$numeroNodo]->ubicacion =$_POST[ubicacion];
  32.     $db->radios->radio[$numeroNodo]->notas =$_POST[notas];
  33.  
  34.     $db->radios->radio[$numeroNodo]->piezas->radio =$_POST[radio];
  35.     $db->radios->radio[$numeroNodo]->piezas->bateria =$_POST[bateria];
  36.     $db->radios->radio[$numeroNodo]->piezas->antena =$_POST[antena];
  37.     $db->radios->radio[$numeroNodo]->piezas->base =$_POST[base];
  38.     $db->radios->radio[$numeroNodo]->piezas->cargador =$_POST[cargador];
  39.     $db->radios->radio[$numeroNodo]->piezas->caja =$_POST[caja];
  40.  
  41.   };
  42.  
  43.   $db->saveXML('xml/radioControl.xml');
  44.   header('Location: http://127.0.0.1');
  45.  
  46. ?>

Última edición por BREIQ; 17/06/2015 a las 12:00
  #4 (permalink)  
Antiguo 20/06/2015, 10:08
Avatar de BREIQ  
Fecha de Ingreso: diciembre-2011
Mensajes: 36
Antigüedad: 12 años, 4 meses
Puntos: 2
Respuesta: Editar XML con base de datos.

Ya logre solucionar el problema. La cuestion era que cuando trataba de utilizar el nodo no me detectava el valor como numero, asi que solo le puse un intval(); Dejo el codigo para si alguienb sufre algun dia lo mismo.

Código PHP:
Ver original
  1. <?php
  2.   $db = simplexml_load_file("xml/radioControl.xml"); //Leer base de datos XML
  3.   $countID = count($db->radios->radio); //Contar radios existentes en base de datos
  4.  
  5. /* Tomar datos del formulario */
  6.   $id = $_POST['id'];
  7.   $marca = $_POST['marca'];
  8.   $modelo = $_POST['modelo'];
  9.   $sn = $_POST['sn'];
  10.   $ubicacion = $_POST['ubicacion'];
  11.   $notas = $_POST['notas'];
  12.   $radio = $_POST['radio'];
  13.   $bateria = $_POST['bateria'];
  14.   $antena = $_POST['antena'];
  15.   $base = $_POST['base'];
  16.   $cargador = $_POST['cargador'];
  17.   $caja = $_POST['caja'];
  18.  
  19. /* Editar base de datos */
  20.   if($id == 'nuevaEntrada'){ //Crear radio nueva
  21.     $id = $countID;
  22.  
  23.     $radioNueva = $db->radios->addChild('radio');
  24.     $radioNueva->addChild('id', 'R'.$id);
  25.     $radioNueva->addChild('marca', $marca);
  26.     $radioNueva->addChild('modelo', $modelo);
  27.     $radioNueva->addChild('sn', $sn);
  28.     $radioNueva->addChild('ubicacion', $ubicacion);
  29.     $radioNueva->addChild('notas', $notas);
  30.  
  31.     $piezas = $radioNueva->addChild('piezas');
  32.     $piezas->addChild('radio', $radio);
  33.     $piezas->addChild('bateria', $bateria);
  34.     $piezas->addChild('antena', $antena);
  35.     $piezas->addChild('base', $base);
  36.     $piezas->addChild('cargador', $cargador);
  37.     $piezas->addChild('caja', $caja);
  38.  
  39.   }else{ //Editar radio existente
  40.     $id = intval($id);
  41.  
  42.     $db->radios->radio[$id]->marca = $marca;
  43.     $db->radios->radio[$id]->modelo = $modelo;
  44.     $db->radios->radio[$id]->sn = $sn;
  45.     $db->radios->radio[$id]->ubicacion = $ubicacion;
  46.     $db->radios->radio[$id]->notas = $notas;
  47.  
  48.     $db->radios->radio[$id]->piezas->radio = $radio;
  49.     $db->radios->radio[$id]->piezas->bateria = $bateria;
  50.     $db->radios->radio[$id]->piezas->antena = $antena;
  51.     $db->radios->radio[$id]->piezas->base = $base;
  52.     $db->radios->radio[$id]->piezas->cargador = $cargador;
  53.     $db->radios->radio[$id]->piezas->caja = $caja;
  54.  
  55.   };
  56.  
  57.   $db->saveXML('xml/radioControl.xml'); //Salvar XML
  58.   header("Location: http://127.0.0.1"); //Enviar a la pagina principal
  59.  
  60. ?>

Etiquetas: xml
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:43.